yaz-4.2.30/0000755000175000017500000000000011741237737007420 500000000000000yaz-4.2.30/win/0000755000175000017500000000000011741237744010213 500000000000000yaz-4.2.30/win/version.nsi.in0000644000175000017500000000004511741237744012737 00000000000000!define VERSION "@PACKAGE_VERSION@" yaz-4.2.30/win/makefile0000644000175000017500000006565111741237744011650 00000000000000# This file is part of the YAZ toolkit. # Copyright (C) 1995-2012 Index Data # Parameters DEBUG=0 # 0 for release, 1 for debug USE_MANIFEST = 1 # TCL TCL="C:\Tcl\bin\tclsh85.exe" #TCL="C:\Program Files\Tcl\bin\tclsh83.exe" HAVE_TCL=1 # iconv charcter conversion utility HAVE_ICONV=1 ICONV_DIR = c:\iconv-1.9.2.win32 # icu charcter conversion utility # get icu libraries from http://www.icu-project.org HAVE_ICU=1 ICU_LIB = c:\icu\lib ICU_BIN = c:\icu\bin ICU_INCLUDE = c:\icu\include # libxslt HAVE_LIBXSLT=1 LIBXSLT_DIR=c:\libxslt-1.1.26.win32 # libxml2 HAVE_LIBXML2=1 LIBXML2_DIR=c:\libxml2-2.7.6.win32 # zlib compression (used by libxml2) ZLIB_DIR = c:\zlib-1.2.3.win32 # get WIN32 binaries libxml2 & iconv & zlib from here: # http://www.zlatkovic.com/libxml.en.html # bison HAVE_BISON=1 BISON=bison default: all all: dirs generate dll sc_test client ztest yazicu zoomsh utilprog \ testprog iconv icu libxml2 libxslt yaz_url NSIS="c:\program files\nsis\makensis.exe" HHC="c:\program files\html help workshop\hhc.exe" dist: yaz.win32.nsi yaz.nsi distclean nmake DEBUG=0 $(NSIS) yaz.win32.nsi dist64: yaz.win64.nsi yaz.nsi distclean nmake make64 $(NSIS) yaz.win64.nsi make64: nmake DEBUG=0 HAVE_LIBXSLT=1 HAVE_LIBXML2=1 HAVE_ICONV=0 HAVE_ICU=1 LIBXML2_DIR=c:\libxml2-2.7.8.win64 LIBXSLT_DIR=c:\libxslt-1.1.26.win64 ICU_LIB=\icu64\lib64 ICU_INCLUDE=\icu64\include ICU_BIN=\icu64\bin64 distclean: nmake DEBUG=1 clean nmake DEBUG=0 clean nsis: all yaz32.nsi $(NSIS) yaz.win32.nsi nsis64: yaz.win64.nsi $(NSIS) yaz.win64.nsi nsishelp: $(NSIS) # Directories # The current directory is supposed to be something like # ..../yaz/win, everything is relative to that ROOTDIR=.. # The home of yaz INCLDIR=$(ROOTDIR)\include # our includes LIBDIR=$(ROOTDIR)\lib # We produce .lib, .exp etc there BINDIR=$(ROOTDIR)\bin # We produce exes and dlls there WINDIR=$(ROOTDIR)\win # all these Win make things SRCDIR=$(ROOTDIR)\src # for the case we move them under src DOCDIR=$(ROOTDIR)\doc # where the doc is # where we store intermediate files !if $(DEBUG) OBJDIR=$(WINDIR)\dobj !else OBJDIR=$(WINDIR)\obj !endif CLIENTDIR=$(ROOTDIR)\CLIENT ZTESTDIR=$(ROOTDIR)\ZTEST ZOOMDIR=$(ROOTDIR)\ZOOM UTILDIR=$(ROOTDIR)\UTIL TESTDIR=$(ROOTDIR)\TEST TMPDIR=$(ROOTDIR)\win\tmp TMP=$(TMPDIR) # Targets - what to make !if $(DEBUG) YAZ_DLL=$(BINDIR)\yaz4d.dll YAZ_IMPLIB=$(LIBDIR)\yaz4d.lib YAZ_ICU_DLL=$(BINDIR)\yaz_icu4d.dll YAZ_ICU_IMPLIB=$(LIBDIR)\yaz_icu4d.lib YAZ_COND_DLL=$(BINDIR)\yaz_cond4d.dll YAZ_COND_IMPLIB=$(LIBDIR)\yaz_cond4d.lib !else YAZ_DLL=$(BINDIR)\yaz4.dll YAZ_IMPLIB=$(LIBDIR)\yaz4.lib YAZ_ICU_DLL=$(BINDIR)\yaz_icu4.dll YAZ_ICU_IMPLIB=$(LIBDIR)\yaz_icu4.lib YAZ_COND_DLL=$(BINDIR)\yaz_cond4.dll YAZ_COND_IMPLIB=$(LIBDIR)\yaz_cond4.lib !endif CLIENT=$(BINDIR)\yaz-client.exe YAZ_ICU=$(BINDIR)\yaz-icu.exe YAZ_URL=$(BINDIR)\yaz-url.exe ZOOMSH=$(BINDIR)\zoomsh.exe ZTEST=$(BINDIR)\yaz-ztest.exe SC_TEST=$(BINDIR)\sc_test.exe ZOOMTST1=$(BINDIR)\zoomtst1.exe ZOOMTST2=$(BINDIR)\zoomtst2.exe ZOOMTST3=$(BINDIR)\zoomtst3.exe ZOOMTST4=$(BINDIR)\zoomtst4.exe ZOOMTST5=$(BINDIR)\zoomtst5.exe ZOOMTST6=$(BINDIR)\zoomtst6.exe ZOOMTST7=$(BINDIR)\zoomtst7.exe ZOOMTST8=$(BINDIR)\zoomtst8.exe ZOOMTST9=$(BINDIR)\zoomtst9.exe ZOOMTST10=$(BINDIR)\zoomtst10.exe CQL2PQF=$(BINDIR)\cql2pqf.exe CQL2XCQL=$(BINDIR)\cql2xcql.exe YAZ_MARCDUMP=$(BINDIR)\yaz-marcdump.exe TSTLOG=$(BINDIR)\test_log.exe TST_TIMING=$(BINDIR)\test_timing.exe TEST_MUTEX=$(BINDIR)\test_mutex.exe # shortcut names defined here dll: dirs generate $(YAZ_DLL) $(YAZ_COND_DLL) client: dirs generate $(CLIENT) ztest: dirs generate $(ZTEST) sc_test: $(SC_TEST) zoomsh: $(ZOOMSH) $(ZOOMTST1) $(ZOOMTST2) $(ZOOMTST3) \ $(ZOOMTST4) $(ZOOMTST5) $(ZOOMTST6) $(ZOOMTST7) $(ZOOMTST8) $(ZOOMTST9) \ $(ZOOMTST10) yaz_url: $(YAZ_URL) utilprog: $(CQL2PQF) $(CQL2XCQL) $(YAZ_MARCDUMP) testprog: $(TSTLOG) $(TST_TIMING) $(TEST_MUTEX) htmlhelp: $(DOCDIR)\htmlhelp.chm # Modules and conditional flags, etc !if $(HAVE_ICONV) ICONV_DEF= \ /D HAVE_ICONV_H=1 \ /I"$(ICONV_DIR)\include" ICONV_LIB= \ "$(ICONV_DIR)\lib\iconv.lib" iconv: $(BINDIR)\iconv.dll $(BINDIR)\iconv.dll: copy "$(ICONV_DIR)\bin\iconv.dll" $(BINDIR) !else ICONV_DEF= \ /D HAVE_ICONV_H=0 ICONV_LIB= iconv: !endif ###TRYING ICU FLAGS HERE WORKS #### ## ADAM ARE THESE FLAGS OK and the DLL sufficient ## ##IT COMPILES AND SEEMS TO WORK !if $(HAVE_ICU) ICU_DEF= \ /D YAZ_HAVE_ICU=1 /D HAVE_ICU_H=1 /I"$(ICU_INCLUDE)" ICU_LIBS= \ $(ICU_LIB)\icudt.lib $(ICU_LIB)\icuin.lib $(ICU_LIB)\icuuc.lib icu: $(BINDIR)\icudt42.dll $(BINDIR)\icuin42.dll $(BINDIR)\icuuc42.dll yazicu: dirs generate $(YAZ_ICU) $(BINDIR)\icudt42.dll: copy "$(ICU_BIN)\icudt42.dll" $(BINDIR) $(BINDIR)\icuin42.dll: copy "$(ICU_BIN)\icuin42.dll" $(BINDIR) $(BINDIR)\icuuc42.dll: copy "$(ICU_BIN)\icuuc42.dll" $(BINDIR) !else ICU_DEF= \ /D YAZ_HAVE_ICU=0 ICU_LIBS= icu: yazicu: !endif ### !if $(HAVE_LIBXML2) LIBXML2_LIB="$(LIBXML2_DIR)\lib\libxml2.lib" LIBXML2_DEF=/D YAZ_HAVE_XML2=1 /I"$(LIBXML2_DIR)\include" libxml2: $(BINDIR)\libxml2.dll $(BINDIR)\zlib1.dll $(BINDIR)\libxml2.dll: copy "$(LIBXML2_DIR)\bin\libxml2.dll" $(BINDIR) $(BINDIR)\zlib1.dll: copy "$(ZLIB_DIR)\bin\zlib1.dll" $(BINDIR) !else LIBXML2_LIB= LIBXML2_DEF=/D YAZ_HAVE_XML2=0 libxml2: !endif !if $(HAVE_LIBXSLT) LIBXSLT_LIB="$(LIBXSLT_DIR)\lib\libxslt.lib" LIBXSLT_DEF= \ /D HAVE_XSLTSAVERESULTTOSTRING=1 \ /D YAZ_HAVE_XSLT=1 \ /I"$(LIBXSLT_DIR)\include" libxslt: $(BINDIR)\libxslt.dll $(BINDIR)\libxslt.dll: copy "$(LIBXSLT_DIR)\bin\libxslt.dll" $(BINDIR) !else LIBXSLT_LIB= LIBXSLT_DEF=/D YAZ_HAVE_XSLT=0 libxslt: !endif ### C and CPP compiler (the same thing) # Note: $(CPP) has already been defined in the environment # (if you set things up right!) COMMON_C_OPTIONS= \ /nologo /W3 /EHsc /FD /c \ $(ICONV_DEF) \ $(ICU_DEF) \ $(LIBXML2_DEF) \ $(LIBXSLT_DEF) \ /D "_CRT_SECURE_NO_DEPRECATE" \ /D "_CRT_NONSTDC_NO_DEPRECATE" \ /D "_WINDOWS" \ /D "WIN32" \ /FR"$(OBJDIR)\\" \ /Fo"$(OBJDIR)\\" \ /Fd"$(OBJDIR)\\" COMMON_C_INCLUDES= \ /I"$(ROOTDIR)\include" \ /I"$(ROOTDIR)\libstemmer_c\include" DEBUG_C_OPTIONS= \ /D "_DEBUG" \ /MDd /Od /Zi /Gm RELEASE_C_OPTIONS= \ /D "NDEBUG" \ /MD /O2 # /W3 = warning level # /GX = Enable exception handling # /FD = Generate file dependencies (what ever they are) # /c = compile without linking # /FR = Generate browse info (.sbr file that gets combined into .bsc) # /Fo = object file name (or at least path) # /Fd = debug database name (or path) # /MD = Runtime library: Multithread DLL # /MDd = Runtime library: Multithread DLL (debug) # /Od = Disable optimising (debug) # /O2 = Optimize for speed # /Gm = Minimal rebuild (some cpp class stuff) # /Zi = Program database for debuggers # /ZI = Pgm database with special "edit&continue" stuff - not available in C5 ### Linker options LINK=link.exe !if $(USE_MANIFEST) MT=mt.exe /nologo !else MT=echo !endif LINK_LIBS= kernel32.lib ws2_32.lib advapi32.lib \ $(ICONV_LIB) $(LIBXML2_LIB) $(LIBXSLT_LIB) COMMON_LNK_OPTIONS= /nologo /subsystem:windows /incremental:no DEBUG_LNK_OPTIONS= /debug RELEASE_LNK_OPTIONS= DLL_LINK_OPTIONS= /dll CLIENT_LINK_OPTIONS = /subsystem:console COMMON_TCL_OPTIONS= ..\util\yaz-asncomp -I$(INCLDIR) -i yaz # Final opt variables !if $(DEBUG) COPT= $(COMMON_C_OPTIONS) $(DEBUG_C_OPTIONS) $(COMMON_C_INCLUDES) LNKOPT= $(COMMON_LNK_OPTIONS) $(DEBUG_LNK_OPTIONS) $(LNK_LIBS) TCLOPT= $(COMMON_TCL_OPTIONS) !else COPT= $(COMMON_C_OPTIONS) $(RELEASE_C_OPTIONS) $(COMMON_C_INCLUDES) LNKOPT= $(COMMON_LNK_OPTIONS) $(RELEASE_LNK_OPTIONS) $(LNK_LIBS) TCLOPT= $(COMMON_TCL_OPTIONS) !endif LINK_PROGRAM = $(LINK) $(LNKOPT) \ $(CLIENT_LINK_OPTIONS) $(LINK_LIBS) $(YAZ_IMPLIB) LINK_DLL = $(LINK) $(LNKOPT) \ $(LINK_LIBS) $(DLL_LINK_OPTIONS) # Source and object modules # Note: Ordinary source files are not specified here at # all, make finds them in suitable dirs. The object modules # need to be specified, though YAZ_CLIENT_OBJS= \ $(OBJDIR)\client.obj \ $(OBJDIR)\tabcomplete.obj \ $(OBJDIR)\admin.obj \ $(OBJDIR)\fhistory.obj YAZ_ICU_OBJS= $(OBJDIR)\yaz-icu.obj YAZ_URL_OBJS= $(OBJDIR)\yaz-url.obj COND_DLL_OBJS= $(OBJDIR)\condvar.obj ZTEST_OBJS= \ $(OBJDIR)\dummy-opac.obj \ $(OBJDIR)\read-marc.obj \ $(OBJDIR)\read-grs.obj \ $(OBJDIR)\ztest.obj SC_TEST_OBJS = \ $(OBJDIR)\sc_test.obj YAZ_ZOOMSH_OBJS = \ $(OBJDIR)\zoomsh.obj YAZ_ZOOMTST1_OBJS = \ $(OBJDIR)\zoomtst1.obj YAZ_ZOOMTST2_OBJS = \ $(OBJDIR)\zoomtst2.obj YAZ_ZOOMTST3_OBJS = \ $(OBJDIR)\zoomtst3.obj YAZ_ZOOMTST4_OBJS = \ $(OBJDIR)\zoomtst4.obj YAZ_ZOOMTST5_OBJS = \ $(OBJDIR)\zoomtst5.obj YAZ_ZOOMTST6_OBJS = \ $(OBJDIR)\zoomtst6.obj YAZ_ZOOMTST7_OBJS = \ $(OBJDIR)\zoomtst7.obj YAZ_ZOOMTST8_OBJS = \ $(OBJDIR)\zoomtst8.obj YAZ_ZOOMTST9_OBJS = \ $(OBJDIR)\zoomtst9.obj YAZ_ZOOMTST10_OBJS = \ $(OBJDIR)\zoomtst10.obj YAZ_CQL2PQF_OBJS = \ $(OBJDIR)\cql2pqf.obj YAZ_CQL2XCQL_OBJS = \ $(OBJDIR)\cql2xcql.obj YAZ_MARCDUMP_OBJS = \ $(OBJDIR)\marcdump.obj TSTLOG_OBJS = \ $(OBJDIR)\test_log.obj TST_TIMING_OBJS = \ $(OBJDIR)\test_timing.obj TEST_MUTEX_OBJS = \ $(OBJDIR)\test_mutex.obj MISC_OBJS= \ $(OBJDIR)\diag_map.obj \ $(OBJDIR)\base64.obj \ $(OBJDIR)\version.obj \ $(OBJDIR)\oid_std.obj \ $(OBJDIR)\eventl.obj \ $(OBJDIR)\requestq.obj \ $(OBJDIR)\seshigh.obj \ $(OBJDIR)\statserv.obj \ $(OBJDIR)\tcpdchk.obj \ $(OBJDIR)\cclerrms.obj \ $(OBJDIR)\cclfind.obj \ $(OBJDIR)\cclptree.obj \ $(OBJDIR)\cclqfile.obj \ $(OBJDIR)\cclqual.obj \ $(OBJDIR)\cclstr.obj \ $(OBJDIR)\ccltoken.obj \ $(OBJDIR)\cclxmlconfig.obj \ $(OBJDIR)\ccl_stop_words.obj \ $(OBJDIR)\comstack.obj \ $(OBJDIR)\tcpip.obj \ $(OBJDIR)\waislen.obj \ $(OBJDIR)\ber_any.obj \ $(OBJDIR)\ber_bit.obj \ $(OBJDIR)\ber_bool.obj \ $(OBJDIR)\ber_int.obj \ $(OBJDIR)\ber_len.obj \ $(OBJDIR)\ber_null.obj \ $(OBJDIR)\ber_oct.obj \ $(OBJDIR)\ber_oid.obj \ $(OBJDIR)\ber_tag.obj \ $(OBJDIR)\dumpber.obj \ $(OBJDIR)\errno.obj \ $(OBJDIR)\odr.obj \ $(OBJDIR)\odr_any.obj \ $(OBJDIR)\odr_bit.obj \ $(OBJDIR)\odr_bool.obj \ $(OBJDIR)\odr_choice.obj \ $(OBJDIR)\odr_cons.obj \ $(OBJDIR)\odr_enum.obj \ $(OBJDIR)\odr_int.obj \ $(OBJDIR)\odr_mem.obj \ $(OBJDIR)\odr_null.obj \ $(OBJDIR)\odr_oct.obj \ $(OBJDIR)\odr_oid.obj \ $(OBJDIR)\odr_seq.obj \ $(OBJDIR)\odr_tag.obj \ $(OBJDIR)\odr_use.obj \ $(OBJDIR)\odr_util.obj \ $(OBJDIR)\atoin.obj \ $(OBJDIR)\log.obj \ $(OBJDIR)\marcdisp.obj \ $(OBJDIR)\marc_read_xml.obj \ $(OBJDIR)\marc_read_iso2709.obj \ $(OBJDIR)\marc_read_line.obj \ $(OBJDIR)\nmem.obj \ $(OBJDIR)\nmemsdup.obj \ $(OBJDIR)\oid_db.obj \ $(OBJDIR)\oid_util.obj \ $(OBJDIR)\options.obj \ $(OBJDIR)\readconf.obj \ $(OBJDIR)\tpath.obj \ $(OBJDIR)\wrbuf.obj \ $(OBJDIR)\xmalloc.obj \ $(OBJDIR)\matchstr.obj \ $(OBJDIR)\siconv.obj \ $(OBJDIR)\iso5428.obj \ $(OBJDIR)\utf8.obj \ $(OBJDIR)\ucs4.obj \ $(OBJDIR)\advancegreek.obj \ $(OBJDIR)\snprintf.obj \ $(OBJDIR)\marc8.obj \ $(OBJDIR)\marc8r.obj \ $(OBJDIR)\iso5426.obj \ $(OBJDIR)\record_conv.obj \ $(OBJDIR)\retrieval.obj \ $(OBJDIR)\test.obj \ $(OBJDIR)\diagbib1.obj \ $(OBJDIR)\diagsru_update.obj \ $(OBJDIR)\diagsrw.obj \ $(OBJDIR)\diag-entry.obj \ $(OBJDIR)\zget.obj \ $(OBJDIR)\logrpn.obj \ $(OBJDIR)\querytowrbuf.obj \ $(OBJDIR)\pquery.obj \ $(OBJDIR)\yaz-ccl.obj \ $(OBJDIR)\otherinfo.obj \ $(OBJDIR)\sortspec.obj \ $(OBJDIR)\charneg.obj \ $(OBJDIR)\grs1disp.obj \ $(OBJDIR)\opacdisp.obj \ $(OBJDIR)\zgdu.obj \ $(OBJDIR)\soap.obj \ $(OBJDIR)\solr.obj \ $(OBJDIR)\solrtransform.obj \ $(OBJDIR)\srw.obj \ $(OBJDIR)\srwutil.obj \ $(OBJDIR)\zoom-c.obj \ $(OBJDIR)\zoom-event.obj \ $(OBJDIR)\zoom-record-cache.obj \ $(OBJDIR)\zoom-z3950.obj \ $(OBJDIR)\zoom-sru.obj \ $(OBJDIR)\zoom-query.obj \ $(OBJDIR)\record_render.obj \ $(OBJDIR)\facet.obj \ $(OBJDIR)\zoom-opt.obj \ $(OBJDIR)\zoom-socket.obj \ $(OBJDIR)\initopt.obj \ $(OBJDIR)\xmlquery.obj \ $(OBJDIR)\xmlerror.obj \ $(OBJDIR)\mime.obj \ $(OBJDIR)\cql.obj \ $(OBJDIR)\cql2ccl.obj \ $(OBJDIR)\cql_sortkeys.obj \ $(OBJDIR)\cqlstdio.obj \ $(OBJDIR)\cqlstring.obj \ $(OBJDIR)\cqltransform.obj \ $(OBJDIR)\cqlutil.obj \ $(OBJDIR)\cqlstrer.obj \ $(OBJDIR)\rpn2cql.obj \ $(OBJDIR)\rpn2solr.obj \ $(OBJDIR)\xcqlutil.obj \ $(OBJDIR)\elementset.obj \ $(OBJDIR)\timing.obj \ $(OBJDIR)\uri.obj \ $(OBJDIR)\query-charset.obj \ $(OBJDIR)\tokenizer.obj \ $(OBJDIR)\copy_types.obj \ $(OBJDIR)\http.obj \ $(OBJDIR)\match_glob.obj \ $(OBJDIR)\poll.obj \ $(OBJDIR)\daemon.obj \ $(OBJDIR)\iconv_encode_iso_8859_1.obj \ $(OBJDIR)\iconv_encode_marc8.obj \ $(OBJDIR)\iconv_decode_marc8.obj \ $(OBJDIR)\iconv_encode_wchar.obj \ $(OBJDIR)\iconv_decode_iso5426.obj \ $(OBJDIR)\iconv_decode_danmarc.obj \ $(OBJDIR)\mutex.obj \ $(OBJDIR)\thread_create.obj \ $(OBJDIR)\spipe.obj \ $(OBJDIR)\gettimeofday.obj \ $(OBJDIR)\json.obj \ $(OBJDIR)\sc.obj \ $(OBJDIR)\xml_include.obj \ $(OBJDIR)\file_glob.obj \ $(OBJDIR)\thread_id.obj \ $(OBJDIR)\dirent.obj \ $(OBJDIR)\url.obj Z3950_OBJS= \ $(OBJDIR)\z-date.obj\ $(OBJDIR)\z-univ.obj\ $(OBJDIR)\zes-update.obj\ $(OBJDIR)\zes-admin.obj \ $(OBJDIR)\z-accdes1.obj \ $(OBJDIR)\z-accform1.obj \ $(OBJDIR)\z-acckrb1.obj \ $(OBJDIR)\z-core.obj \ $(OBJDIR)\z-diag1.obj \ $(OBJDIR)\z-espec1.obj \ $(OBJDIR)\z-estask.obj \ $(OBJDIR)\z-exp.obj \ $(OBJDIR)\z-grs.obj \ $(OBJDIR)\z-opac.obj \ $(OBJDIR)\z-uifr1.obj \ $(OBJDIR)\z-rrf1.obj \ $(OBJDIR)\z-rrf2.obj \ $(OBJDIR)\z-sum.obj \ $(OBJDIR)\z-sutrs.obj \ $(OBJDIR)\zes-expi.obj \ $(OBJDIR)\zes-exps.obj \ $(OBJDIR)\zes-order.obj \ $(OBJDIR)\zes-pquery.obj \ $(OBJDIR)\zes-psched.obj \ $(OBJDIR)\zes-pset.obj \ $(OBJDIR)\zes-update0.obj \ $(OBJDIR)\prt-ext.obj \ $(OBJDIR)\z-charneg.obj \ $(OBJDIR)\z-mterm2.obj \ $(OBJDIR)\z-oclcui.obj \ $(OBJDIR)\z-facet-1.obj ILL_OBJS= \ $(OBJDIR)\ill-get.obj\ $(OBJDIR)\ill-core.obj\ $(OBJDIR)\item-req.obj STEMMER_OBJS = \ $(OBJDIR)\libstemmer.obj \ $(OBJDIR)\api.obj \ $(OBJDIR)\utilities.obj \ $(OBJDIR)\stem_UTF_8_porter.obj \ $(OBJDIR)\stem_UTF_8_english.obj DLL_OBJS =\ $(MISC_OBJS) \ $(Z3950_OBJS) \ $(ILL_OBJS) ICU_DLL_OBJS =\ $(OBJDIR)\icu_chain.obj \ $(OBJDIR)\icu_utf16.obj \ $(OBJDIR)\icu_utf8.obj \ $(OBJDIR)\icu_transform.obj \ $(OBJDIR)\icu_casemap.obj \ $(OBJDIR)\icu_tokenizer.obj \ $(OBJDIR)\icu_sortkey.obj \ $(OBJDIR)\stemmer.obj \ $(STEMMER_OBJS) # Generated C and H files Z3950_C_DIR=$(SRCDIR) ILL_C_DIR=$(SRCDIR) #!!! Should be moved to OBJ, but that requires too much trickery # Files generated from datetime.asn DATETIME_H_FILES = $(INCLDIR)\yaz\z-date.h DATETIME_C_FILES = $(Z3950_C_DIR)\z-date.c # Files generated from univres.asn UNIVRES_H_FILES = $(INCLDIR)\yaz\z-univ.h UNIVRES_C_FILES = $(Z3950_C_DIR)\z-univ.c # Files generated from esupdate.asn ESUPDATE_H_FILES = $(INCLDIR)\yaz\zes-update.h ESUPDATE_C_FILES = $(Z3950_C_DIR)\zes-update.c # Files generated from esadmin.asn ESADMIN_H_FILES = $(INCLDIR)\yaz\zes-admin.h ESADMIN_C_FILES = $(Z3950_C_DIR)\zes-admin.c # Files generated from esadmin.asn CHARNEG_H_FILES = $(INCLDIR)\yaz\z-charneg.h CHARNEG_C_FILES = $(Z3950_C_DIR)\z-charneg.c # Files generated from mterm2.asn MTERM2_H_FILES = $(INCLDIR)\yaz\z-mterm2.h MTERM2_C_FILES = $(Z3950_C_DIR)\z-mterm2.c # Files generated from mterm2.asn OCLCUI_H_FILES = $(INCLDIR)\yaz\z-oclcui.h OCLCUI_C_FILES = $(Z3950_C_DIR)\z-oclcui.c # Files generated from facet.asn FACET_H_FILES = $(INCLDIR)\yaz\z-facet-1.h FACET_C_FILES = $(Z3950_C_DIR)\z-facet-1.c # Files created from z3950v3.asn Z3950V3_H_FILES= \ $(INCLDIR)\yaz\z-accdes1.h \ $(INCLDIR)\yaz\z-core.h Z3950V3_C_FILES= \ $(Z3950_C_DIR)\z-accdes1.c \ $(Z3950_C_DIR)\z-accform1.c \ $(Z3950_C_DIR)\z-acckrb1.c \ $(Z3950_C_DIR)\z-core.c \ $(Z3950_C_DIR)\z-diag1.c \ $(Z3950_C_DIR)\z-espec1.c \ $(Z3950_C_DIR)\z-estask.c \ $(Z3950_C_DIR)\z-exp.c \ $(Z3950_C_DIR)\z-grs.c \ $(Z3950_C_DIR)\z-opac.c \ $(Z3950_C_DIR)\z-uifr1.c \ $(Z3950_C_DIR)\z-rrf1.c \ $(Z3950_C_DIR)\z-rrf2.c \ $(Z3950_C_DIR)\z-sum.c \ $(Z3950_C_DIR)\z-sutrs.c \ $(Z3950_C_DIR)\zes-expi.c \ $(Z3950_C_DIR)\zes-exps.c \ $(Z3950_C_DIR)\zes-order.c \ $(Z3950_C_DIR)\zes-pquery.c \ $(Z3950_C_DIR)\zes-psched.c \ $(Z3950_C_DIR)\zes-pset.c \ $(Z3950_C_DIR)\zes-update0.c # Files generated from ill9702.asn ILL_CORE_H_FILES= \ $(INCLDIR)\yaz\ill-core.h ILL_CORE_C_FILES= \ $(ILL_C_DIR)\ill-core.c # Files generated from itemreq.asn ITEM_REQ_H_FILES= \ $(INCLDIR)\yaz\item-req.h ITEM_REQ_C_FILES= \ $(ILL_C_DIR)\item-req.c # Combined.. DATETIME_FILES = $(DATETIME_H_FILES) $(DATETIME_C_FILES) UNIVRES_FILES = $(UNIVRES_H_FILES) $(UNIVRES_C_FILES) ESUPDATE_FILES = $(ESUPDATE_H_FILES) $(ESUPDATE_C_FILES) ESADMIN_FILES = $(ESADMIN_H_FILES) $(ESADMIN_C_FILES) Z3950V3_FILES= $(Z3950V3_C_FILES) $(Z3950V3_H_FILES) ILL_CORE_FILES= $(ILL_CORE_C_FILES) $(ILL_CORE_H_FILES) ITEM_REQ_FILES= $(ITEM_REQ_C_FILES) $(ITEM_REQ_H_FILES) CHARNEG_FILES = $(CHARNEG_C_FILES) $(CHARNEG_H_FILES) MTERM2_FILES = $(MTERM2_C_FILES) $(MTERM2_H_FILES) OCLCUI_FILES = $(OCLCUI_C_FILES) $(OCLCUI_H_FILES) FACET_FILES = $(FACET_C_FILES) $(FACET_H_FILES) GENERATED_C_FILES= \ $(Z3950V3_C_FILES) \ $(ESUPDATE_C_FILES) \ $(UNIVRES_C_FILES) \ $(DATETIME_C_FILES) \ $(ESADMIN_C_FILES) \ $(CHARNEG_C_FILES) \ $(MTERM2_C_FILES) \ $(OCLCUI_C_FILES) \ $(FACET_C_FILES) \ $(ILL_CORE_C_FILES) \ $(ITEM_REQ_C_FILES) GENERATED_H_FILES= \ $(Z3950V3_H_FILES) \ $(ESUPDATE_H_FILES) \ $(UNIVRES_H_FILES) \ $(DATETIME_H_FILES) \ $(ESADMIN_H_FILES) \ $(CHARNEG_H_FILES) \ $(MTERM2_H_FILES) \ $(OCLCUI_H_FILES) \ $(FACET_H_FILES) \ $(ILL_CORE_H_FILES) \ $(ITEM_REQ_H_FILES) generate: \ $(GENERATED_H_FILES) \ $(GENERATED_C_FILES) \ $(SRCDIR)\diagsrw.c \ $(SRCDIR)\diagbib1.c \ $(SRCDIR)\diagsru_update.c \ $(INCLDIR)\yaz\yaz-version.h # Compiling # Note: This defines where to look for the necessary # source files. Funny way of doing it, but it works. # yaz client {$(CLIENTDIR)}.c{$(OBJDIR)}.obj: $(CPP) $(COPT) $< /D"_CONSOLE" # Ztest {$(ZTESTDIR)}.c{$(OBJDIR)}.obj: $(CPP) $(COPT) $< /D"_CONSOLE" # Server {$(SERVERDIR)}.c{$(OBJDIR)}.obj: $(CPP) $(COPT) $< # Various YAZ source directories {$(SRCDIR)}.c{$(OBJDIR)}.obj: $(CPP) $(COPT) /D"YAZ_DLL" $< {$(ZOOMDIR)}.c{$(OBJDIR)}.obj: $(CPP) $(COPT) $< {$(UTILDIR)}.c{$(OBJDIR)}.obj: $(CPP) $(COPT) $< {$(TESTDIR)}.c{$(OBJDIR)}.obj: $(CPP) $(COPT) $< {$(ROOTDIR)\libstemmer_c\libstemmer}.c{$(OBJDIR)}.obj: $(CPP) $(COPT) $< {$(ROOTDIR)\libstemmer_c\runtime}.c{$(OBJDIR)}.obj: $(CPP) $(COPT) $< {$(ROOTDIR)\libstemmer_c\src_c}.c{$(OBJDIR)}.obj: $(CPP) $(COPT) $< # ASN-generated files !if $(HAVE_TCL) $(Z3950V3_FILES): $(SRCDIR)\z3950v3.asn @cd $(SRCDIR) $(TCL) $(TCLOPT) -d z.tcl z3950v3.asn @cd $(WINDIR) $(DATETIME_FILES): $(SRCDIR)\datetime.asn @cd $(SRCDIR) $(TCL) $(TCLOPT) -d z.tcl datetime.asn @cd $(WINDIR) $(UNIVRES_FILES): $(SRCDIR)\univres.asn @cd $(SRCDIR) $(TCL) $(TCLOPT) -d z.tcl univres.asn @cd $(WINDIR) $(ESUPDATE_FILES): $(SRCDIR)\esupdate.asn @cd $(SRCDIR) $(TCL) $(TCLOPT) -d z.tcl esupdate.asn @cd $(WINDIR) $(ESADMIN_FILES): $(SRCDIR)\esadmin.asn @cd $(SRCDIR) $(TCL) $(TCLOPT) -d z.tcl esadmin.asn @cd $(WINDIR) $(CHARNEG_FILES): $(SRCDIR)\charneg-3.asn @cd $(SRCDIR) $(TCL) $(TCLOPT) -d z.tcl charneg-3.asn @cd $(WINDIR) $(MTERM2_FILES): $(SRCDIR)\mterm2.asn @cd $(SRCDIR) $(TCL) $(TCLOPT) -d z.tcl mterm2.asn @cd $(WINDIR) $(OCLCUI_FILES): $(SRCDIR)\oclcui.asn @cd $(SRCDIR) $(TCL) $(TCLOPT) -d z.tcl oclcui.asn @cd $(WINDIR) $(FACET_FILES): $(SRCDIR)\facet.asn @cd $(SRCDIR) $(TCL) $(TCLOPT) -d z.tcl facet.asn @cd $(WINDIR) $(ILL_CORE_FILES): $(SRCDIR)\ill9702.asn @cd $(SRCDIR) $(TCL) $(TCLOPT) -d ill.tcl ill9702.asn @cd $(WINDIR) $(ITEM_REQ_FILES): $(SRCDIR)\item-req.asn @cd $(SRCDIR) $(TCL) $(TCLOPT) -d ill.tcl item-req.asn @cd $(WINDIR) $(SRCDIR)\marc8.c: $(SRCDIR)\codetables.xml $(SRCDIR)\charconv.tcl @cd $(SRCDIR) $(TCL) charconv.tcl -p marc8 codetables.xml -o marc8.c $(SRCDIR)\marc8r.c: $(SRCDIR)\codetables.xml $(SRCDIR)\charconv.tcl @cd $(SRCDIR) $(TCL) charconv.tcl -r -p marc8r codetables.xml -o marc8r.c $(SRCDIR)\iso5426.c: $(SRCDIR)\codetables-iso5426.xml $(SRCDIR)\charconv.tcl @cd $(SRCDIR) $(TCL) charconv.tcl -r -p iso5426 codetables-iso5426.xml -o iso5426.c $(SRCDIR)\oid_std.c: $(SRCDIR)\oid.csv @cd $(SRCDIR) $(TCL) oidtoc.tcl $(SRCDIR) oid.csv oid_std.c oid_std.h $(SRCDIR)\diagbib1.c: $(SRCDIR)\bib1.csv @cd $(SRCDIR) $(TCL) csvtobib1.tcl $(SRCDIR) $(SRCDIR)\diagsrw.c: $(SRCDIR)\srw.csv @cd $(SRCDIR) $(TCL) csvtosrw.tcl $(SRCDIR) $(SRCDIR)\diagsru_update.c: $(SRCDIR)\sru_update.csv @cd $(SRCDIR) $(TCL) csvtosru_update.tcl $(SRCDIR) $(INCLDIR)\yaz\yaz-version.h: $(ROOTDIR)/IDMETA @cd $(SRCDIR) $(TCL) mk_version.tcl $(ROOTDIR)/IDMETA $(INCLDIR)\yaz\yaz-version.h !endif !if $(HAVE_BISON) $(SRCDIR)\cql.c: $(SRCDIR)\cql.y @cd $(SRCDIR) $(BISON) -y -p cql_ -o cql.c cql.y !endif # Resources # The RC compiler (resource files) RSC=rc.exe YAZ_RC=$(WINDIR)\yaz.rc YAZ_RES=$(OBJDIR)\yaz.res YAZ_ICU_RES=$(OBJDIR)\yaz_icu.res !if $(DEBUG) RSOPT=/d_DEBUG !else RSOPT=/d_NDEBUG !endif $(YAZ_RES): $(YAZ_RC) $(RSC) $(RSOPT) /I"../include" /fo"$(YAZ_RES)" $(YAZ_RC) $(YAZ_ICU_RES): $(YAZ_RC) $(RSC) $(RSOPT) /DICU=1 /I"../include" /fo"$(YAZ_ICU_RES)" $(YAZ_RC) # Linking $(YAZ_DLL) $(YAZ_IMPLIB): "$(BINDIR)" $(DLL_OBJS) $(YAZ_RES) $(LINK_DLL) \ $(DLL_OBJS) \ $(YAZ_RES) \ /out:$@ \ /implib:"$(YAZ_IMPLIB)" $(MT) -manifest $@.manifest -outputresource:$@;2 $(YAZ_ICU_DLL) $(YAZ_ICU_IMPLIB): "$(BINDIR)" $(ICU_DLL_OBJS) $(YAZ_ICU_RES) $(LINK_DLL) $(ICU_LIBS) $(YAZ_IMPLIB)\ $(ICU_DLL_OBJS) \ $(YAZ_ICU_RES) \ /out:$@ \ /implib:"$(YAZ_ICU_IMPLIB)" $(MT) -manifest $@.manifest -outputresource:$@;2 $(YAZ_COND_DLL) $(YAZ_COND_IMPLIB): "$(BINDIR)" $(COND_DLL_OBJS) $(YAZ_COND_RES) $(LINK_DLL) $(COND_LIB) $(YAZ_IMPLIB)\ $(COND_DLL_OBJS) \ $(YAZ_COND_RES) \ /out:$@ \ /implib:"$(YAZ_COND_IMPLIB)" $(MT) -manifest $@.manifest -outputresource:$@;2 $(CLIENT) : "$(BINDIR)" $(YAZ_CLIENT_OBJS) $(YAZ_DLL) $(LINK_PROGRAM) $(YAZ_CLIENT_OBJS) /out:$@ $(MT) -manifest $@.manifest -outputresource:$@;1 $(YAZ_ICU) : "$(BINDIR)" $(YAZ_ICU_OBJS) $(YAZ_ICU_DLL) $(LINK_PROGRAM) $(ICU_LIBS) $(YAZ_ICU_IMPLIB) $(YAZ_ICU_OBJS) /out:$@ $(MT) -manifest $@.manifest -outputresource:$@;1 $(YAZ_URL) : "$(BINDIR)" $(YAZ_URL_OBJS) $(YAZ_DLL) $(LINK_PROGRAM) $(YAZ_URL_OBJS) /out:$@ $(MT) -manifest $@.manifest -outputresource:$@;1 $(SC_TEST) : "$(BINDIR)" $(SC_TEST_OBJS) $(YAZ_DLL) $(LINK_PROGRAM) $(SC_TEST_OBJS) /out:$@ $(MT) -manifest $@.manifest -outputresource:$@;1 $(ZOOMSH) : "$(BINDIR)" $(YAZ_ZOOMSH_OBJS) $(YAZ_DLL) $(LINK_PROGRAM) $(YAZ_ZOOMSH_OBJS) /out:$@ $(MT) -manifest $@.manifest -outputresource:$@;1 $(ZOOMTST1) : "$(BINDIR)" $(YAZ_ZOOMTST1_OBJS) $(YAZ_DLL) $(LINK_PROGRAM) $(YAZ_ZOOMTST1_OBJS) /out:$@ $(MT) -manifest $@.manifest -outputresource:$@;1 $(ZOOMTST2) : "$(BINDIR)" $(YAZ_ZOOMTST2_OBJS) $(YAZ_DLL) $(LINK_PROGRAM) $(YAZ_ZOOMTST2_OBJS) /out:$@ $(MT) -manifest $@.manifest -outputresource:$@;1 $(ZOOMTST3) : "$(BINDIR)" $(YAZ_ZOOMTST3_OBJS) $(YAZ_DLL) $(LINK_PROGRAM) $(YAZ_ZOOMTST3_OBJS) /out:$@ $(MT) -manifest $@.manifest -outputresource:$@;1 $(ZOOMTST4) : "$(BINDIR)" $(YAZ_ZOOMTST4_OBJS) $(YAZ_DLL) $(LINK_PROGRAM) $(YAZ_ZOOMTST4_OBJS) /out:$@ $(MT) -manifest $@.manifest -outputresource:$@;1 $(ZOOMTST5) : "$(BINDIR)" $(YAZ_ZOOMTST5_OBJS) $(YAZ_DLL) $(LINK_PROGRAM) $(YAZ_ZOOMTST5_OBJS) /out:$@ $(MT) -manifest $@.manifest -outputresource:$@;1 $(ZOOMTST6) : "$(BINDIR)" $(YAZ_ZOOMTST6_OBJS) $(YAZ_DLL) $(LINK_PROGRAM) $(YAZ_ZOOMTST6_OBJS) /out:$@ $(MT) -manifest $@.manifest -outputresource:$@;1 $(ZOOMTST7) : "$(BINDIR)" $(YAZ_ZOOMTST7_OBJS) $(YAZ_DLL) $(LINK_PROGRAM) $(YAZ_ZOOMTST7_OBJS) /out:$@ $(MT) -manifest $@.manifest -outputresource:$@;1 $(ZOOMTST8) : "$(BINDIR)" $(YAZ_ZOOMTST8_OBJS) $(YAZ_DLL) $(LINK_PROGRAM) $(YAZ_ZOOMTST8_OBJS) /out:$@ $(MT) -manifest $@.manifest -outputresource:$@;1 $(ZOOMTST9) : "$(BINDIR)" $(YAZ_ZOOMTST9_OBJS) $(YAZ_DLL) $(LINK_PROGRAM) $(YAZ_ZOOMTST9_OBJS) /out:$@ $(MT) -manifest $@.manifest -outputresource:$@;1 $(ZOOMTST10) : "$(BINDIR)" $(YAZ_ZOOMTST10_OBJS) $(YAZ_DLL) $(LINK_PROGRAM) $(YAZ_ZOOMTST10_OBJS) /out:$@ $(MT) -manifest $@.manifest -outputresource:$@;1 $(CQL2PQF) : "$(BINDIR)" $(YAZ_CQL2PQF_OBJS) $(YAZ_DLL) $(LINK_PROGRAM) $(YAZ_CQL2PQF_OBJS) /out:$@ $(MT) -manifest $@.manifest -outputresource:$@;1 $(CQL2XCQL) : "$(BINDIR)" $(YAZ_CQL2XCQL_OBJS) $(YAZ_DLL) $(LINK_PROGRAM) $(YAZ_CQL2XCQL_OBJS) /out:$@ $(MT) -manifest $@.manifest -outputresource:$@;1 $(ZTEST) : "$(BINDIR)" $(ZTEST_OBJS) $(YAZ_DLL) $(LINK_PROGRAM) $(ZTEST_OBJS) /out:$@ $(MT) -manifest $@.manifest -outputresource:$@;1 $(YAZ_MARCDUMP) : "$(BINDIR)" $(YAZ_MARCDUMP_OBJS) $(YAZ_DLL) $(LINK_PROGRAM) $(YAZ_MARCDUMP_OBJS) /out:$@ $(MT) -manifest $@.manifest -outputresource:$@;1 $(TSTLOG) : "$(BINDIR)" $(TSTLOG_OBJS) $(YAZ_DLL) $(LINK_PROGRAM) $(TSTLOG_OBJS) /out:$@ $(MT) -manifest $@.manifest -outputresource:$@;1 $(TST_TIMING) : "$(BINDIR)" $(TST_TIMING_OBJS) $(YAZ_DLL) $(LINK_PROGRAM) $(TST_TIMING_OBJS) /out:$@ $(MT) -manifest $@.manifest -outputresource:$@;1 $(TEST_MUTEX) : "$(BINDIR)" $(TEST_MUTEX_OBJS) $(YAZ_COND_DLL) $(LINK_PROGRAM) $(YAZ_COND_IMPLIB) $(TEST_MUTEX_OBJS) /out:$@ $(MT) -manifest $@.manifest -outputresource:$@;1 # Other rules $(DOCDIR)\htmlhelp.chm: $(DOCDIR)\htmlhelp.hhp @cd $(DOCDIR) -$(HHC) htmlhelp.hhp @cd $(WINDIR) clean: -del $(BINDIR)\*.exe -del $(BINDIR)\*.dll -del $(BINDIR)\*.pdb -del $(TMPDIR)\*. -del $(LIBDIR)\*.LIB -del $(OBJDIR)\*.OBJ realclean: clean -del $(SRCDIR)\marc8.c -del $(SRCDIR)\cql.c -del $(SRCDIR)\z-*.c -del $(SRCDIR)\ill-core.c -del $(SRCDIR)\item-req.c -del $(INCLDIR)\yaz\ill-core.h -del $(INCLDIR)\yaz\item-req.h -del $(INCLDIR)\yaz\z-accdes1.h -del $(INCLDIR)\yaz\z-core.h -del $(DATETIME_H_FILES) -del $(UNIVRES_H_FILES) -del $(ESUPDATE_H_FILES) # Because DOS del will only accept one file name to delete, # the _H_ files work only on sets that have just one file. # Z3950_H_FILES had to be spelled out. One more point for MS! # check directories and create if needed dirs: $(OBJDIR) $(WINDIR) $(LIBDIR) $(BINDIR) $(TMPDIR) $(OBJDIR) $(WINDIR) $(LIBDIR) $(BINDIR) $(TMPDIR): if not exist "$@/$(NUL)" mkdir "$@" # Explicit dependencies # force recompilation of everything, if makefile changed $(Z3950_OBJS): $(GENERATED_C_FILES) $(GENERATED_H_FILES) $(ILL_OBJS): $(ILL_CORE_FILES) $(ITEM_REQ_FILES) # makes sure we generate before compiling anything, as the # new proto.h refers to the generated files, and is included # in various places yaz-4.2.30/win/yaz.nsi0000644000175000017500000001446211741237744011460 00000000000000; This file is part of the YAZ toolkit. ; Copyright (C) 1995-2012 Index Data !include version.nsi ; Microsoft runtime CRT ; Uncomment exactly ONE of the sections below ; 1: MSVC 6 ; !define VS_RUNTIME_DLL "" ; !define VS_RUNTIME_MANIFEST "" ; 2: VS 2003 ; !define VS_RUNTIME_DLL "c:\Program Files\Microsoft Visual Studio .NET 2003\SDK\v1.1\Bin\msvcr71.dll" ;!define VS_RUNTIME_MANIFEST "" ; 3: VS 2005 ;!define VS_RUNTIME_DLL "c:\Program Files\Microsoft Visual Studio 8\VC\redist\x86\Microsoft.VC80.CRT\msvcr80.dll" ;!define VS_RUNTIME_MANIFEST "c:\Program Files\Microsoft Visual Studio 8\VC\redist\x86\Microsoft.VC80.CRT\Microsoft.VC80.CRT.manifest" ; 4: VS 2008 ;!define VS_RUNTIME_DLL "c:\Program Files\Microsoft Visual Studio 9.0\VC\redist\x86\Microsoft.VC90.CRT\msvc*90.dll" ;!define VS_RUNTIME_MANIFEST "c:\Program Files\Microsoft Visual Studio 9.0\VC\redist\x86\Microsoft.VC90.CRT\Microsoft.VC90.CRT.manifest" !include "MUI.nsh" SetCompressor bzip2 Name "YAZ" Caption "Index Data YAZ ${VERSION} Setup" OutFile "yaz_${VERSION}.exe" LicenseText "You must read the following license before installing:" LicenseData license.txt ComponentText "This will install the YAZ Toolkit on your computer:" InstType "Full (w/ Source)" InstType "Lite (w/o Source)" InstallDirRegKey HKLM "SOFTWARE\Index Data\YAZ" "" ;---------------------------- ; Pages !insertmacro MUI_PAGE_LICENSE "license.txt" !insertmacro MUI_PAGE_COMPONENTS !insertmacro MUI_PAGE_DIRECTORY !insertmacro MUI_PAGE_INSTFILES !insertmacro MUI_UNPAGE_CONFIRM !insertmacro MUI_UNPAGE_INSTFILES ; Page components ; Page directory ; Page instfiles ; UninstPage uninstConfirm ; UninstPage instfiles ;-------------------------------- ;Languages !insertmacro MUI_LANGUAGE "English" ;-------------------------------- Section "" ; (default section) SetOutPath "$INSTDIR" ; add files / whatever that need to be installed here. WriteRegStr HKLM "SOFTWARE\Index Data\YAZ" "" "$INSTDIR" WriteRegStr HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\YAZ" "DisplayName" "YAZ ${VERSION} (remove only)" WriteRegStr HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\YAZ" "UninstallString" '"$INSTDIR\uninst.exe"' ; write out uninstaller WriteUninstaller "$INSTDIR\uninst.exe" SetOutPath $SMPROGRAMS\YAZ CreateShortCut "$SMPROGRAMS\YAZ\YAZ Program Directory.lnk" \ "$INSTDIR" WriteINIStr "$SMPROGRAMS\YAZ\YAZ Home page.url" \ "InternetShortcut" "URL" "http://www.indexdata.com/yaz/" CreateShortCut "$SMPROGRAMS\YAZ\Uninstall YAZ.lnk" \ "$INSTDIR\uninst.exe" SetOutPath $INSTDIR File LICENSE.txt File ..\README File ..\NEWS SetOutPath $INSTDIR SetOutPath $INSTDIR\ztest File ..\ztest\dummy-grs File ..\ztest\dummy-words SetOutPath $INSTDIR\etc File ..\etc\*.xml File ..\etc\*.xsl File ..\etc\pqf.properties SectionEnd ; end of default section Section "YAZ Runtime" YAZ_Runtime SectionIn 1 2 IfFileExists "$INSTDIR\bin\yaz-ztest.exe" 0 Noservice ExecWait '"$INSTDIR\bin\yaz-ztest.exe" -remove' Noservice: SetOutPath $INSTDIR\bin File "${VS_RUNTIME_DLL}" File "${VS_RUNTIME_MANIFEST}" File ..\bin\*.dll File ..\bin\*.exe SetOutPath $SMPROGRAMS\YAZ CreateShortCut "$SMPROGRAMS\YAZ\YAZ Client.lnk" \ "$INSTDIR\bin\yaz-client.exe" SetOutPath $SMPROGRAMS\YAZ\Server CreateShortCut "$SMPROGRAMS\YAZ\Server\Server on console on port 9999.lnk" \ "$INSTDIR\bin\yaz-ztest.exe" '-w"$INSTDIR\ztest"' CreateShortCut "$SMPROGRAMS\YAZ\Server\Install Z39.50 service on port 210.lnk" \ "$INSTDIR\bin\yaz-ztest.exe" '-installa tcp:@:210' CreateShortCut "$SMPROGRAMS\YAZ\Server\Remove Z39.50 service.lnk" \ "$INSTDIR\bin\yaz-ztest.exe" '-remove' SectionEnd Section "YAZ Development" YAZ_Development SectionIn 1 2 SetOutPath $INSTDIR\include\yaz File ..\include\yaz\*.h SetOutPath $INSTDIR\lib File ..\lib\yaz*.lib SectionEnd Section "YAZ Documentation" YAZ_Documentation SectionIn 1 2 SetOutPath $INSTDIR\doc File /nonfatal /r ..\doc\*.css File /nonfatal /r ..\doc\*.ent File /nonfatal /r ..\doc\*.html File /r ..\doc\*.xml File /r ..\doc\*.png File /nonfatal /r ..\doc\*.xsl SetOutPath $SMPROGRAMS\YAZ CreateShortCut "$SMPROGRAMS\YAZ\HTML Documentation.lnk" \ "$INSTDIR\doc\index.html" SectionEnd Section "YAZ Source" YAZ_Source SectionIn 1 SetOutPath $INSTDIR File ..\IDMETA File /r ..\*.c File /r /x yaz ..\*.h SetOutPath $INSTDIR\util File ..\util\yaz-asncomp SetOutPath $INSTDIR\src File ..\src\*.y File ..\src\*.tcl File ..\src\*.csv File ..\src\*.asn File ..\src\codetables*.xml SetOutPath $INSTDIR\test File ..\test\marc*.* File ..\test\*.sh File ..\test\*.xml File ..\test\*.asn SetOutPath $INSTDIR\win File makefile File *.nsi File *.rc SectionEnd ; begin uninstall settings/section UninstallText "This will uninstall YAZ ${VERSION} from your system" Section Uninstall ; add delete commands to delete whatever files/registry keys/etc you installed here. Delete "$INSTDIR\uninst.exe" DeleteRegKey HKLM "SOFTWARE\Index Data\YAZ" DeleteRegKey HKLM "SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\YAZ" ExecWait '"$INSTDIR\bin\yaz-ztest" -remove' RMDir /r $SMPROGRAMS\YAZ RMDir /r $INSTDIR IfFileExists $INSTDIR 0 Removed MessageBox MB_OK|MB_ICONEXCLAMATION \ "Note: $INSTDIR could not be removed." Removed: SectionEnd ;-------------------------------- ;Descriptions ;Language strings LangString DESC_YAZ_Runtime ${LANG_ENGLISH} "YAZ runtime files needed in order for YAZ to run, such as DLLs." LangString DESC_YAZ_Development ${LANG_ENGLISH} "Header files and import libraries required for developing software using YAZ." LangString DESC_YAZ_Documentation ${LANG_ENGLISH} "YAZ Users' guide and reference in HTML. Describes both YAZ applications and the API." LangString DESC_YAZ_Source ${LANG_ENGLISH} "Source code of YAZ. Required if you need to rebuild YAZ (for debugging purposes)." ;Assign language strings to sections !insertmacro MUI_FUNCTION_DESCRIPTION_BEGIN !insertmacro MUI_DESCRIPTION_TEXT ${YAZ_Runtime} $(DESC_YAZ_Runtime) !insertmacro MUI_DESCRIPTION_TEXT ${YAZ_Development} $(DESC_YAZ_Development) !insertmacro MUI_DESCRIPTION_TEXT ${YAZ_Documentation} $(DESC_YAZ_Documentation) !insertmacro MUI_DESCRIPTION_TEXT ${YAZ_Source} $(DESC_YAZ_Source) !insertmacro MUI_FUNCTION_DESCRIPTION_END ; eof yaz-4.2.30/win/yaz.rc0000644000175000017500000000214211741237744011263 00000000000000#include "winver.h" #include "..\include\yaz\yaz-version.h" VS_VERSION_INFO VERSIONINFO FILEVERSION YAZ_FILEVERSION PRODUCTVERSION YAZ_FILEVERSION FILEFLAGSMASK 0x3fL #ifdef _DEBUG FILEFLAGS 0x1L #else FILEFLAGS 0x0L #endif FILEOS VOS_NT FILETYPE VFT_DLL FILESUBTYPE VFT2_UNKNOWN { BLOCK "StringFileInfo" { BLOCK "000004b0" BEGIN VALUE "Comments", "http://www.indexdata.com/yaz/\0" VALUE "CompanyName", "Index Data\0" #ifdef ICU VALUE "FileDescription", "YAZ ICU DLL\0" #else VALUE "FileDescription", "YAZ DLL\0" #endif VALUE "FileVersion", YAZ_VERSION "\0" VALUE "InternalName", "YAZ\0" VALUE "LegalCopyright", "Copyright © 1995-2012 Index Data\0" VALUE "LegalTrademarks", "\0" VALUE "OriginalFilename", "yaz.res\0" VALUE "PrivateBuild", "\0" VALUE "ProductName", "YAZ\0" VALUE "ProductVersion", YAZ_VERSION "\0" VALUE "SpecialBuild", "\0" END } BLOCK "VarFileInfo" BEGIN VALUE "Translation", 0x0, 1200 END } yaz-4.2.30/win/LICENSE.txt0000644000175000017500000000266611741237744011770 00000000000000Copyright (c) 1995-2012, Index Data. All rights reserved. Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: * Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. * Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. * Neither the name of Index Data nor the names of its contributors may be used to endorse or promote products derived from this software without specific prior written permission. THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS AND CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. yaz-4.2.30/win/version.nsi0000644000175000017500000000003211741237744012326 00000000000000!define VERSION "4.2.30" yaz-4.2.30/win/yaz.win32.nsi0000644000175000017500000000052511741237744012414 00000000000000; YAZ for Windows 32 bit, VS 2008 !define VS_RUNTIME_DLL "c:\Program Files\Microsoft Visual Studio 9.0\VC\redist\x86\Microsoft.VC90.CRT\msvc*90.dll" !define VS_RUNTIME_MANIFEST "c:\Program Files\Microsoft Visual Studio 9.0\VC\redist\x86\Microsoft.VC90.CRT\Microsoft.VC90.CRT.manifest" InstallDir "$PROGRAMFILES\YAZ" !include yaz.nsi yaz-4.2.30/win/yaz.win64.nsi0000644000175000017500000000053311741237744012420 00000000000000; YAZ for Windows 64 bit, VS 2008 !define VS_RUNTIME_DLL "c:\Program Files\Microsoft Visual Studio 9.0\VC\redist\amd64\Microsoft.VC90.CRT\msvc*90.dll" !define VS_RUNTIME_MANIFEST "c:\Program Files\Microsoft Visual Studio 9.0\VC\redist\amd64\Microsoft.VC90.CRT\Microsoft.VC90.CRT.manifest" InstallDir "$PROGRAMFILES64\YAZ" !include yaz.nsi yaz-4.2.30/config/0000755000175000017500000000000011741237737010665 500000000000000yaz-4.2.30/config/missing0000755000175000017500000002415211713710362012175 00000000000000#! /bin/sh # Common stub for a few missing GNU programs while installing. scriptversion=2012-01-06.13; # UTC # Copyright (C) 1996, 1997, 1999, 2000, 2002, 2003, 2004, 2005, 2006, # 2008, 2009, 2010, 2011, 2012 Free Software Foundation, Inc. # Originally by Fran,cois Pinard , 1996. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 2, or (at your option) # any later version. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # You should have received a copy of the GNU General Public License # along with this program. If not, see . # As a special exception to the GNU General Public License, if you # distribute this file as part of a program that contains a # configuration script generated by Autoconf, you may include it under # the same distribution terms that you use for the rest of that program. if test $# -eq 0; then echo 1>&2 "Try \`$0 --help' for more information" exit 1 fi run=: sed_output='s/.* --output[ =]\([^ ]*\).*/\1/p' sed_minuso='s/.* -o \([^ ]*\).*/\1/p' # In the cases where this matters, `missing' is being run in the # srcdir already. if test -f configure.ac; then configure_ac=configure.ac else configure_ac=configure.in fi msg="missing on your system" case $1 in --run) # Try to run requested program, and just exit if it succeeds. run= shift "$@" && exit 0 # Exit code 63 means version mismatch. This often happens # when the user try to use an ancient version of a tool on # a file that requires a minimum version. In this case we # we should proceed has if the program had been absent, or # if --run hadn't been passed. if test $? = 63; then run=: msg="probably too old" fi ;; -h|--h|--he|--hel|--help) echo "\ $0 [OPTION]... PROGRAM [ARGUMENT]... Handle \`PROGRAM [ARGUMENT]...' for when PROGRAM is missing, or return an error status if there is no known handling for PROGRAM. Options: -h, --help display this help and exit -v, --version output version information and exit --run try to run the given command, and emulate it if it fails Supported PROGRAM values: aclocal touch file \`aclocal.m4' autoconf touch file \`configure' autoheader touch file \`config.h.in' autom4te touch the output file, or create a stub one automake touch all \`Makefile.in' files bison create \`y.tab.[ch]', if possible, from existing .[ch] flex create \`lex.yy.c', if possible, from existing .c help2man touch the output file lex create \`lex.yy.c', if possible, from existing .c makeinfo touch the output file yacc create \`y.tab.[ch]', if possible, from existing .[ch] Version suffixes to PROGRAM as well as the prefixes \`gnu-', \`gnu', and \`g' are ignored when checking the name. Send bug reports to ." exit $? ;; -v|--v|--ve|--ver|--vers|--versi|--versio|--version) echo "missing $scriptversion (GNU Automake)" exit $? ;; -*) echo 1>&2 "$0: Unknown \`$1' option" echo 1>&2 "Try \`$0 --help' for more information" exit 1 ;; esac # normalize program name to check for. program=`echo "$1" | sed ' s/^gnu-//; t s/^gnu//; t s/^g//; t'` # Now exit if we have it, but it failed. Also exit now if we # don't have it and --version was passed (most likely to detect # the program). This is about non-GNU programs, so use $1 not # $program. case $1 in lex*|yacc*) # Not GNU programs, they don't have --version. ;; *) if test -z "$run" && ($1 --version) > /dev/null 2>&1; then # We have it, but it failed. exit 1 elif test "x$2" = "x--version" || test "x$2" = "x--help"; then # Could not run --version or --help. This is probably someone # running `$TOOL --version' or `$TOOL --help' to check whether # $TOOL exists and not knowing $TOOL uses missing. exit 1 fi ;; esac # If it does not exist, or fails to run (possibly an outdated version), # try to emulate it. case $program in aclocal*) echo 1>&2 "\ WARNING: \`$1' is $msg. You should only need it if you modified \`acinclude.m4' or \`${configure_ac}'. You might want to install the \`Automake' and \`Perl' packages. Grab them from any GNU archive site." touch aclocal.m4 ;; autoconf*) echo 1>&2 "\ WARNING: \`$1' is $msg. You should only need it if you modified \`${configure_ac}'. You might want to install the \`Autoconf' and \`GNU m4' packages. Grab them from any GNU archive site." touch configure ;; autoheader*) echo 1>&2 "\ WARNING: \`$1' is $msg. You should only need it if you modified \`acconfig.h' or \`${configure_ac}'. You might want to install the \`Autoconf' and \`GNU m4' packages. Grab them from any GNU archive site." files=`sed -n 's/^[ ]*A[CM]_CONFIG_HEADER(\([^)]*\)).*/\1/p' ${configure_ac}` test -z "$files" && files="config.h" touch_files= for f in $files; do case $f in *:*) touch_files="$touch_files "`echo "$f" | sed -e 's/^[^:]*://' -e 's/:.*//'`;; *) touch_files="$touch_files $f.in";; esac done touch $touch_files ;; automake*) echo 1>&2 "\ WARNING: \`$1' is $msg. You should only need it if you modified \`Makefile.am', \`acinclude.m4' or \`${configure_ac}'. You might want to install the \`Automake' and \`Perl' packages. Grab them from any GNU archive site." find . -type f -name Makefile.am -print | sed 's/\.am$/.in/' | while read f; do touch "$f"; done ;; autom4te*) echo 1>&2 "\ WARNING: \`$1' is needed, but is $msg. You might have modified some files without having the proper tools for further handling them. You can get \`$1' as part of \`Autoconf' from any GNU archive site." file=`echo "$*" | sed -n "$sed_output"` test -z "$file" && file=`echo "$*" | sed -n "$sed_minuso"` if test -f "$file"; then touch $file else test -z "$file" || exec >$file echo "#! /bin/sh" echo "# Created by GNU Automake missing as a replacement of" echo "# $ $@" echo "exit 0" chmod +x $file exit 1 fi ;; bison*|yacc*) echo 1>&2 "\ WARNING: \`$1' $msg. You should only need it if you modified a \`.y' file. You may need the \`Bison' package in order for those modifications to take effect. You can get \`Bison' from any GNU archive site." rm -f y.tab.c y.tab.h if test $# -ne 1; then eval LASTARG=\${$#} case $LASTARG in *.y) SRCFILE=`echo "$LASTARG" | sed 's/y$/c/'` if test -f "$SRCFILE"; then cp "$SRCFILE" y.tab.c fi SRCFILE=`echo "$LASTARG" | sed 's/y$/h/'` if test -f "$SRCFILE"; then cp "$SRCFILE" y.tab.h fi ;; esac fi if test ! -f y.tab.h; then echo >y.tab.h fi if test ! -f y.tab.c; then echo 'main() { return 0; }' >y.tab.c fi ;; lex*|flex*) echo 1>&2 "\ WARNING: \`$1' is $msg. You should only need it if you modified a \`.l' file. You may need the \`Flex' package in order for those modifications to take effect. You can get \`Flex' from any GNU archive site." rm -f lex.yy.c if test $# -ne 1; then eval LASTARG=\${$#} case $LASTARG in *.l) SRCFILE=`echo "$LASTARG" | sed 's/l$/c/'` if test -f "$SRCFILE"; then cp "$SRCFILE" lex.yy.c fi ;; esac fi if test ! -f lex.yy.c; then echo 'main() { return 0; }' >lex.yy.c fi ;; help2man*) echo 1>&2 "\ WARNING: \`$1' is $msg. You should only need it if you modified a dependency of a manual page. You may need the \`Help2man' package in order for those modifications to take effect. You can get \`Help2man' from any GNU archive site." file=`echo "$*" | sed -n "$sed_output"` test -z "$file" && file=`echo "$*" | sed -n "$sed_minuso"` if test -f "$file"; then touch $file else test -z "$file" || exec >$file echo ".ab help2man is required to generate this page" exit $? fi ;; makeinfo*) echo 1>&2 "\ WARNING: \`$1' is $msg. You should only need it if you modified a \`.texi' or \`.texinfo' file, or any other file indirectly affecting the aspect of the manual. The spurious call might also be the consequence of using a buggy \`make' (AIX, DU, IRIX). You might want to install the \`Texinfo' package or the \`GNU make' package. Grab either from any GNU archive site." # The file to touch is that specified with -o ... file=`echo "$*" | sed -n "$sed_output"` test -z "$file" && file=`echo "$*" | sed -n "$sed_minuso"` if test -z "$file"; then # ... or it is the one specified with @setfilename ... infile=`echo "$*" | sed 's/.* \([^ ]*\) *$/\1/'` file=`sed -n ' /^@setfilename/{ s/.* \([^ ]*\) *$/\1/ p q }' $infile` # ... or it is derived from the source name (dir/f.texi becomes f.info) test -z "$file" && file=`echo "$infile" | sed 's,.*/,,;s,.[^.]*$,,'`.info fi # If the file does not exist, the user really needs makeinfo; # let's fail without touching anything. test -f $file || exit 1 touch $file ;; *) echo 1>&2 "\ WARNING: \`$1' is needed, and is $msg. You might have modified some files without having the proper tools for further handling them. Check the \`README' file, it often tells you about the needed prerequisites for installing this package. You may also peek at any GNU archive site, in case some other package would contain this missing \`$1' program." exit 1 ;; esac exit 0 # Local variables: # eval: (add-hook 'write-file-hooks 'time-stamp) # time-stamp-start: "scriptversion=" # time-stamp-format: "%:y-%02m-%02d.%02H" # time-stamp-time-zone: "UTC" # time-stamp-end: "; # UTC" # End: yaz-4.2.30/config/ltmain.sh0000644000175000017500000105202211653051561012416 00000000000000 # libtool (GNU libtool) 2.4.2 # Written by Gordon Matzigkeit , 1996 # Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2003, 2004, 2005, 2006, # 2007, 2008, 2009, 2010, 2011 Free Software Foundation, Inc. # This is free software; see the source for copying conditions. There is NO # warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. # GNU Libtool is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 2 of the License, or # (at your option) any later version. # # As a special exception to the GNU General Public License, # if you distribute this file as part of a program or library that # is built using GNU Libtool, you may include this file under the # same distribution terms that you use for the rest of that program. # # GNU Libtool is distributed in the hope that it will be useful, but # WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU # General Public License for more details. # # You should have received a copy of the GNU General Public License # along with GNU Libtool; see the file COPYING. If not, a copy # can be downloaded from http://www.gnu.org/licenses/gpl.html, # or obtained by writing to the Free Software Foundation, Inc., # 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. # Usage: $progname [OPTION]... [MODE-ARG]... # # Provide generalized library-building support services. # # --config show all configuration variables # --debug enable verbose shell tracing # -n, --dry-run display commands without modifying any files # --features display basic configuration information and exit # --mode=MODE use operation mode MODE # --preserve-dup-deps don't remove duplicate dependency libraries # --quiet, --silent don't print informational messages # --no-quiet, --no-silent # print informational messages (default) # --no-warn don't display warning messages # --tag=TAG use configuration variables from tag TAG # -v, --verbose print more informational messages than default # --no-verbose don't print the extra informational messages # --version print version information # -h, --help, --help-all print short, long, or detailed help message # # MODE must be one of the following: # # clean remove files from the build directory # compile compile a source file into a libtool object # execute automatically set library path, then run a program # finish complete the installation of libtool libraries # install install libraries or executables # link create a library or an executable # uninstall remove libraries from an installed directory # # MODE-ARGS vary depending on the MODE. When passed as first option, # `--mode=MODE' may be abbreviated as `MODE' or a unique abbreviation of that. # Try `$progname --help --mode=MODE' for a more detailed description of MODE. # # When reporting a bug, please describe a test case to reproduce it and # include the following information: # # host-triplet: $host # shell: $SHELL # compiler: $LTCC # compiler flags: $LTCFLAGS # linker: $LD (gnu? $with_gnu_ld) # $progname: (GNU libtool) 2.4.2 Debian-2.4.2-1 # automake: $automake_version # autoconf: $autoconf_version # # Report bugs to . # GNU libtool home page: . # General help using GNU software: . PROGRAM=libtool PACKAGE=libtool VERSION="2.4.2 Debian-2.4.2-1" TIMESTAMP="" package_revision=1.3337 # Be Bourne compatible if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then emulate sh NULLCMD=: # Zsh 3.x and 4.x performs word splitting on ${1+"$@"}, which # is contrary to our usage. Disable this feature. alias -g '${1+"$@"}'='"$@"' setopt NO_GLOB_SUBST else case `(set -o) 2>/dev/null` in *posix*) set -o posix;; esac fi BIN_SH=xpg4; export BIN_SH # for Tru64 DUALCASE=1; export DUALCASE # for MKS sh # A function that is used when there is no print builtin or printf. func_fallback_echo () { eval 'cat <<_LTECHO_EOF $1 _LTECHO_EOF' } # NLS nuisances: We save the old values to restore during execute mode. lt_user_locale= lt_safe_locale= for lt_var in LANG LANGUAGE LC_ALL LC_CTYPE LC_COLLATE LC_MESSAGES do eval "if test \"\${$lt_var+set}\" = set; then save_$lt_var=\$$lt_var $lt_var=C export $lt_var lt_user_locale=\"$lt_var=\\\$save_\$lt_var; \$lt_user_locale\" lt_safe_locale=\"$lt_var=C; \$lt_safe_locale\" fi" done LC_ALL=C LANGUAGE=C export LANGUAGE LC_ALL $lt_unset CDPATH # Work around backward compatibility issue on IRIX 6.5. On IRIX 6.4+, sh # is ksh but when the shell is invoked as "sh" and the current value of # the _XPG environment variable is not equal to 1 (one), the special # positional parameter $0, within a function call, is the name of the # function. progpath="$0" : ${CP="cp -f"} test "${ECHO+set}" = set || ECHO=${as_echo-'printf %s\n'} : ${MAKE="make"} : ${MKDIR="mkdir"} : ${MV="mv -f"} : ${RM="rm -f"} : ${SHELL="${CONFIG_SHELL-/bin/sh}"} : ${Xsed="$SED -e 1s/^X//"} # Global variables: EXIT_SUCCESS=0 EXIT_FAILURE=1 EXIT_MISMATCH=63 # $? = 63 is used to indicate version mismatch to missing. EXIT_SKIP=77 # $? = 77 is used to indicate a skipped test to automake. exit_status=$EXIT_SUCCESS # Make sure IFS has a sensible default lt_nl=' ' IFS=" $lt_nl" dirname="s,/[^/]*$,," basename="s,^.*/,," # func_dirname file append nondir_replacement # Compute the dirname of FILE. If nonempty, add APPEND to the result, # otherwise set result to NONDIR_REPLACEMENT. func_dirname () { func_dirname_result=`$ECHO "${1}" | $SED "$dirname"` if test "X$func_dirname_result" = "X${1}"; then func_dirname_result="${3}" else func_dirname_result="$func_dirname_result${2}" fi } # func_dirname may be replaced by extended shell implementation # func_basename file func_basename () { func_basename_result=`$ECHO "${1}" | $SED "$basename"` } # func_basename may be replaced by extended shell implementation # func_dirname_and_basename file append nondir_replacement # perform func_basename and func_dirname in a single function # call: # dirname: Compute the dirname of FILE. If nonempty, # add APPEND to the result, otherwise set result # to NONDIR_REPLACEMENT. # value returned in "$func_dirname_result" # basename: Compute filename of FILE. # value retuned in "$func_basename_result" # Implementation must be kept synchronized with func_dirname # and func_basename. For efficiency, we do not delegate to # those functions but instead duplicate the functionality here. func_dirname_and_basename () { # Extract subdirectory from the argument. func_dirname_result=`$ECHO "${1}" | $SED -e "$dirname"` if test "X$func_dirname_result" = "X${1}"; then func_dirname_result="${3}" else func_dirname_result="$func_dirname_result${2}" fi func_basename_result=`$ECHO "${1}" | $SED -e "$basename"` } # func_dirname_and_basename may be replaced by extended shell implementation # func_stripname prefix suffix name # strip PREFIX and SUFFIX off of NAME. # PREFIX and SUFFIX must not contain globbing or regex special # characters, hashes, percent signs, but SUFFIX may contain a leading # dot (in which case that matches only a dot). # func_strip_suffix prefix name func_stripname () { case ${2} in .*) func_stripname_result=`$ECHO "${3}" | $SED "s%^${1}%%; s%\\\\${2}\$%%"`;; *) func_stripname_result=`$ECHO "${3}" | $SED "s%^${1}%%; s%${2}\$%%"`;; esac } # func_stripname may be replaced by extended shell implementation # These SED scripts presuppose an absolute path with a trailing slash. pathcar='s,^/\([^/]*\).*$,\1,' pathcdr='s,^/[^/]*,,' removedotparts=':dotsl s@/\./@/@g t dotsl s,/\.$,/,' collapseslashes='s@/\{1,\}@/@g' finalslash='s,/*$,/,' # func_normal_abspath PATH # Remove doubled-up and trailing slashes, "." path components, # and cancel out any ".." path components in PATH after making # it an absolute path. # value returned in "$func_normal_abspath_result" func_normal_abspath () { # Start from root dir and reassemble the path. func_normal_abspath_result= func_normal_abspath_tpath=$1 func_normal_abspath_altnamespace= case $func_normal_abspath_tpath in "") # Empty path, that just means $cwd. func_stripname '' '/' "`pwd`" func_normal_abspath_result=$func_stripname_result return ;; # The next three entries are used to spot a run of precisely # two leading slashes without using negated character classes; # we take advantage of case's first-match behaviour. ///*) # Unusual form of absolute path, do nothing. ;; //*) # Not necessarily an ordinary path; POSIX reserves leading '//' # and for example Cygwin uses it to access remote file shares # over CIFS/SMB, so we conserve a leading double slash if found. func_normal_abspath_altnamespace=/ ;; /*) # Absolute path, do nothing. ;; *) # Relative path, prepend $cwd. func_normal_abspath_tpath=`pwd`/$func_normal_abspath_tpath ;; esac # Cancel out all the simple stuff to save iterations. We also want # the path to end with a slash for ease of parsing, so make sure # there is one (and only one) here. func_normal_abspath_tpath=`$ECHO "$func_normal_abspath_tpath" | $SED \ -e "$removedotparts" -e "$collapseslashes" -e "$finalslash"` while :; do # Processed it all yet? if test "$func_normal_abspath_tpath" = / ; then # If we ascended to the root using ".." the result may be empty now. if test -z "$func_normal_abspath_result" ; then func_normal_abspath_result=/ fi break fi func_normal_abspath_tcomponent=`$ECHO "$func_normal_abspath_tpath" | $SED \ -e "$pathcar"` func_normal_abspath_tpath=`$ECHO "$func_normal_abspath_tpath" | $SED \ -e "$pathcdr"` # Figure out what to do with it case $func_normal_abspath_tcomponent in "") # Trailing empty path component, ignore it. ;; ..) # Parent dir; strip last assembled component from result. func_dirname "$func_normal_abspath_result" func_normal_abspath_result=$func_dirname_result ;; *) # Actual path component, append it. func_normal_abspath_result=$func_normal_abspath_result/$func_normal_abspath_tcomponent ;; esac done # Restore leading double-slash if one was found on entry. func_normal_abspath_result=$func_normal_abspath_altnamespace$func_normal_abspath_result } # func_relative_path SRCDIR DSTDIR # generates a relative path from SRCDIR to DSTDIR, with a trailing # slash if non-empty, suitable for immediately appending a filename # without needing to append a separator. # value returned in "$func_relative_path_result" func_relative_path () { func_relative_path_result= func_normal_abspath "$1" func_relative_path_tlibdir=$func_normal_abspath_result func_normal_abspath "$2" func_relative_path_tbindir=$func_normal_abspath_result # Ascend the tree starting from libdir while :; do # check if we have found a prefix of bindir case $func_relative_path_tbindir in $func_relative_path_tlibdir) # found an exact match func_relative_path_tcancelled= break ;; $func_relative_path_tlibdir*) # found a matching prefix func_stripname "$func_relative_path_tlibdir" '' "$func_relative_path_tbindir" func_relative_path_tcancelled=$func_stripname_result if test -z "$func_relative_path_result"; then func_relative_path_result=. fi break ;; *) func_dirname $func_relative_path_tlibdir func_relative_path_tlibdir=${func_dirname_result} if test "x$func_relative_path_tlibdir" = x ; then # Have to descend all the way to the root! func_relative_path_result=../$func_relative_path_result func_relative_path_tcancelled=$func_relative_path_tbindir break fi func_relative_path_result=../$func_relative_path_result ;; esac done # Now calculate path; take care to avoid doubling-up slashes. func_stripname '' '/' "$func_relative_path_result" func_relative_path_result=$func_stripname_result func_stripname '/' '/' "$func_relative_path_tcancelled" if test "x$func_stripname_result" != x ; then func_relative_path_result=${func_relative_path_result}/${func_stripname_result} fi # Normalisation. If bindir is libdir, return empty string, # else relative path ending with a slash; either way, target # file name can be directly appended. if test ! -z "$func_relative_path_result"; then func_stripname './' '' "$func_relative_path_result/" func_relative_path_result=$func_stripname_result fi } # The name of this program: func_dirname_and_basename "$progpath" progname=$func_basename_result # Make sure we have an absolute path for reexecution: case $progpath in [\\/]*|[A-Za-z]:\\*) ;; *[\\/]*) progdir=$func_dirname_result progdir=`cd "$progdir" && pwd` progpath="$progdir/$progname" ;; *) save_IFS="$IFS" IFS=${PATH_SEPARATOR-:} for progdir in $PATH; do IFS="$save_IFS" test -x "$progdir/$progname" && break done IFS="$save_IFS" test -n "$progdir" || progdir=`pwd` progpath="$progdir/$progname" ;; esac # Sed substitution that helps us do robust quoting. It backslashifies # metacharacters that are still active within double-quoted strings. Xsed="${SED}"' -e 1s/^X//' sed_quote_subst='s/\([`"$\\]\)/\\\1/g' # Same as above, but do not quote variable references. double_quote_subst='s/\(["`\\]\)/\\\1/g' # Sed substitution that turns a string into a regex matching for the # string literally. sed_make_literal_regex='s,[].[^$\\*\/],\\&,g' # Sed substitution that converts a w32 file name or path # which contains forward slashes, into one that contains # (escaped) backslashes. A very naive implementation. lt_sed_naive_backslashify='s|\\\\*|\\|g;s|/|\\|g;s|\\|\\\\|g' # Re-`\' parameter expansions in output of double_quote_subst that were # `\'-ed in input to the same. If an odd number of `\' preceded a '$' # in input to double_quote_subst, that '$' was protected from expansion. # Since each input `\' is now two `\'s, look for any number of runs of # four `\'s followed by two `\'s and then a '$'. `\' that '$'. bs='\\' bs2='\\\\' bs4='\\\\\\\\' dollar='\$' sed_double_backslash="\ s/$bs4/&\\ /g s/^$bs2$dollar/$bs&/ s/\\([^$bs]\\)$bs2$dollar/\\1$bs2$bs$dollar/g s/\n//g" # Standard options: opt_dry_run=false opt_help=false opt_quiet=false opt_verbose=false opt_warning=: # func_echo arg... # Echo program name prefixed message, along with the current mode # name if it has been set yet. func_echo () { $ECHO "$progname: ${opt_mode+$opt_mode: }$*" } # func_verbose arg... # Echo program name prefixed message in verbose mode only. func_verbose () { $opt_verbose && func_echo ${1+"$@"} # A bug in bash halts the script if the last line of a function # fails when set -e is in force, so we need another command to # work around that: : } # func_echo_all arg... # Invoke $ECHO with all args, space-separated. func_echo_all () { $ECHO "$*" } # func_error arg... # Echo program name prefixed message to standard error. func_error () { $ECHO "$progname: ${opt_mode+$opt_mode: }"${1+"$@"} 1>&2 } # func_warning arg... # Echo program name prefixed warning message to standard error. func_warning () { $opt_warning && $ECHO "$progname: ${opt_mode+$opt_mode: }warning: "${1+"$@"} 1>&2 # bash bug again: : } # func_fatal_error arg... # Echo program name prefixed message to standard error, and exit. func_fatal_error () { func_error ${1+"$@"} exit $EXIT_FAILURE } # func_fatal_help arg... # Echo program name prefixed message to standard error, followed by # a help hint, and exit. func_fatal_help () { func_error ${1+"$@"} func_fatal_error "$help" } help="Try \`$progname --help' for more information." ## default # func_grep expression filename # Check whether EXPRESSION matches any line of FILENAME, without output. func_grep () { $GREP "$1" "$2" >/dev/null 2>&1 } # func_mkdir_p directory-path # Make sure the entire path to DIRECTORY-PATH is available. func_mkdir_p () { my_directory_path="$1" my_dir_list= if test -n "$my_directory_path" && test "$opt_dry_run" != ":"; then # Protect directory names starting with `-' case $my_directory_path in -*) my_directory_path="./$my_directory_path" ;; esac # While some portion of DIR does not yet exist... while test ! -d "$my_directory_path"; do # ...make a list in topmost first order. Use a colon delimited # list incase some portion of path contains whitespace. my_dir_list="$my_directory_path:$my_dir_list" # If the last portion added has no slash in it, the list is done case $my_directory_path in */*) ;; *) break ;; esac # ...otherwise throw away the child directory and loop my_directory_path=`$ECHO "$my_directory_path" | $SED -e "$dirname"` done my_dir_list=`$ECHO "$my_dir_list" | $SED 's,:*$,,'` save_mkdir_p_IFS="$IFS"; IFS=':' for my_dir in $my_dir_list; do IFS="$save_mkdir_p_IFS" # mkdir can fail with a `File exist' error if two processes # try to create one of the directories concurrently. Don't # stop in that case! $MKDIR "$my_dir" 2>/dev/null || : done IFS="$save_mkdir_p_IFS" # Bail out if we (or some other process) failed to create a directory. test -d "$my_directory_path" || \ func_fatal_error "Failed to create \`$1'" fi } # func_mktempdir [string] # Make a temporary directory that won't clash with other running # libtool processes, and avoids race conditions if possible. If # given, STRING is the basename for that directory. func_mktempdir () { my_template="${TMPDIR-/tmp}/${1-$progname}" if test "$opt_dry_run" = ":"; then # Return a directory name, but don't create it in dry-run mode my_tmpdir="${my_template}-$$" else # If mktemp works, use that first and foremost my_tmpdir=`mktemp -d "${my_template}-XXXXXXXX" 2>/dev/null` if test ! -d "$my_tmpdir"; then # Failing that, at least try and use $RANDOM to avoid a race my_tmpdir="${my_template}-${RANDOM-0}$$" save_mktempdir_umask=`umask` umask 0077 $MKDIR "$my_tmpdir" umask $save_mktempdir_umask fi # If we're not in dry-run mode, bomb out on failure test -d "$my_tmpdir" || \ func_fatal_error "cannot create temporary directory \`$my_tmpdir'" fi $ECHO "$my_tmpdir" } # func_quote_for_eval arg # Aesthetically quote ARG to be evaled later. # This function returns two values: FUNC_QUOTE_FOR_EVAL_RESULT # is double-quoted, suitable for a subsequent eval, whereas # FUNC_QUOTE_FOR_EVAL_UNQUOTED_RESULT has merely all characters # which are still active within double quotes backslashified. func_quote_for_eval () { case $1 in *[\\\`\"\$]*) func_quote_for_eval_unquoted_result=`$ECHO "$1" | $SED "$sed_quote_subst"` ;; *) func_quote_for_eval_unquoted_result="$1" ;; esac case $func_quote_for_eval_unquoted_result in # Double-quote args containing shell metacharacters to delay # word splitting, command substitution and and variable # expansion for a subsequent eval. # Many Bourne shells cannot handle close brackets correctly # in scan sets, so we specify it separately. *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*|"") func_quote_for_eval_result="\"$func_quote_for_eval_unquoted_result\"" ;; *) func_quote_for_eval_result="$func_quote_for_eval_unquoted_result" esac } # func_quote_for_expand arg # Aesthetically quote ARG to be evaled later; same as above, # but do not quote variable references. func_quote_for_expand () { case $1 in *[\\\`\"]*) my_arg=`$ECHO "$1" | $SED \ -e "$double_quote_subst" -e "$sed_double_backslash"` ;; *) my_arg="$1" ;; esac case $my_arg in # Double-quote args containing shell metacharacters to delay # word splitting and command substitution for a subsequent eval. # Many Bourne shells cannot handle close brackets correctly # in scan sets, so we specify it separately. *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*|"") my_arg="\"$my_arg\"" ;; esac func_quote_for_expand_result="$my_arg" } # func_show_eval cmd [fail_exp] # Unless opt_silent is true, then output CMD. Then, if opt_dryrun is # not true, evaluate CMD. If the evaluation of CMD fails, and FAIL_EXP # is given, then evaluate it. func_show_eval () { my_cmd="$1" my_fail_exp="${2-:}" ${opt_silent-false} || { func_quote_for_expand "$my_cmd" eval "func_echo $func_quote_for_expand_result" } if ${opt_dry_run-false}; then :; else eval "$my_cmd" my_status=$? if test "$my_status" -eq 0; then :; else eval "(exit $my_status); $my_fail_exp" fi fi } # func_show_eval_locale cmd [fail_exp] # Unless opt_silent is true, then output CMD. Then, if opt_dryrun is # not true, evaluate CMD. If the evaluation of CMD fails, and FAIL_EXP # is given, then evaluate it. Use the saved locale for evaluation. func_show_eval_locale () { my_cmd="$1" my_fail_exp="${2-:}" ${opt_silent-false} || { func_quote_for_expand "$my_cmd" eval "func_echo $func_quote_for_expand_result" } if ${opt_dry_run-false}; then :; else eval "$lt_user_locale $my_cmd" my_status=$? eval "$lt_safe_locale" if test "$my_status" -eq 0; then :; else eval "(exit $my_status); $my_fail_exp" fi fi } # func_tr_sh # Turn $1 into a string suitable for a shell variable name. # Result is stored in $func_tr_sh_result. All characters # not in the set a-zA-Z0-9_ are replaced with '_'. Further, # if $1 begins with a digit, a '_' is prepended as well. func_tr_sh () { case $1 in [0-9]* | *[!a-zA-Z0-9_]*) func_tr_sh_result=`$ECHO "$1" | $SED 's/^\([0-9]\)/_\1/; s/[^a-zA-Z0-9_]/_/g'` ;; * ) func_tr_sh_result=$1 ;; esac } # func_version # Echo version message to standard output and exit. func_version () { $opt_debug $SED -n '/(C)/!b go :more /\./!{ N s/\n# / / b more } :go /^# '$PROGRAM' (GNU /,/# warranty; / { s/^# // s/^# *$// s/\((C)\)[ 0-9,-]*\( [1-9][0-9]*\)/\1\2/ p }' < "$progpath" exit $? } # func_usage # Echo short help message to standard output and exit. func_usage () { $opt_debug $SED -n '/^# Usage:/,/^# *.*--help/ { s/^# // s/^# *$// s/\$progname/'$progname'/ p }' < "$progpath" echo $ECHO "run \`$progname --help | more' for full usage" exit $? } # func_help [NOEXIT] # Echo long help message to standard output and exit, # unless 'noexit' is passed as argument. func_help () { $opt_debug $SED -n '/^# Usage:/,/# Report bugs to/ { :print s/^# // s/^# *$// s*\$progname*'$progname'* s*\$host*'"$host"'* s*\$SHELL*'"$SHELL"'* s*\$LTCC*'"$LTCC"'* s*\$LTCFLAGS*'"$LTCFLAGS"'* s*\$LD*'"$LD"'* s/\$with_gnu_ld/'"$with_gnu_ld"'/ s/\$automake_version/'"`(${AUTOMAKE-automake} --version) 2>/dev/null |$SED 1q`"'/ s/\$autoconf_version/'"`(${AUTOCONF-autoconf} --version) 2>/dev/null |$SED 1q`"'/ p d } /^# .* home page:/b print /^# General help using/b print ' < "$progpath" ret=$? if test -z "$1"; then exit $ret fi } # func_missing_arg argname # Echo program name prefixed message to standard error and set global # exit_cmd. func_missing_arg () { $opt_debug func_error "missing argument for $1." exit_cmd=exit } # func_split_short_opt shortopt # Set func_split_short_opt_name and func_split_short_opt_arg shell # variables after splitting SHORTOPT after the 2nd character. func_split_short_opt () { my_sed_short_opt='1s/^\(..\).*$/\1/;q' my_sed_short_rest='1s/^..\(.*\)$/\1/;q' func_split_short_opt_name=`$ECHO "$1" | $SED "$my_sed_short_opt"` func_split_short_opt_arg=`$ECHO "$1" | $SED "$my_sed_short_rest"` } # func_split_short_opt may be replaced by extended shell implementation # func_split_long_opt longopt # Set func_split_long_opt_name and func_split_long_opt_arg shell # variables after splitting LONGOPT at the `=' sign. func_split_long_opt () { my_sed_long_opt='1s/^\(--[^=]*\)=.*/\1/;q' my_sed_long_arg='1s/^--[^=]*=//' func_split_long_opt_name=`$ECHO "$1" | $SED "$my_sed_long_opt"` func_split_long_opt_arg=`$ECHO "$1" | $SED "$my_sed_long_arg"` } # func_split_long_opt may be replaced by extended shell implementation exit_cmd=: magic="%%%MAGIC variable%%%" magic_exe="%%%MAGIC EXE variable%%%" # Global variables. nonopt= preserve_args= lo2o="s/\\.lo\$/.${objext}/" o2lo="s/\\.${objext}\$/.lo/" extracted_archives= extracted_serial=0 # If this variable is set in any of the actions, the command in it # will be execed at the end. This prevents here-documents from being # left over by shells. exec_cmd= # func_append var value # Append VALUE to the end of shell variable VAR. func_append () { eval "${1}=\$${1}\${2}" } # func_append may be replaced by extended shell implementation # func_append_quoted var value # Quote VALUE and append to the end of shell variable VAR, separated # by a space. func_append_quoted () { func_quote_for_eval "${2}" eval "${1}=\$${1}\\ \$func_quote_for_eval_result" } # func_append_quoted may be replaced by extended shell implementation # func_arith arithmetic-term... func_arith () { func_arith_result=`expr "${@}"` } # func_arith may be replaced by extended shell implementation # func_len string # STRING may not start with a hyphen. func_len () { func_len_result=`expr "${1}" : ".*" 2>/dev/null || echo $max_cmd_len` } # func_len may be replaced by extended shell implementation # func_lo2o object func_lo2o () { func_lo2o_result=`$ECHO "${1}" | $SED "$lo2o"` } # func_lo2o may be replaced by extended shell implementation # func_xform libobj-or-source func_xform () { func_xform_result=`$ECHO "${1}" | $SED 's/\.[^.]*$/.lo/'` } # func_xform may be replaced by extended shell implementation # func_fatal_configuration arg... # Echo program name prefixed message to standard error, followed by # a configuration failure hint, and exit. func_fatal_configuration () { func_error ${1+"$@"} func_error "See the $PACKAGE documentation for more information." func_fatal_error "Fatal configuration error." } # func_config # Display the configuration for all the tags in this script. func_config () { re_begincf='^# ### BEGIN LIBTOOL' re_endcf='^# ### END LIBTOOL' # Default configuration. $SED "1,/$re_begincf CONFIG/d;/$re_endcf CONFIG/,\$d" < "$progpath" # Now print the configurations for the tags. for tagname in $taglist; do $SED -n "/$re_begincf TAG CONFIG: $tagname\$/,/$re_endcf TAG CONFIG: $tagname\$/p" < "$progpath" done exit $? } # func_features # Display the features supported by this script. func_features () { echo "host: $host" if test "$build_libtool_libs" = yes; then echo "enable shared libraries" else echo "disable shared libraries" fi if test "$build_old_libs" = yes; then echo "enable static libraries" else echo "disable static libraries" fi exit $? } # func_enable_tag tagname # Verify that TAGNAME is valid, and either flag an error and exit, or # enable the TAGNAME tag. We also add TAGNAME to the global $taglist # variable here. func_enable_tag () { # Global variable: tagname="$1" re_begincf="^# ### BEGIN LIBTOOL TAG CONFIG: $tagname\$" re_endcf="^# ### END LIBTOOL TAG CONFIG: $tagname\$" sed_extractcf="/$re_begincf/,/$re_endcf/p" # Validate tagname. case $tagname in *[!-_A-Za-z0-9,/]*) func_fatal_error "invalid tag name: $tagname" ;; esac # Don't test for the "default" C tag, as we know it's # there but not specially marked. case $tagname in CC) ;; *) if $GREP "$re_begincf" "$progpath" >/dev/null 2>&1; then taglist="$taglist $tagname" # Evaluate the configuration. Be careful to quote the path # and the sed script, to avoid splitting on whitespace, but # also don't use non-portable quotes within backquotes within # quotes we have to do it in 2 steps: extractedcf=`$SED -n -e "$sed_extractcf" < "$progpath"` eval "$extractedcf" else func_error "ignoring unknown tag $tagname" fi ;; esac } # func_check_version_match # Ensure that we are using m4 macros, and libtool script from the same # release of libtool. func_check_version_match () { if test "$package_revision" != "$macro_revision"; then if test "$VERSION" != "$macro_version"; then if test -z "$macro_version"; then cat >&2 <<_LT_EOF $progname: Version mismatch error. This is $PACKAGE $VERSION, but the $progname: definition of this LT_INIT comes from an older release. $progname: You should recreate aclocal.m4 with macros from $PACKAGE $VERSION $progname: and run autoconf again. _LT_EOF else cat >&2 <<_LT_EOF $progname: Version mismatch error. This is $PACKAGE $VERSION, but the $progname: definition of this LT_INIT comes from $PACKAGE $macro_version. $progname: You should recreate aclocal.m4 with macros from $PACKAGE $VERSION $progname: and run autoconf again. _LT_EOF fi else cat >&2 <<_LT_EOF $progname: Version mismatch error. This is $PACKAGE $VERSION, revision $package_revision, $progname: but the definition of this LT_INIT comes from revision $macro_revision. $progname: You should recreate aclocal.m4 with macros from revision $package_revision $progname: of $PACKAGE $VERSION and run autoconf again. _LT_EOF fi exit $EXIT_MISMATCH fi } # Shorthand for --mode=foo, only valid as the first argument case $1 in clean|clea|cle|cl) shift; set dummy --mode clean ${1+"$@"}; shift ;; compile|compil|compi|comp|com|co|c) shift; set dummy --mode compile ${1+"$@"}; shift ;; execute|execut|execu|exec|exe|ex|e) shift; set dummy --mode execute ${1+"$@"}; shift ;; finish|finis|fini|fin|fi|f) shift; set dummy --mode finish ${1+"$@"}; shift ;; install|instal|insta|inst|ins|in|i) shift; set dummy --mode install ${1+"$@"}; shift ;; link|lin|li|l) shift; set dummy --mode link ${1+"$@"}; shift ;; uninstall|uninstal|uninsta|uninst|unins|unin|uni|un|u) shift; set dummy --mode uninstall ${1+"$@"}; shift ;; esac # Option defaults: opt_debug=: opt_dry_run=false opt_config=false opt_preserve_dup_deps=false opt_features=false opt_finish=false opt_help=false opt_help_all=false opt_silent=: opt_warning=: opt_verbose=: opt_silent=false opt_verbose=false # Parse options once, thoroughly. This comes as soon as possible in the # script to make things like `--version' happen as quickly as we can. { # this just eases exit handling while test $# -gt 0; do opt="$1" shift case $opt in --debug|-x) opt_debug='set -x' func_echo "enabling shell trace mode" $opt_debug ;; --dry-run|--dryrun|-n) opt_dry_run=: ;; --config) opt_config=: func_config ;; --dlopen|-dlopen) optarg="$1" opt_dlopen="${opt_dlopen+$opt_dlopen }$optarg" shift ;; --preserve-dup-deps) opt_preserve_dup_deps=: ;; --features) opt_features=: func_features ;; --finish) opt_finish=: set dummy --mode finish ${1+"$@"}; shift ;; --help) opt_help=: ;; --help-all) opt_help_all=: opt_help=': help-all' ;; --mode) test $# = 0 && func_missing_arg $opt && break optarg="$1" opt_mode="$optarg" case $optarg in # Valid mode arguments: clean|compile|execute|finish|install|link|relink|uninstall) ;; # Catch anything else as an error *) func_error "invalid argument for $opt" exit_cmd=exit break ;; esac shift ;; --no-silent|--no-quiet) opt_silent=false func_append preserve_args " $opt" ;; --no-warning|--no-warn) opt_warning=false func_append preserve_args " $opt" ;; --no-verbose) opt_verbose=false func_append preserve_args " $opt" ;; --silent|--quiet) opt_silent=: func_append preserve_args " $opt" opt_verbose=false ;; --verbose|-v) opt_verbose=: func_append preserve_args " $opt" opt_silent=false ;; --tag) test $# = 0 && func_missing_arg $opt && break optarg="$1" opt_tag="$optarg" func_append preserve_args " $opt $optarg" func_enable_tag "$optarg" shift ;; -\?|-h) func_usage ;; --help) func_help ;; --version) func_version ;; # Separate optargs to long options: --*=*) func_split_long_opt "$opt" set dummy "$func_split_long_opt_name" "$func_split_long_opt_arg" ${1+"$@"} shift ;; # Separate non-argument short options: -\?*|-h*|-n*|-v*) func_split_short_opt "$opt" set dummy "$func_split_short_opt_name" "-$func_split_short_opt_arg" ${1+"$@"} shift ;; --) break ;; -*) func_fatal_help "unrecognized option \`$opt'" ;; *) set dummy "$opt" ${1+"$@"}; shift; break ;; esac done # Validate options: # save first non-option argument if test "$#" -gt 0; then nonopt="$opt" shift fi # preserve --debug test "$opt_debug" = : || func_append preserve_args " --debug" case $host in *cygwin* | *mingw* | *pw32* | *cegcc*) # don't eliminate duplications in $postdeps and $predeps opt_duplicate_compiler_generated_deps=: ;; *) opt_duplicate_compiler_generated_deps=$opt_preserve_dup_deps ;; esac $opt_help || { # Sanity checks first: func_check_version_match if test "$build_libtool_libs" != yes && test "$build_old_libs" != yes; then func_fatal_configuration "not configured to build any kind of library" fi # Darwin sucks eval std_shrext=\"$shrext_cmds\" # Only execute mode is allowed to have -dlopen flags. if test -n "$opt_dlopen" && test "$opt_mode" != execute; then func_error "unrecognized option \`-dlopen'" $ECHO "$help" 1>&2 exit $EXIT_FAILURE fi # Change the help message to a mode-specific one. generic_help="$help" help="Try \`$progname --help --mode=$opt_mode' for more information." } # Bail if the options were screwed $exit_cmd $EXIT_FAILURE } ## ----------- ## ## Main. ## ## ----------- ## # func_lalib_p file # True iff FILE is a libtool `.la' library or `.lo' object file. # This function is only a basic sanity check; it will hardly flush out # determined imposters. func_lalib_p () { test -f "$1" && $SED -e 4q "$1" 2>/dev/null \ | $GREP "^# Generated by .*$PACKAGE" > /dev/null 2>&1 } # func_lalib_unsafe_p file # True iff FILE is a libtool `.la' library or `.lo' object file. # This function implements the same check as func_lalib_p without # resorting to external programs. To this end, it redirects stdin and # closes it afterwards, without saving the original file descriptor. # As a safety measure, use it only where a negative result would be # fatal anyway. Works if `file' does not exist. func_lalib_unsafe_p () { lalib_p=no if test -f "$1" && test -r "$1" && exec 5<&0 <"$1"; then for lalib_p_l in 1 2 3 4 do read lalib_p_line case "$lalib_p_line" in \#\ Generated\ by\ *$PACKAGE* ) lalib_p=yes; break;; esac done exec 0<&5 5<&- fi test "$lalib_p" = yes } # func_ltwrapper_script_p file # True iff FILE is a libtool wrapper script # This function is only a basic sanity check; it will hardly flush out # determined imposters. func_ltwrapper_script_p () { func_lalib_p "$1" } # func_ltwrapper_executable_p file # True iff FILE is a libtool wrapper executable # This function is only a basic sanity check; it will hardly flush out # determined imposters. func_ltwrapper_executable_p () { func_ltwrapper_exec_suffix= case $1 in *.exe) ;; *) func_ltwrapper_exec_suffix=.exe ;; esac $GREP "$magic_exe" "$1$func_ltwrapper_exec_suffix" >/dev/null 2>&1 } # func_ltwrapper_scriptname file # Assumes file is an ltwrapper_executable # uses $file to determine the appropriate filename for a # temporary ltwrapper_script. func_ltwrapper_scriptname () { func_dirname_and_basename "$1" "" "." func_stripname '' '.exe' "$func_basename_result" func_ltwrapper_scriptname_result="$func_dirname_result/$objdir/${func_stripname_result}_ltshwrapper" } # func_ltwrapper_p file # True iff FILE is a libtool wrapper script or wrapper executable # This function is only a basic sanity check; it will hardly flush out # determined imposters. func_ltwrapper_p () { func_ltwrapper_script_p "$1" || func_ltwrapper_executable_p "$1" } # func_execute_cmds commands fail_cmd # Execute tilde-delimited COMMANDS. # If FAIL_CMD is given, eval that upon failure. # FAIL_CMD may read-access the current command in variable CMD! func_execute_cmds () { $opt_debug save_ifs=$IFS; IFS='~' for cmd in $1; do IFS=$save_ifs eval cmd=\"$cmd\" func_show_eval "$cmd" "${2-:}" done IFS=$save_ifs } # func_source file # Source FILE, adding directory component if necessary. # Note that it is not necessary on cygwin/mingw to append a dot to # FILE even if both FILE and FILE.exe exist: automatic-append-.exe # behavior happens only for exec(3), not for open(2)! Also, sourcing # `FILE.' does not work on cygwin managed mounts. func_source () { $opt_debug case $1 in */* | *\\*) . "$1" ;; *) . "./$1" ;; esac } # func_resolve_sysroot PATH # Replace a leading = in PATH with a sysroot. Store the result into # func_resolve_sysroot_result func_resolve_sysroot () { func_resolve_sysroot_result=$1 case $func_resolve_sysroot_result in =*) func_stripname '=' '' "$func_resolve_sysroot_result" func_resolve_sysroot_result=$lt_sysroot$func_stripname_result ;; esac } # func_replace_sysroot PATH # If PATH begins with the sysroot, replace it with = and # store the result into func_replace_sysroot_result. func_replace_sysroot () { case "$lt_sysroot:$1" in ?*:"$lt_sysroot"*) func_stripname "$lt_sysroot" '' "$1" func_replace_sysroot_result="=$func_stripname_result" ;; *) # Including no sysroot. func_replace_sysroot_result=$1 ;; esac } # func_infer_tag arg # Infer tagged configuration to use if any are available and # if one wasn't chosen via the "--tag" command line option. # Only attempt this if the compiler in the base compile # command doesn't match the default compiler. # arg is usually of the form 'gcc ...' func_infer_tag () { $opt_debug if test -n "$available_tags" && test -z "$tagname"; then CC_quoted= for arg in $CC; do func_append_quoted CC_quoted "$arg" done CC_expanded=`func_echo_all $CC` CC_quoted_expanded=`func_echo_all $CC_quoted` case $@ in # Blanks in the command may have been stripped by the calling shell, # but not from the CC environment variable when configure was run. " $CC "* | "$CC "* | " $CC_expanded "* | "$CC_expanded "* | \ " $CC_quoted"* | "$CC_quoted "* | " $CC_quoted_expanded "* | "$CC_quoted_expanded "*) ;; # Blanks at the start of $base_compile will cause this to fail # if we don't check for them as well. *) for z in $available_tags; do if $GREP "^# ### BEGIN LIBTOOL TAG CONFIG: $z$" < "$progpath" > /dev/null; then # Evaluate the configuration. eval "`${SED} -n -e '/^# ### BEGIN LIBTOOL TAG CONFIG: '$z'$/,/^# ### END LIBTOOL TAG CONFIG: '$z'$/p' < $progpath`" CC_quoted= for arg in $CC; do # Double-quote args containing other shell metacharacters. func_append_quoted CC_quoted "$arg" done CC_expanded=`func_echo_all $CC` CC_quoted_expanded=`func_echo_all $CC_quoted` case "$@ " in " $CC "* | "$CC "* | " $CC_expanded "* | "$CC_expanded "* | \ " $CC_quoted"* | "$CC_quoted "* | " $CC_quoted_expanded "* | "$CC_quoted_expanded "*) # The compiler in the base compile command matches # the one in the tagged configuration. # Assume this is the tagged configuration we want. tagname=$z break ;; esac fi done # If $tagname still isn't set, then no tagged configuration # was found and let the user know that the "--tag" command # line option must be used. if test -z "$tagname"; then func_echo "unable to infer tagged configuration" func_fatal_error "specify a tag with \`--tag'" # else # func_verbose "using $tagname tagged configuration" fi ;; esac fi } # func_write_libtool_object output_name pic_name nonpic_name # Create a libtool object file (analogous to a ".la" file), # but don't create it if we're doing a dry run. func_write_libtool_object () { write_libobj=${1} if test "$build_libtool_libs" = yes; then write_lobj=\'${2}\' else write_lobj=none fi if test "$build_old_libs" = yes; then write_oldobj=\'${3}\' else write_oldobj=none fi $opt_dry_run || { cat >${write_libobj}T </dev/null` if test "$?" -eq 0 && test -n "${func_convert_core_file_wine_to_w32_tmp}"; then func_convert_core_file_wine_to_w32_result=`$ECHO "$func_convert_core_file_wine_to_w32_tmp" | $SED -e "$lt_sed_naive_backslashify"` else func_convert_core_file_wine_to_w32_result= fi fi } # end: func_convert_core_file_wine_to_w32 # func_convert_core_path_wine_to_w32 ARG # Helper function used by path conversion functions when $build is *nix, and # $host is mingw, cygwin, or some other w32 environment. Relies on a correctly # configured wine environment available, with the winepath program in $build's # $PATH. Assumes ARG has no leading or trailing path separator characters. # # ARG is path to be converted from $build format to win32. # Result is available in $func_convert_core_path_wine_to_w32_result. # Unconvertible file (directory) names in ARG are skipped; if no directory names # are convertible, then the result may be empty. func_convert_core_path_wine_to_w32 () { $opt_debug # unfortunately, winepath doesn't convert paths, only file names func_convert_core_path_wine_to_w32_result="" if test -n "$1"; then oldIFS=$IFS IFS=: for func_convert_core_path_wine_to_w32_f in $1; do IFS=$oldIFS func_convert_core_file_wine_to_w32 "$func_convert_core_path_wine_to_w32_f" if test -n "$func_convert_core_file_wine_to_w32_result" ; then if test -z "$func_convert_core_path_wine_to_w32_result"; then func_convert_core_path_wine_to_w32_result="$func_convert_core_file_wine_to_w32_result" else func_append func_convert_core_path_wine_to_w32_result ";$func_convert_core_file_wine_to_w32_result" fi fi done IFS=$oldIFS fi } # end: func_convert_core_path_wine_to_w32 # func_cygpath ARGS... # Wrapper around calling the cygpath program via LT_CYGPATH. This is used when # when (1) $build is *nix and Cygwin is hosted via a wine environment; or (2) # $build is MSYS and $host is Cygwin, or (3) $build is Cygwin. In case (1) or # (2), returns the Cygwin file name or path in func_cygpath_result (input # file name or path is assumed to be in w32 format, as previously converted # from $build's *nix or MSYS format). In case (3), returns the w32 file name # or path in func_cygpath_result (input file name or path is assumed to be in # Cygwin format). Returns an empty string on error. # # ARGS are passed to cygpath, with the last one being the file name or path to # be converted. # # Specify the absolute *nix (or w32) name to cygpath in the LT_CYGPATH # environment variable; do not put it in $PATH. func_cygpath () { $opt_debug if test -n "$LT_CYGPATH" && test -f "$LT_CYGPATH"; then func_cygpath_result=`$LT_CYGPATH "$@" 2>/dev/null` if test "$?" -ne 0; then # on failure, ensure result is empty func_cygpath_result= fi else func_cygpath_result= func_error "LT_CYGPATH is empty or specifies non-existent file: \`$LT_CYGPATH'" fi } #end: func_cygpath # func_convert_core_msys_to_w32 ARG # Convert file name or path ARG from MSYS format to w32 format. Return # result in func_convert_core_msys_to_w32_result. func_convert_core_msys_to_w32 () { $opt_debug # awkward: cmd appends spaces to result func_convert_core_msys_to_w32_result=`( cmd //c echo "$1" ) 2>/dev/null | $SED -e 's/[ ]*$//' -e "$lt_sed_naive_backslashify"` } #end: func_convert_core_msys_to_w32 # func_convert_file_check ARG1 ARG2 # Verify that ARG1 (a file name in $build format) was converted to $host # format in ARG2. Otherwise, emit an error message, but continue (resetting # func_to_host_file_result to ARG1). func_convert_file_check () { $opt_debug if test -z "$2" && test -n "$1" ; then func_error "Could not determine host file name corresponding to" func_error " \`$1'" func_error "Continuing, but uninstalled executables may not work." # Fallback: func_to_host_file_result="$1" fi } # end func_convert_file_check # func_convert_path_check FROM_PATHSEP TO_PATHSEP FROM_PATH TO_PATH # Verify that FROM_PATH (a path in $build format) was converted to $host # format in TO_PATH. Otherwise, emit an error message, but continue, resetting # func_to_host_file_result to a simplistic fallback value (see below). func_convert_path_check () { $opt_debug if test -z "$4" && test -n "$3"; then func_error "Could not determine the host path corresponding to" func_error " \`$3'" func_error "Continuing, but uninstalled executables may not work." # Fallback. This is a deliberately simplistic "conversion" and # should not be "improved". See libtool.info. if test "x$1" != "x$2"; then lt_replace_pathsep_chars="s|$1|$2|g" func_to_host_path_result=`echo "$3" | $SED -e "$lt_replace_pathsep_chars"` else func_to_host_path_result="$3" fi fi } # end func_convert_path_check # func_convert_path_front_back_pathsep FRONTPAT BACKPAT REPL ORIG # Modifies func_to_host_path_result by prepending REPL if ORIG matches FRONTPAT # and appending REPL if ORIG matches BACKPAT. func_convert_path_front_back_pathsep () { $opt_debug case $4 in $1 ) func_to_host_path_result="$3$func_to_host_path_result" ;; esac case $4 in $2 ) func_append func_to_host_path_result "$3" ;; esac } # end func_convert_path_front_back_pathsep ################################################## # $build to $host FILE NAME CONVERSION FUNCTIONS # ################################################## # invoked via `$to_host_file_cmd ARG' # # In each case, ARG is the path to be converted from $build to $host format. # Result will be available in $func_to_host_file_result. # func_to_host_file ARG # Converts the file name ARG from $build format to $host format. Return result # in func_to_host_file_result. func_to_host_file () { $opt_debug $to_host_file_cmd "$1" } # end func_to_host_file # func_to_tool_file ARG LAZY # converts the file name ARG from $build format to toolchain format. Return # result in func_to_tool_file_result. If the conversion in use is listed # in (the comma separated) LAZY, no conversion takes place. func_to_tool_file () { $opt_debug case ,$2, in *,"$to_tool_file_cmd",*) func_to_tool_file_result=$1 ;; *) $to_tool_file_cmd "$1" func_to_tool_file_result=$func_to_host_file_result ;; esac } # end func_to_tool_file # func_convert_file_noop ARG # Copy ARG to func_to_host_file_result. func_convert_file_noop () { func_to_host_file_result="$1" } # end func_convert_file_noop # func_convert_file_msys_to_w32 ARG # Convert file name ARG from (mingw) MSYS to (mingw) w32 format; automatic # conversion to w32 is not available inside the cwrapper. Returns result in # func_to_host_file_result. func_convert_file_msys_to_w32 () { $opt_debug func_to_host_file_result="$1" if test -n "$1"; then func_convert_core_msys_to_w32 "$1" func_to_host_file_result="$func_convert_core_msys_to_w32_result" fi func_convert_file_check "$1" "$func_to_host_file_result" } # end func_convert_file_msys_to_w32 # func_convert_file_cygwin_to_w32 ARG # Convert file name ARG from Cygwin to w32 format. Returns result in # func_to_host_file_result. func_convert_file_cygwin_to_w32 () { $opt_debug func_to_host_file_result="$1" if test -n "$1"; then # because $build is cygwin, we call "the" cygpath in $PATH; no need to use # LT_CYGPATH in this case. func_to_host_file_result=`cygpath -m "$1"` fi func_convert_file_check "$1" "$func_to_host_file_result" } # end func_convert_file_cygwin_to_w32 # func_convert_file_nix_to_w32 ARG # Convert file name ARG from *nix to w32 format. Requires a wine environment # and a working winepath. Returns result in func_to_host_file_result. func_convert_file_nix_to_w32 () { $opt_debug func_to_host_file_result="$1" if test -n "$1"; then func_convert_core_file_wine_to_w32 "$1" func_to_host_file_result="$func_convert_core_file_wine_to_w32_result" fi func_convert_file_check "$1" "$func_to_host_file_result" } # end func_convert_file_nix_to_w32 # func_convert_file_msys_to_cygwin ARG # Convert file name ARG from MSYS to Cygwin format. Requires LT_CYGPATH set. # Returns result in func_to_host_file_result. func_convert_file_msys_to_cygwin () { $opt_debug func_to_host_file_result="$1" if test -n "$1"; then func_convert_core_msys_to_w32 "$1" func_cygpath -u "$func_convert_core_msys_to_w32_result" func_to_host_file_result="$func_cygpath_result" fi func_convert_file_check "$1" "$func_to_host_file_result" } # end func_convert_file_msys_to_cygwin # func_convert_file_nix_to_cygwin ARG # Convert file name ARG from *nix to Cygwin format. Requires Cygwin installed # in a wine environment, working winepath, and LT_CYGPATH set. Returns result # in func_to_host_file_result. func_convert_file_nix_to_cygwin () { $opt_debug func_to_host_file_result="$1" if test -n "$1"; then # convert from *nix to w32, then use cygpath to convert from w32 to cygwin. func_convert_core_file_wine_to_w32 "$1" func_cygpath -u "$func_convert_core_file_wine_to_w32_result" func_to_host_file_result="$func_cygpath_result" fi func_convert_file_check "$1" "$func_to_host_file_result" } # end func_convert_file_nix_to_cygwin ############################################# # $build to $host PATH CONVERSION FUNCTIONS # ############################################# # invoked via `$to_host_path_cmd ARG' # # In each case, ARG is the path to be converted from $build to $host format. # The result will be available in $func_to_host_path_result. # # Path separators are also converted from $build format to $host format. If # ARG begins or ends with a path separator character, it is preserved (but # converted to $host format) on output. # # All path conversion functions are named using the following convention: # file name conversion function : func_convert_file_X_to_Y () # path conversion function : func_convert_path_X_to_Y () # where, for any given $build/$host combination the 'X_to_Y' value is the # same. If conversion functions are added for new $build/$host combinations, # the two new functions must follow this pattern, or func_init_to_host_path_cmd # will break. # func_init_to_host_path_cmd # Ensures that function "pointer" variable $to_host_path_cmd is set to the # appropriate value, based on the value of $to_host_file_cmd. to_host_path_cmd= func_init_to_host_path_cmd () { $opt_debug if test -z "$to_host_path_cmd"; then func_stripname 'func_convert_file_' '' "$to_host_file_cmd" to_host_path_cmd="func_convert_path_${func_stripname_result}" fi } # func_to_host_path ARG # Converts the path ARG from $build format to $host format. Return result # in func_to_host_path_result. func_to_host_path () { $opt_debug func_init_to_host_path_cmd $to_host_path_cmd "$1" } # end func_to_host_path # func_convert_path_noop ARG # Copy ARG to func_to_host_path_result. func_convert_path_noop () { func_to_host_path_result="$1" } # end func_convert_path_noop # func_convert_path_msys_to_w32 ARG # Convert path ARG from (mingw) MSYS to (mingw) w32 format; automatic # conversion to w32 is not available inside the cwrapper. Returns result in # func_to_host_path_result. func_convert_path_msys_to_w32 () { $opt_debug func_to_host_path_result="$1" if test -n "$1"; then # Remove leading and trailing path separator characters from ARG. MSYS # behavior is inconsistent here; cygpath turns them into '.;' and ';.'; # and winepath ignores them completely. func_stripname : : "$1" func_to_host_path_tmp1=$func_stripname_result func_convert_core_msys_to_w32 "$func_to_host_path_tmp1" func_to_host_path_result="$func_convert_core_msys_to_w32_result" func_convert_path_check : ";" \ "$func_to_host_path_tmp1" "$func_to_host_path_result" func_convert_path_front_back_pathsep ":*" "*:" ";" "$1" fi } # end func_convert_path_msys_to_w32 # func_convert_path_cygwin_to_w32 ARG # Convert path ARG from Cygwin to w32 format. Returns result in # func_to_host_file_result. func_convert_path_cygwin_to_w32 () { $opt_debug func_to_host_path_result="$1" if test -n "$1"; then # See func_convert_path_msys_to_w32: func_stripname : : "$1" func_to_host_path_tmp1=$func_stripname_result func_to_host_path_result=`cygpath -m -p "$func_to_host_path_tmp1"` func_convert_path_check : ";" \ "$func_to_host_path_tmp1" "$func_to_host_path_result" func_convert_path_front_back_pathsep ":*" "*:" ";" "$1" fi } # end func_convert_path_cygwin_to_w32 # func_convert_path_nix_to_w32 ARG # Convert path ARG from *nix to w32 format. Requires a wine environment and # a working winepath. Returns result in func_to_host_file_result. func_convert_path_nix_to_w32 () { $opt_debug func_to_host_path_result="$1" if test -n "$1"; then # See func_convert_path_msys_to_w32: func_stripname : : "$1" func_to_host_path_tmp1=$func_stripname_result func_convert_core_path_wine_to_w32 "$func_to_host_path_tmp1" func_to_host_path_result="$func_convert_core_path_wine_to_w32_result" func_convert_path_check : ";" \ "$func_to_host_path_tmp1" "$func_to_host_path_result" func_convert_path_front_back_pathsep ":*" "*:" ";" "$1" fi } # end func_convert_path_nix_to_w32 # func_convert_path_msys_to_cygwin ARG # Convert path ARG from MSYS to Cygwin format. Requires LT_CYGPATH set. # Returns result in func_to_host_file_result. func_convert_path_msys_to_cygwin () { $opt_debug func_to_host_path_result="$1" if test -n "$1"; then # See func_convert_path_msys_to_w32: func_stripname : : "$1" func_to_host_path_tmp1=$func_stripname_result func_convert_core_msys_to_w32 "$func_to_host_path_tmp1" func_cygpath -u -p "$func_convert_core_msys_to_w32_result" func_to_host_path_result="$func_cygpath_result" func_convert_path_check : : \ "$func_to_host_path_tmp1" "$func_to_host_path_result" func_convert_path_front_back_pathsep ":*" "*:" : "$1" fi } # end func_convert_path_msys_to_cygwin # func_convert_path_nix_to_cygwin ARG # Convert path ARG from *nix to Cygwin format. Requires Cygwin installed in a # a wine environment, working winepath, and LT_CYGPATH set. Returns result in # func_to_host_file_result. func_convert_path_nix_to_cygwin () { $opt_debug func_to_host_path_result="$1" if test -n "$1"; then # Remove leading and trailing path separator characters from # ARG. msys behavior is inconsistent here, cygpath turns them # into '.;' and ';.', and winepath ignores them completely. func_stripname : : "$1" func_to_host_path_tmp1=$func_stripname_result func_convert_core_path_wine_to_w32 "$func_to_host_path_tmp1" func_cygpath -u -p "$func_convert_core_path_wine_to_w32_result" func_to_host_path_result="$func_cygpath_result" func_convert_path_check : : \ "$func_to_host_path_tmp1" "$func_to_host_path_result" func_convert_path_front_back_pathsep ":*" "*:" : "$1" fi } # end func_convert_path_nix_to_cygwin # func_mode_compile arg... func_mode_compile () { $opt_debug # Get the compilation command and the source file. base_compile= srcfile="$nonopt" # always keep a non-empty value in "srcfile" suppress_opt=yes suppress_output= arg_mode=normal libobj= later= pie_flag= for arg do case $arg_mode in arg ) # do not "continue". Instead, add this to base_compile lastarg="$arg" arg_mode=normal ;; target ) libobj="$arg" arg_mode=normal continue ;; normal ) # Accept any command-line options. case $arg in -o) test -n "$libobj" && \ func_fatal_error "you cannot specify \`-o' more than once" arg_mode=target continue ;; -pie | -fpie | -fPIE) func_append pie_flag " $arg" continue ;; -shared | -static | -prefer-pic | -prefer-non-pic) func_append later " $arg" continue ;; -no-suppress) suppress_opt=no continue ;; -Xcompiler) arg_mode=arg # the next one goes into the "base_compile" arg list continue # The current "srcfile" will either be retained or ;; # replaced later. I would guess that would be a bug. -Wc,*) func_stripname '-Wc,' '' "$arg" args=$func_stripname_result lastarg= save_ifs="$IFS"; IFS=',' for arg in $args; do IFS="$save_ifs" func_append_quoted lastarg "$arg" done IFS="$save_ifs" func_stripname ' ' '' "$lastarg" lastarg=$func_stripname_result # Add the arguments to base_compile. func_append base_compile " $lastarg" continue ;; *) # Accept the current argument as the source file. # The previous "srcfile" becomes the current argument. # lastarg="$srcfile" srcfile="$arg" ;; esac # case $arg ;; esac # case $arg_mode # Aesthetically quote the previous argument. func_append_quoted base_compile "$lastarg" done # for arg case $arg_mode in arg) func_fatal_error "you must specify an argument for -Xcompile" ;; target) func_fatal_error "you must specify a target with \`-o'" ;; *) # Get the name of the library object. test -z "$libobj" && { func_basename "$srcfile" libobj="$func_basename_result" } ;; esac # Recognize several different file suffixes. # If the user specifies -o file.o, it is replaced with file.lo case $libobj in *.[cCFSifmso] | \ *.ada | *.adb | *.ads | *.asm | \ *.c++ | *.cc | *.ii | *.class | *.cpp | *.cxx | \ *.[fF][09]? | *.for | *.java | *.go | *.obj | *.sx | *.cu | *.cup) func_xform "$libobj" libobj=$func_xform_result ;; esac case $libobj in *.lo) func_lo2o "$libobj"; obj=$func_lo2o_result ;; *) func_fatal_error "cannot determine name of library object from \`$libobj'" ;; esac func_infer_tag $base_compile for arg in $later; do case $arg in -shared) test "$build_libtool_libs" != yes && \ func_fatal_configuration "can not build a shared library" build_old_libs=no continue ;; -static) build_libtool_libs=no build_old_libs=yes continue ;; -prefer-pic) pic_mode=yes continue ;; -prefer-non-pic) pic_mode=no continue ;; esac done func_quote_for_eval "$libobj" test "X$libobj" != "X$func_quote_for_eval_result" \ && $ECHO "X$libobj" | $GREP '[]~#^*{};<>?"'"'"' &()|`$[]' \ && func_warning "libobj name \`$libobj' may not contain shell special characters." func_dirname_and_basename "$obj" "/" "" objname="$func_basename_result" xdir="$func_dirname_result" lobj=${xdir}$objdir/$objname test -z "$base_compile" && \ func_fatal_help "you must specify a compilation command" # Delete any leftover library objects. if test "$build_old_libs" = yes; then removelist="$obj $lobj $libobj ${libobj}T" else removelist="$lobj $libobj ${libobj}T" fi # On Cygwin there's no "real" PIC flag so we must build both object types case $host_os in cygwin* | mingw* | pw32* | os2* | cegcc*) pic_mode=default ;; esac if test "$pic_mode" = no && test "$deplibs_check_method" != pass_all; then # non-PIC code in shared libraries is not supported pic_mode=default fi # Calculate the filename of the output object if compiler does # not support -o with -c if test "$compiler_c_o" = no; then output_obj=`$ECHO "$srcfile" | $SED 's%^.*/%%; s%\.[^.]*$%%'`.${objext} lockfile="$output_obj.lock" else output_obj= need_locks=no lockfile= fi # Lock this critical section if it is needed # We use this script file to make the link, it avoids creating a new file if test "$need_locks" = yes; then until $opt_dry_run || ln "$progpath" "$lockfile" 2>/dev/null; do func_echo "Waiting for $lockfile to be removed" sleep 2 done elif test "$need_locks" = warn; then if test -f "$lockfile"; then $ECHO "\ *** ERROR, $lockfile exists and contains: `cat $lockfile 2>/dev/null` This indicates that another process is trying to use the same temporary object file, and libtool could not work around it because your compiler does not support \`-c' and \`-o' together. If you repeat this compilation, it may succeed, by chance, but you had better avoid parallel builds (make -j) in this platform, or get a better compiler." $opt_dry_run || $RM $removelist exit $EXIT_FAILURE fi func_append removelist " $output_obj" $ECHO "$srcfile" > "$lockfile" fi $opt_dry_run || $RM $removelist func_append removelist " $lockfile" trap '$opt_dry_run || $RM $removelist; exit $EXIT_FAILURE' 1 2 15 func_to_tool_file "$srcfile" func_convert_file_msys_to_w32 srcfile=$func_to_tool_file_result func_quote_for_eval "$srcfile" qsrcfile=$func_quote_for_eval_result # Only build a PIC object if we are building libtool libraries. if test "$build_libtool_libs" = yes; then # Without this assignment, base_compile gets emptied. fbsd_hideous_sh_bug=$base_compile if test "$pic_mode" != no; then command="$base_compile $qsrcfile $pic_flag" else # Don't build PIC code command="$base_compile $qsrcfile" fi func_mkdir_p "$xdir$objdir" if test -z "$output_obj"; then # Place PIC objects in $objdir func_append command " -o $lobj" fi func_show_eval_locale "$command" \ 'test -n "$output_obj" && $RM $removelist; exit $EXIT_FAILURE' if test "$need_locks" = warn && test "X`cat $lockfile 2>/dev/null`" != "X$srcfile"; then $ECHO "\ *** ERROR, $lockfile contains: `cat $lockfile 2>/dev/null` but it should contain: $srcfile This indicates that another process is trying to use the same temporary object file, and libtool could not work around it because your compiler does not support \`-c' and \`-o' together. If you repeat this compilation, it may succeed, by chance, but you had better avoid parallel builds (make -j) in this platform, or get a better compiler." $opt_dry_run || $RM $removelist exit $EXIT_FAILURE fi # Just move the object if needed, then go on to compile the next one if test -n "$output_obj" && test "X$output_obj" != "X$lobj"; then func_show_eval '$MV "$output_obj" "$lobj"' \ 'error=$?; $opt_dry_run || $RM $removelist; exit $error' fi # Allow error messages only from the first compilation. if test "$suppress_opt" = yes; then suppress_output=' >/dev/null 2>&1' fi fi # Only build a position-dependent object if we build old libraries. if test "$build_old_libs" = yes; then if test "$pic_mode" != yes; then # Don't build PIC code command="$base_compile $qsrcfile$pie_flag" else command="$base_compile $qsrcfile $pic_flag" fi if test "$compiler_c_o" = yes; then func_append command " -o $obj" fi # Suppress compiler output if we already did a PIC compilation. func_append command "$suppress_output" func_show_eval_locale "$command" \ '$opt_dry_run || $RM $removelist; exit $EXIT_FAILURE' if test "$need_locks" = warn && test "X`cat $lockfile 2>/dev/null`" != "X$srcfile"; then $ECHO "\ *** ERROR, $lockfile contains: `cat $lockfile 2>/dev/null` but it should contain: $srcfile This indicates that another process is trying to use the same temporary object file, and libtool could not work around it because your compiler does not support \`-c' and \`-o' together. If you repeat this compilation, it may succeed, by chance, but you had better avoid parallel builds (make -j) in this platform, or get a better compiler." $opt_dry_run || $RM $removelist exit $EXIT_FAILURE fi # Just move the object if needed if test -n "$output_obj" && test "X$output_obj" != "X$obj"; then func_show_eval '$MV "$output_obj" "$obj"' \ 'error=$?; $opt_dry_run || $RM $removelist; exit $error' fi fi $opt_dry_run || { func_write_libtool_object "$libobj" "$objdir/$objname" "$objname" # Unlock the critical section if it was locked if test "$need_locks" != no; then removelist=$lockfile $RM "$lockfile" fi } exit $EXIT_SUCCESS } $opt_help || { test "$opt_mode" = compile && func_mode_compile ${1+"$@"} } func_mode_help () { # We need to display help for each of the modes. case $opt_mode in "") # Generic help is extracted from the usage comments # at the start of this file. func_help ;; clean) $ECHO \ "Usage: $progname [OPTION]... --mode=clean RM [RM-OPTION]... FILE... Remove files from the build directory. RM is the name of the program to use to delete files associated with each FILE (typically \`/bin/rm'). RM-OPTIONS are options (such as \`-f') to be passed to RM. If FILE is a libtool library, object or program, all the files associated with it are deleted. Otherwise, only FILE itself is deleted using RM." ;; compile) $ECHO \ "Usage: $progname [OPTION]... --mode=compile COMPILE-COMMAND... SOURCEFILE Compile a source file into a libtool library object. This mode accepts the following additional options: -o OUTPUT-FILE set the output file name to OUTPUT-FILE -no-suppress do not suppress compiler output for multiple passes -prefer-pic try to build PIC objects only -prefer-non-pic try to build non-PIC objects only -shared do not build a \`.o' file suitable for static linking -static only build a \`.o' file suitable for static linking -Wc,FLAG pass FLAG directly to the compiler COMPILE-COMMAND is a command to be used in creating a \`standard' object file from the given SOURCEFILE. The output file name is determined by removing the directory component from SOURCEFILE, then substituting the C source code suffix \`.c' with the library object suffix, \`.lo'." ;; execute) $ECHO \ "Usage: $progname [OPTION]... --mode=execute COMMAND [ARGS]... Automatically set library path, then run a program. This mode accepts the following additional options: -dlopen FILE add the directory containing FILE to the library path This mode sets the library path environment variable according to \`-dlopen' flags. If any of the ARGS are libtool executable wrappers, then they are translated into their corresponding uninstalled binary, and any of their required library directories are added to the library path. Then, COMMAND is executed, with ARGS as arguments." ;; finish) $ECHO \ "Usage: $progname [OPTION]... --mode=finish [LIBDIR]... Complete the installation of libtool libraries. Each LIBDIR is a directory that contains libtool libraries. The commands that this mode executes may require superuser privileges. Use the \`--dry-run' option if you just want to see what would be executed." ;; install) $ECHO \ "Usage: $progname [OPTION]... --mode=install INSTALL-COMMAND... Install executables or libraries. INSTALL-COMMAND is the installation command. The first component should be either the \`install' or \`cp' program. The following components of INSTALL-COMMAND are treated specially: -inst-prefix-dir PREFIX-DIR Use PREFIX-DIR as a staging area for installation The rest of the components are interpreted as arguments to that command (only BSD-compatible install options are recognized)." ;; link) $ECHO \ "Usage: $progname [OPTION]... --mode=link LINK-COMMAND... Link object files or libraries together to form another library, or to create an executable program. LINK-COMMAND is a command using the C compiler that you would use to create a program from several object files. The following components of LINK-COMMAND are treated specially: -all-static do not do any dynamic linking at all -avoid-version do not add a version suffix if possible -bindir BINDIR specify path to binaries directory (for systems where libraries must be found in the PATH setting at runtime) -dlopen FILE \`-dlpreopen' FILE if it cannot be dlopened at runtime -dlpreopen FILE link in FILE and add its symbols to lt_preloaded_symbols -export-dynamic allow symbols from OUTPUT-FILE to be resolved with dlsym(3) -export-symbols SYMFILE try to export only the symbols listed in SYMFILE -export-symbols-regex REGEX try to export only the symbols matching REGEX -LLIBDIR search LIBDIR for required installed libraries -lNAME OUTPUT-FILE requires the installed library libNAME -module build a library that can dlopened -no-fast-install disable the fast-install mode -no-install link a not-installable executable -no-undefined declare that a library does not refer to external symbols -o OUTPUT-FILE create OUTPUT-FILE from the specified objects -objectlist FILE Use a list of object files found in FILE to specify objects -precious-files-regex REGEX don't remove output files matching REGEX -release RELEASE specify package release information -rpath LIBDIR the created library will eventually be installed in LIBDIR -R[ ]LIBDIR add LIBDIR to the runtime path of programs and libraries -shared only do dynamic linking of libtool libraries -shrext SUFFIX override the standard shared library file extension -static do not do any dynamic linking of uninstalled libtool libraries -static-libtool-libs do not do any dynamic linking of libtool libraries -version-info CURRENT[:REVISION[:AGE]] specify library version info [each variable defaults to 0] -weak LIBNAME declare that the target provides the LIBNAME interface -Wc,FLAG -Xcompiler FLAG pass linker-specific FLAG directly to the compiler -Wl,FLAG -Xlinker FLAG pass linker-specific FLAG directly to the linker -XCClinker FLAG pass link-specific FLAG to the compiler driver (CC) All other options (arguments beginning with \`-') are ignored. Every other argument is treated as a filename. Files ending in \`.la' are treated as uninstalled libtool libraries, other files are standard or library object files. If the OUTPUT-FILE ends in \`.la', then a libtool library is created, only library objects (\`.lo' files) may be specified, and \`-rpath' is required, except when creating a convenience library. If OUTPUT-FILE ends in \`.a' or \`.lib', then a standard library is created using \`ar' and \`ranlib', or on Windows using \`lib'. If OUTPUT-FILE ends in \`.lo' or \`.${objext}', then a reloadable object file is created, otherwise an executable program is created." ;; uninstall) $ECHO \ "Usage: $progname [OPTION]... --mode=uninstall RM [RM-OPTION]... FILE... Remove libraries from an installation directory. RM is the name of the program to use to delete files associated with each FILE (typically \`/bin/rm'). RM-OPTIONS are options (such as \`-f') to be passed to RM. If FILE is a libtool library, all the files associated with it are deleted. Otherwise, only FILE itself is deleted using RM." ;; *) func_fatal_help "invalid operation mode \`$opt_mode'" ;; esac echo $ECHO "Try \`$progname --help' for more information about other modes." } # Now that we've collected a possible --mode arg, show help if necessary if $opt_help; then if test "$opt_help" = :; then func_mode_help else { func_help noexit for opt_mode in compile link execute install finish uninstall clean; do func_mode_help done } | sed -n '1p; 2,$s/^Usage:/ or: /p' { func_help noexit for opt_mode in compile link execute install finish uninstall clean; do echo func_mode_help done } | sed '1d /^When reporting/,/^Report/{ H d } $x /information about other modes/d /more detailed .*MODE/d s/^Usage:.*--mode=\([^ ]*\) .*/Description of \1 mode:/' fi exit $? fi # func_mode_execute arg... func_mode_execute () { $opt_debug # The first argument is the command name. cmd="$nonopt" test -z "$cmd" && \ func_fatal_help "you must specify a COMMAND" # Handle -dlopen flags immediately. for file in $opt_dlopen; do test -f "$file" \ || func_fatal_help "\`$file' is not a file" dir= case $file in *.la) func_resolve_sysroot "$file" file=$func_resolve_sysroot_result # Check to see that this really is a libtool archive. func_lalib_unsafe_p "$file" \ || func_fatal_help "\`$lib' is not a valid libtool archive" # Read the libtool library. dlname= library_names= func_source "$file" # Skip this library if it cannot be dlopened. if test -z "$dlname"; then # Warn if it was a shared library. test -n "$library_names" && \ func_warning "\`$file' was not linked with \`-export-dynamic'" continue fi func_dirname "$file" "" "." dir="$func_dirname_result" if test -f "$dir/$objdir/$dlname"; then func_append dir "/$objdir" else if test ! -f "$dir/$dlname"; then func_fatal_error "cannot find \`$dlname' in \`$dir' or \`$dir/$objdir'" fi fi ;; *.lo) # Just add the directory containing the .lo file. func_dirname "$file" "" "." dir="$func_dirname_result" ;; *) func_warning "\`-dlopen' is ignored for non-libtool libraries and objects" continue ;; esac # Get the absolute pathname. absdir=`cd "$dir" && pwd` test -n "$absdir" && dir="$absdir" # Now add the directory to shlibpath_var. if eval "test -z \"\$$shlibpath_var\""; then eval "$shlibpath_var=\"\$dir\"" else eval "$shlibpath_var=\"\$dir:\$$shlibpath_var\"" fi done # This variable tells wrapper scripts just to set shlibpath_var # rather than running their programs. libtool_execute_magic="$magic" # Check if any of the arguments is a wrapper script. args= for file do case $file in -* | *.la | *.lo ) ;; *) # Do a test to see if this is really a libtool program. if func_ltwrapper_script_p "$file"; then func_source "$file" # Transform arg to wrapped name. file="$progdir/$program" elif func_ltwrapper_executable_p "$file"; then func_ltwrapper_scriptname "$file" func_source "$func_ltwrapper_scriptname_result" # Transform arg to wrapped name. file="$progdir/$program" fi ;; esac # Quote arguments (to preserve shell metacharacters). func_append_quoted args "$file" done if test "X$opt_dry_run" = Xfalse; then if test -n "$shlibpath_var"; then # Export the shlibpath_var. eval "export $shlibpath_var" fi # Restore saved environment variables for lt_var in LANG LANGUAGE LC_ALL LC_CTYPE LC_COLLATE LC_MESSAGES do eval "if test \"\${save_$lt_var+set}\" = set; then $lt_var=\$save_$lt_var; export $lt_var else $lt_unset $lt_var fi" done # Now prepare to actually exec the command. exec_cmd="\$cmd$args" else # Display what would be done. if test -n "$shlibpath_var"; then eval "\$ECHO \"\$shlibpath_var=\$$shlibpath_var\"" echo "export $shlibpath_var" fi $ECHO "$cmd$args" exit $EXIT_SUCCESS fi } test "$opt_mode" = execute && func_mode_execute ${1+"$@"} # func_mode_finish arg... func_mode_finish () { $opt_debug libs= libdirs= admincmds= for opt in "$nonopt" ${1+"$@"} do if test -d "$opt"; then func_append libdirs " $opt" elif test -f "$opt"; then if func_lalib_unsafe_p "$opt"; then func_append libs " $opt" else func_warning "\`$opt' is not a valid libtool archive" fi else func_fatal_error "invalid argument \`$opt'" fi done if test -n "$libs"; then if test -n "$lt_sysroot"; then sysroot_regex=`$ECHO "$lt_sysroot" | $SED "$sed_make_literal_regex"` sysroot_cmd="s/\([ ']\)$sysroot_regex/\1/g;" else sysroot_cmd= fi # Remove sysroot references if $opt_dry_run; then for lib in $libs; do echo "removing references to $lt_sysroot and \`=' prefixes from $lib" done else tmpdir=`func_mktempdir` for lib in $libs; do sed -e "${sysroot_cmd} s/\([ ']-[LR]\)=/\1/g; s/\([ ']\)=/\1/g" $lib \ > $tmpdir/tmp-la mv -f $tmpdir/tmp-la $lib done ${RM}r "$tmpdir" fi fi if test -n "$finish_cmds$finish_eval" && test -n "$libdirs"; then for libdir in $libdirs; do if test -n "$finish_cmds"; then # Do each command in the finish commands. func_execute_cmds "$finish_cmds" 'admincmds="$admincmds '"$cmd"'"' fi if test -n "$finish_eval"; then # Do the single finish_eval. eval cmds=\"$finish_eval\" $opt_dry_run || eval "$cmds" || func_append admincmds " $cmds" fi done fi # Exit here if they wanted silent mode. $opt_silent && exit $EXIT_SUCCESS if test -n "$finish_cmds$finish_eval" && test -n "$libdirs"; then echo "----------------------------------------------------------------------" echo "Libraries have been installed in:" for libdir in $libdirs; do $ECHO " $libdir" done echo echo "If you ever happen to want to link against installed libraries" echo "in a given directory, LIBDIR, you must either use libtool, and" echo "specify the full pathname of the library, or use the \`-LLIBDIR'" echo "flag during linking and do at least one of the following:" if test -n "$shlibpath_var"; then echo " - add LIBDIR to the \`$shlibpath_var' environment variable" echo " during execution" fi if test -n "$runpath_var"; then echo " - add LIBDIR to the \`$runpath_var' environment variable" echo " during linking" fi if test -n "$hardcode_libdir_flag_spec"; then libdir=LIBDIR eval flag=\"$hardcode_libdir_flag_spec\" $ECHO " - use the \`$flag' linker flag" fi if test -n "$admincmds"; then $ECHO " - have your system administrator run these commands:$admincmds" fi if test -f /etc/ld.so.conf; then echo " - have your system administrator add LIBDIR to \`/etc/ld.so.conf'" fi echo echo "See any operating system documentation about shared libraries for" case $host in solaris2.[6789]|solaris2.1[0-9]) echo "more information, such as the ld(1), crle(1) and ld.so(8) manual" echo "pages." ;; *) echo "more information, such as the ld(1) and ld.so(8) manual pages." ;; esac echo "----------------------------------------------------------------------" fi exit $EXIT_SUCCESS } test "$opt_mode" = finish && func_mode_finish ${1+"$@"} # func_mode_install arg... func_mode_install () { $opt_debug # There may be an optional sh(1) argument at the beginning of # install_prog (especially on Windows NT). if test "$nonopt" = "$SHELL" || test "$nonopt" = /bin/sh || # Allow the use of GNU shtool's install command. case $nonopt in *shtool*) :;; *) false;; esac; then # Aesthetically quote it. func_quote_for_eval "$nonopt" install_prog="$func_quote_for_eval_result " arg=$1 shift else install_prog= arg=$nonopt fi # The real first argument should be the name of the installation program. # Aesthetically quote it. func_quote_for_eval "$arg" func_append install_prog "$func_quote_for_eval_result" install_shared_prog=$install_prog case " $install_prog " in *[\\\ /]cp\ *) install_cp=: ;; *) install_cp=false ;; esac # We need to accept at least all the BSD install flags. dest= files= opts= prev= install_type= isdir=no stripme= no_mode=: for arg do arg2= if test -n "$dest"; then func_append files " $dest" dest=$arg continue fi case $arg in -d) isdir=yes ;; -f) if $install_cp; then :; else prev=$arg fi ;; -g | -m | -o) prev=$arg ;; -s) stripme=" -s" continue ;; -*) ;; *) # If the previous option needed an argument, then skip it. if test -n "$prev"; then if test "x$prev" = x-m && test -n "$install_override_mode"; then arg2=$install_override_mode no_mode=false fi prev= else dest=$arg continue fi ;; esac # Aesthetically quote the argument. func_quote_for_eval "$arg" func_append install_prog " $func_quote_for_eval_result" if test -n "$arg2"; then func_quote_for_eval "$arg2" fi func_append install_shared_prog " $func_quote_for_eval_result" done test -z "$install_prog" && \ func_fatal_help "you must specify an install program" test -n "$prev" && \ func_fatal_help "the \`$prev' option requires an argument" if test -n "$install_override_mode" && $no_mode; then if $install_cp; then :; else func_quote_for_eval "$install_override_mode" func_append install_shared_prog " -m $func_quote_for_eval_result" fi fi if test -z "$files"; then if test -z "$dest"; then func_fatal_help "no file or destination specified" else func_fatal_help "you must specify a destination" fi fi # Strip any trailing slash from the destination. func_stripname '' '/' "$dest" dest=$func_stripname_result # Check to see that the destination is a directory. test -d "$dest" && isdir=yes if test "$isdir" = yes; then destdir="$dest" destname= else func_dirname_and_basename "$dest" "" "." destdir="$func_dirname_result" destname="$func_basename_result" # Not a directory, so check to see that there is only one file specified. set dummy $files; shift test "$#" -gt 1 && \ func_fatal_help "\`$dest' is not a directory" fi case $destdir in [\\/]* | [A-Za-z]:[\\/]*) ;; *) for file in $files; do case $file in *.lo) ;; *) func_fatal_help "\`$destdir' must be an absolute directory name" ;; esac done ;; esac # This variable tells wrapper scripts just to set variables rather # than running their programs. libtool_install_magic="$magic" staticlibs= future_libdirs= current_libdirs= for file in $files; do # Do each installation. case $file in *.$libext) # Do the static libraries later. func_append staticlibs " $file" ;; *.la) func_resolve_sysroot "$file" file=$func_resolve_sysroot_result # Check to see that this really is a libtool archive. func_lalib_unsafe_p "$file" \ || func_fatal_help "\`$file' is not a valid libtool archive" library_names= old_library= relink_command= func_source "$file" # Add the libdir to current_libdirs if it is the destination. if test "X$destdir" = "X$libdir"; then case "$current_libdirs " in *" $libdir "*) ;; *) func_append current_libdirs " $libdir" ;; esac else # Note the libdir as a future libdir. case "$future_libdirs " in *" $libdir "*) ;; *) func_append future_libdirs " $libdir" ;; esac fi func_dirname "$file" "/" "" dir="$func_dirname_result" func_append dir "$objdir" if test -n "$relink_command"; then # Determine the prefix the user has applied to our future dir. inst_prefix_dir=`$ECHO "$destdir" | $SED -e "s%$libdir\$%%"` # Don't allow the user to place us outside of our expected # location b/c this prevents finding dependent libraries that # are installed to the same prefix. # At present, this check doesn't affect windows .dll's that # are installed into $libdir/../bin (currently, that works fine) # but it's something to keep an eye on. test "$inst_prefix_dir" = "$destdir" && \ func_fatal_error "error: cannot install \`$file' to a directory not ending in $libdir" if test -n "$inst_prefix_dir"; then # Stick the inst_prefix_dir data into the link command. relink_command=`$ECHO "$relink_command" | $SED "s%@inst_prefix_dir@%-inst-prefix-dir $inst_prefix_dir%"` else relink_command=`$ECHO "$relink_command" | $SED "s%@inst_prefix_dir@%%"` fi func_warning "relinking \`$file'" func_show_eval "$relink_command" \ 'func_fatal_error "error: relink \`$file'\'' with the above command before installing it"' fi # See the names of the shared library. set dummy $library_names; shift if test -n "$1"; then realname="$1" shift srcname="$realname" test -n "$relink_command" && srcname="$realname"T # Install the shared library and build the symlinks. func_show_eval "$install_shared_prog $dir/$srcname $destdir/$realname" \ 'exit $?' tstripme="$stripme" case $host_os in cygwin* | mingw* | pw32* | cegcc*) case $realname in *.dll.a) tstripme="" ;; esac ;; esac if test -n "$tstripme" && test -n "$striplib"; then func_show_eval "$striplib $destdir/$realname" 'exit $?' fi if test "$#" -gt 0; then # Delete the old symlinks, and create new ones. # Try `ln -sf' first, because the `ln' binary might depend on # the symlink we replace! Solaris /bin/ln does not understand -f, # so we also need to try rm && ln -s. for linkname do test "$linkname" != "$realname" \ && func_show_eval "(cd $destdir && { $LN_S -f $realname $linkname || { $RM $linkname && $LN_S $realname $linkname; }; })" done fi # Do each command in the postinstall commands. lib="$destdir/$realname" func_execute_cmds "$postinstall_cmds" 'exit $?' fi # Install the pseudo-library for information purposes. func_basename "$file" name="$func_basename_result" instname="$dir/$name"i func_show_eval "$install_prog $instname $destdir/$name" 'exit $?' # Maybe install the static library, too. test -n "$old_library" && func_append staticlibs " $dir/$old_library" ;; *.lo) # Install (i.e. copy) a libtool object. # Figure out destination file name, if it wasn't already specified. if test -n "$destname"; then destfile="$destdir/$destname" else func_basename "$file" destfile="$func_basename_result" destfile="$destdir/$destfile" fi # Deduce the name of the destination old-style object file. case $destfile in *.lo) func_lo2o "$destfile" staticdest=$func_lo2o_result ;; *.$objext) staticdest="$destfile" destfile= ;; *) func_fatal_help "cannot copy a libtool object to \`$destfile'" ;; esac # Install the libtool object if requested. test -n "$destfile" && \ func_show_eval "$install_prog $file $destfile" 'exit $?' # Install the old object if enabled. if test "$build_old_libs" = yes; then # Deduce the name of the old-style object file. func_lo2o "$file" staticobj=$func_lo2o_result func_show_eval "$install_prog \$staticobj \$staticdest" 'exit $?' fi exit $EXIT_SUCCESS ;; *) # Figure out destination file name, if it wasn't already specified. if test -n "$destname"; then destfile="$destdir/$destname" else func_basename "$file" destfile="$func_basename_result" destfile="$destdir/$destfile" fi # If the file is missing, and there is a .exe on the end, strip it # because it is most likely a libtool script we actually want to # install stripped_ext="" case $file in *.exe) if test ! -f "$file"; then func_stripname '' '.exe' "$file" file=$func_stripname_result stripped_ext=".exe" fi ;; esac # Do a test to see if this is really a libtool program. case $host in *cygwin* | *mingw*) if func_ltwrapper_executable_p "$file"; then func_ltwrapper_scriptname "$file" wrapper=$func_ltwrapper_scriptname_result else func_stripname '' '.exe' "$file" wrapper=$func_stripname_result fi ;; *) wrapper=$file ;; esac if func_ltwrapper_script_p "$wrapper"; then notinst_deplibs= relink_command= func_source "$wrapper" # Check the variables that should have been set. test -z "$generated_by_libtool_version" && \ func_fatal_error "invalid libtool wrapper script \`$wrapper'" finalize=yes for lib in $notinst_deplibs; do # Check to see that each library is installed. libdir= if test -f "$lib"; then func_source "$lib" fi libfile="$libdir/"`$ECHO "$lib" | $SED 's%^.*/%%g'` ### testsuite: skip nested quoting test if test -n "$libdir" && test ! -f "$libfile"; then func_warning "\`$lib' has not been installed in \`$libdir'" finalize=no fi done relink_command= func_source "$wrapper" outputname= if test "$fast_install" = no && test -n "$relink_command"; then $opt_dry_run || { if test "$finalize" = yes; then tmpdir=`func_mktempdir` func_basename "$file$stripped_ext" file="$func_basename_result" outputname="$tmpdir/$file" # Replace the output file specification. relink_command=`$ECHO "$relink_command" | $SED 's%@OUTPUT@%'"$outputname"'%g'` $opt_silent || { func_quote_for_expand "$relink_command" eval "func_echo $func_quote_for_expand_result" } if eval "$relink_command"; then : else func_error "error: relink \`$file' with the above command before installing it" $opt_dry_run || ${RM}r "$tmpdir" continue fi file="$outputname" else func_warning "cannot relink \`$file'" fi } else # Install the binary that we compiled earlier. file=`$ECHO "$file$stripped_ext" | $SED "s%\([^/]*\)$%$objdir/\1%"` fi fi # remove .exe since cygwin /usr/bin/install will append another # one anyway case $install_prog,$host in */usr/bin/install*,*cygwin*) case $file:$destfile in *.exe:*.exe) # this is ok ;; *.exe:*) destfile=$destfile.exe ;; *:*.exe) func_stripname '' '.exe' "$destfile" destfile=$func_stripname_result ;; esac ;; esac func_show_eval "$install_prog\$stripme \$file \$destfile" 'exit $?' $opt_dry_run || if test -n "$outputname"; then ${RM}r "$tmpdir" fi ;; esac done for file in $staticlibs; do func_basename "$file" name="$func_basename_result" # Set up the ranlib parameters. oldlib="$destdir/$name" func_to_tool_file "$oldlib" func_convert_file_msys_to_w32 tool_oldlib=$func_to_tool_file_result func_show_eval "$install_prog \$file \$oldlib" 'exit $?' if test -n "$stripme" && test -n "$old_striplib"; then func_show_eval "$old_striplib $tool_oldlib" 'exit $?' fi # Do each command in the postinstall commands. func_execute_cmds "$old_postinstall_cmds" 'exit $?' done test -n "$future_libdirs" && \ func_warning "remember to run \`$progname --finish$future_libdirs'" if test -n "$current_libdirs"; then # Maybe just do a dry run. $opt_dry_run && current_libdirs=" -n$current_libdirs" exec_cmd='$SHELL $progpath $preserve_args --finish$current_libdirs' else exit $EXIT_SUCCESS fi } test "$opt_mode" = install && func_mode_install ${1+"$@"} # func_generate_dlsyms outputname originator pic_p # Extract symbols from dlprefiles and create ${outputname}S.o with # a dlpreopen symbol table. func_generate_dlsyms () { $opt_debug my_outputname="$1" my_originator="$2" my_pic_p="${3-no}" my_prefix=`$ECHO "$my_originator" | sed 's%[^a-zA-Z0-9]%_%g'` my_dlsyms= if test -n "$dlfiles$dlprefiles" || test "$dlself" != no; then if test -n "$NM" && test -n "$global_symbol_pipe"; then my_dlsyms="${my_outputname}S.c" else func_error "not configured to extract global symbols from dlpreopened files" fi fi if test -n "$my_dlsyms"; then case $my_dlsyms in "") ;; *.c) # Discover the nlist of each of the dlfiles. nlist="$output_objdir/${my_outputname}.nm" func_show_eval "$RM $nlist ${nlist}S ${nlist}T" # Parse the name list into a source file. func_verbose "creating $output_objdir/$my_dlsyms" $opt_dry_run || $ECHO > "$output_objdir/$my_dlsyms" "\ /* $my_dlsyms - symbol resolution table for \`$my_outputname' dlsym emulation. */ /* Generated by $PROGRAM (GNU $PACKAGE$TIMESTAMP) $VERSION */ #ifdef __cplusplus extern \"C\" { #endif #if defined(__GNUC__) && (((__GNUC__ == 4) && (__GNUC_MINOR__ >= 4)) || (__GNUC__ > 4)) #pragma GCC diagnostic ignored \"-Wstrict-prototypes\" #endif /* Keep this code in sync between libtool.m4, ltmain, lt_system.h, and tests. */ #if defined(_WIN32) || defined(__CYGWIN__) || defined(_WIN32_WCE) /* DATA imports from DLLs on WIN32 con't be const, because runtime relocations are performed -- see ld's documentation on pseudo-relocs. */ # define LT_DLSYM_CONST #elif defined(__osf__) /* This system does not cope well with relocations in const data. */ # define LT_DLSYM_CONST #else # define LT_DLSYM_CONST const #endif /* External symbol declarations for the compiler. */\ " if test "$dlself" = yes; then func_verbose "generating symbol list for \`$output'" $opt_dry_run || echo ': @PROGRAM@ ' > "$nlist" # Add our own program objects to the symbol list. progfiles=`$ECHO "$objs$old_deplibs" | $SP2NL | $SED "$lo2o" | $NL2SP` for progfile in $progfiles; do func_to_tool_file "$progfile" func_convert_file_msys_to_w32 func_verbose "extracting global C symbols from \`$func_to_tool_file_result'" $opt_dry_run || eval "$NM $func_to_tool_file_result | $global_symbol_pipe >> '$nlist'" done if test -n "$exclude_expsyms"; then $opt_dry_run || { eval '$EGREP -v " ($exclude_expsyms)$" "$nlist" > "$nlist"T' eval '$MV "$nlist"T "$nlist"' } fi if test -n "$export_symbols_regex"; then $opt_dry_run || { eval '$EGREP -e "$export_symbols_regex" "$nlist" > "$nlist"T' eval '$MV "$nlist"T "$nlist"' } fi # Prepare the list of exported symbols if test -z "$export_symbols"; then export_symbols="$output_objdir/$outputname.exp" $opt_dry_run || { $RM $export_symbols eval "${SED} -n -e '/^: @PROGRAM@ $/d' -e 's/^.* \(.*\)$/\1/p' "'< "$nlist" > "$export_symbols"' case $host in *cygwin* | *mingw* | *cegcc* ) eval "echo EXPORTS "'> "$output_objdir/$outputname.def"' eval 'cat "$export_symbols" >> "$output_objdir/$outputname.def"' ;; esac } else $opt_dry_run || { eval "${SED} -e 's/\([].[*^$]\)/\\\\\1/g' -e 's/^/ /' -e 's/$/$/'"' < "$export_symbols" > "$output_objdir/$outputname.exp"' eval '$GREP -f "$output_objdir/$outputname.exp" < "$nlist" > "$nlist"T' eval '$MV "$nlist"T "$nlist"' case $host in *cygwin* | *mingw* | *cegcc* ) eval "echo EXPORTS "'> "$output_objdir/$outputname.def"' eval 'cat "$nlist" >> "$output_objdir/$outputname.def"' ;; esac } fi fi for dlprefile in $dlprefiles; do func_verbose "extracting global C symbols from \`$dlprefile'" func_basename "$dlprefile" name="$func_basename_result" case $host in *cygwin* | *mingw* | *cegcc* ) # if an import library, we need to obtain dlname if func_win32_import_lib_p "$dlprefile"; then func_tr_sh "$dlprefile" eval "curr_lafile=\$libfile_$func_tr_sh_result" dlprefile_dlbasename="" if test -n "$curr_lafile" && func_lalib_p "$curr_lafile"; then # Use subshell, to avoid clobbering current variable values dlprefile_dlname=`source "$curr_lafile" && echo "$dlname"` if test -n "$dlprefile_dlname" ; then func_basename "$dlprefile_dlname" dlprefile_dlbasename="$func_basename_result" else # no lafile. user explicitly requested -dlpreopen . $sharedlib_from_linklib_cmd "$dlprefile" dlprefile_dlbasename=$sharedlib_from_linklib_result fi fi $opt_dry_run || { if test -n "$dlprefile_dlbasename" ; then eval '$ECHO ": $dlprefile_dlbasename" >> "$nlist"' else func_warning "Could not compute DLL name from $name" eval '$ECHO ": $name " >> "$nlist"' fi func_to_tool_file "$dlprefile" func_convert_file_msys_to_w32 eval "$NM \"$func_to_tool_file_result\" 2>/dev/null | $global_symbol_pipe | $SED -e '/I __imp/d' -e 's/I __nm_/D /;s/_nm__//' >> '$nlist'" } else # not an import lib $opt_dry_run || { eval '$ECHO ": $name " >> "$nlist"' func_to_tool_file "$dlprefile" func_convert_file_msys_to_w32 eval "$NM \"$func_to_tool_file_result\" 2>/dev/null | $global_symbol_pipe >> '$nlist'" } fi ;; *) $opt_dry_run || { eval '$ECHO ": $name " >> "$nlist"' func_to_tool_file "$dlprefile" func_convert_file_msys_to_w32 eval "$NM \"$func_to_tool_file_result\" 2>/dev/null | $global_symbol_pipe >> '$nlist'" } ;; esac done $opt_dry_run || { # Make sure we have at least an empty file. test -f "$nlist" || : > "$nlist" if test -n "$exclude_expsyms"; then $EGREP -v " ($exclude_expsyms)$" "$nlist" > "$nlist"T $MV "$nlist"T "$nlist" fi # Try sorting and uniquifying the output. if $GREP -v "^: " < "$nlist" | if sort -k 3 /dev/null 2>&1; then sort -k 3 else sort +2 fi | uniq > "$nlist"S; then : else $GREP -v "^: " < "$nlist" > "$nlist"S fi if test -f "$nlist"S; then eval "$global_symbol_to_cdecl"' < "$nlist"S >> "$output_objdir/$my_dlsyms"' else echo '/* NONE */' >> "$output_objdir/$my_dlsyms" fi echo >> "$output_objdir/$my_dlsyms" "\ /* The mapping between symbol names and symbols. */ typedef struct { const char *name; void *address; } lt_dlsymlist; extern LT_DLSYM_CONST lt_dlsymlist lt_${my_prefix}_LTX_preloaded_symbols[]; LT_DLSYM_CONST lt_dlsymlist lt_${my_prefix}_LTX_preloaded_symbols[] = {\ { \"$my_originator\", (void *) 0 }," case $need_lib_prefix in no) eval "$global_symbol_to_c_name_address" < "$nlist" >> "$output_objdir/$my_dlsyms" ;; *) eval "$global_symbol_to_c_name_address_lib_prefix" < "$nlist" >> "$output_objdir/$my_dlsyms" ;; esac echo >> "$output_objdir/$my_dlsyms" "\ {0, (void *) 0} }; /* This works around a problem in FreeBSD linker */ #ifdef FREEBSD_WORKAROUND static const void *lt_preloaded_setup() { return lt_${my_prefix}_LTX_preloaded_symbols; } #endif #ifdef __cplusplus } #endif\ " } # !$opt_dry_run pic_flag_for_symtable= case "$compile_command " in *" -static "*) ;; *) case $host in # compiling the symbol table file with pic_flag works around # a FreeBSD bug that causes programs to crash when -lm is # linked before any other PIC object. But we must not use # pic_flag when linking with -static. The problem exists in # FreeBSD 2.2.6 and is fixed in FreeBSD 3.1. *-*-freebsd2.*|*-*-freebsd3.0*|*-*-freebsdelf3.0*) pic_flag_for_symtable=" $pic_flag -DFREEBSD_WORKAROUND" ;; *-*-hpux*) pic_flag_for_symtable=" $pic_flag" ;; *) if test "X$my_pic_p" != Xno; then pic_flag_for_symtable=" $pic_flag" fi ;; esac ;; esac symtab_cflags= for arg in $LTCFLAGS; do case $arg in -pie | -fpie | -fPIE) ;; *) func_append symtab_cflags " $arg" ;; esac done # Now compile the dynamic symbol file. func_show_eval '(cd $output_objdir && $LTCC$symtab_cflags -c$no_builtin_flag$pic_flag_for_symtable "$my_dlsyms")' 'exit $?' # Clean up the generated files. func_show_eval '$RM "$output_objdir/$my_dlsyms" "$nlist" "${nlist}S" "${nlist}T"' # Transform the symbol file into the correct name. symfileobj="$output_objdir/${my_outputname}S.$objext" case $host in *cygwin* | *mingw* | *cegcc* ) if test -f "$output_objdir/$my_outputname.def"; then compile_command=`$ECHO "$compile_command" | $SED "s%@SYMFILE@%$output_objdir/$my_outputname.def $symfileobj%"` finalize_command=`$ECHO "$finalize_command" | $SED "s%@SYMFILE@%$output_objdir/$my_outputname.def $symfileobj%"` else compile_command=`$ECHO "$compile_command" | $SED "s%@SYMFILE@%$symfileobj%"` finalize_command=`$ECHO "$finalize_command" | $SED "s%@SYMFILE@%$symfileobj%"` fi ;; *) compile_command=`$ECHO "$compile_command" | $SED "s%@SYMFILE@%$symfileobj%"` finalize_command=`$ECHO "$finalize_command" | $SED "s%@SYMFILE@%$symfileobj%"` ;; esac ;; *) func_fatal_error "unknown suffix for \`$my_dlsyms'" ;; esac else # We keep going just in case the user didn't refer to # lt_preloaded_symbols. The linker will fail if global_symbol_pipe # really was required. # Nullify the symbol file. compile_command=`$ECHO "$compile_command" | $SED "s% @SYMFILE@%%"` finalize_command=`$ECHO "$finalize_command" | $SED "s% @SYMFILE@%%"` fi } # func_win32_libid arg # return the library type of file 'arg' # # Need a lot of goo to handle *both* DLLs and import libs # Has to be a shell function in order to 'eat' the argument # that is supplied when $file_magic_command is called. # Despite the name, also deal with 64 bit binaries. func_win32_libid () { $opt_debug win32_libid_type="unknown" win32_fileres=`file -L $1 2>/dev/null` case $win32_fileres in *ar\ archive\ import\ library*) # definitely import win32_libid_type="x86 archive import" ;; *ar\ archive*) # could be an import, or static # Keep the egrep pattern in sync with the one in _LT_CHECK_MAGIC_METHOD. if eval $OBJDUMP -f $1 | $SED -e '10q' 2>/dev/null | $EGREP 'file format (pei*-i386(.*architecture: i386)?|pe-arm-wince|pe-x86-64)' >/dev/null; then func_to_tool_file "$1" func_convert_file_msys_to_w32 win32_nmres=`eval $NM -f posix -A \"$func_to_tool_file_result\" | $SED -n -e ' 1,100{ / I /{ s,.*,import, p q } }'` case $win32_nmres in import*) win32_libid_type="x86 archive import";; *) win32_libid_type="x86 archive static";; esac fi ;; *DLL*) win32_libid_type="x86 DLL" ;; *executable*) # but shell scripts are "executable" too... case $win32_fileres in *MS\ Windows\ PE\ Intel*) win32_libid_type="x86 DLL" ;; esac ;; esac $ECHO "$win32_libid_type" } # func_cygming_dll_for_implib ARG # # Platform-specific function to extract the # name of the DLL associated with the specified # import library ARG. # Invoked by eval'ing the libtool variable # $sharedlib_from_linklib_cmd # Result is available in the variable # $sharedlib_from_linklib_result func_cygming_dll_for_implib () { $opt_debug sharedlib_from_linklib_result=`$DLLTOOL --identify-strict --identify "$1"` } # func_cygming_dll_for_implib_fallback_core SECTION_NAME LIBNAMEs # # The is the core of a fallback implementation of a # platform-specific function to extract the name of the # DLL associated with the specified import library LIBNAME. # # SECTION_NAME is either .idata$6 or .idata$7, depending # on the platform and compiler that created the implib. # # Echos the name of the DLL associated with the # specified import library. func_cygming_dll_for_implib_fallback_core () { $opt_debug match_literal=`$ECHO "$1" | $SED "$sed_make_literal_regex"` $OBJDUMP -s --section "$1" "$2" 2>/dev/null | $SED '/^Contents of section '"$match_literal"':/{ # Place marker at beginning of archive member dllname section s/.*/====MARK====/ p d } # These lines can sometimes be longer than 43 characters, but # are always uninteresting /:[ ]*file format pe[i]\{,1\}-/d /^In archive [^:]*:/d # Ensure marker is printed /^====MARK====/p # Remove all lines with less than 43 characters /^.\{43\}/!d # From remaining lines, remove first 43 characters s/^.\{43\}//' | $SED -n ' # Join marker and all lines until next marker into a single line /^====MARK====/ b para H $ b para b :para x s/\n//g # Remove the marker s/^====MARK====// # Remove trailing dots and whitespace s/[\. \t]*$// # Print /./p' | # we now have a list, one entry per line, of the stringified # contents of the appropriate section of all members of the # archive which possess that section. Heuristic: eliminate # all those which have a first or second character that is # a '.' (that is, objdump's representation of an unprintable # character.) This should work for all archives with less than # 0x302f exports -- but will fail for DLLs whose name actually # begins with a literal '.' or a single character followed by # a '.'. # # Of those that remain, print the first one. $SED -e '/^\./d;/^.\./d;q' } # func_cygming_gnu_implib_p ARG # This predicate returns with zero status (TRUE) if # ARG is a GNU/binutils-style import library. Returns # with nonzero status (FALSE) otherwise. func_cygming_gnu_implib_p () { $opt_debug func_to_tool_file "$1" func_convert_file_msys_to_w32 func_cygming_gnu_implib_tmp=`$NM "$func_to_tool_file_result" | eval "$global_symbol_pipe" | $EGREP ' (_head_[A-Za-z0-9_]+_[ad]l*|[A-Za-z0-9_]+_[ad]l*_iname)$'` test -n "$func_cygming_gnu_implib_tmp" } # func_cygming_ms_implib_p ARG # This predicate returns with zero status (TRUE) if # ARG is an MS-style import library. Returns # with nonzero status (FALSE) otherwise. func_cygming_ms_implib_p () { $opt_debug func_to_tool_file "$1" func_convert_file_msys_to_w32 func_cygming_ms_implib_tmp=`$NM "$func_to_tool_file_result" | eval "$global_symbol_pipe" | $GREP '_NULL_IMPORT_DESCRIPTOR'` test -n "$func_cygming_ms_implib_tmp" } # func_cygming_dll_for_implib_fallback ARG # Platform-specific function to extract the # name of the DLL associated with the specified # import library ARG. # # This fallback implementation is for use when $DLLTOOL # does not support the --identify-strict option. # Invoked by eval'ing the libtool variable # $sharedlib_from_linklib_cmd # Result is available in the variable # $sharedlib_from_linklib_result func_cygming_dll_for_implib_fallback () { $opt_debug if func_cygming_gnu_implib_p "$1" ; then # binutils import library sharedlib_from_linklib_result=`func_cygming_dll_for_implib_fallback_core '.idata$7' "$1"` elif func_cygming_ms_implib_p "$1" ; then # ms-generated import library sharedlib_from_linklib_result=`func_cygming_dll_for_implib_fallback_core '.idata$6' "$1"` else # unknown sharedlib_from_linklib_result="" fi } # func_extract_an_archive dir oldlib func_extract_an_archive () { $opt_debug f_ex_an_ar_dir="$1"; shift f_ex_an_ar_oldlib="$1" if test "$lock_old_archive_extraction" = yes; then lockfile=$f_ex_an_ar_oldlib.lock until $opt_dry_run || ln "$progpath" "$lockfile" 2>/dev/null; do func_echo "Waiting for $lockfile to be removed" sleep 2 done fi func_show_eval "(cd \$f_ex_an_ar_dir && $AR x \"\$f_ex_an_ar_oldlib\")" \ 'stat=$?; rm -f "$lockfile"; exit $stat' if test "$lock_old_archive_extraction" = yes; then $opt_dry_run || rm -f "$lockfile" fi if ($AR t "$f_ex_an_ar_oldlib" | sort | sort -uc >/dev/null 2>&1); then : else func_fatal_error "object name conflicts in archive: $f_ex_an_ar_dir/$f_ex_an_ar_oldlib" fi } # func_extract_archives gentop oldlib ... func_extract_archives () { $opt_debug my_gentop="$1"; shift my_oldlibs=${1+"$@"} my_oldobjs="" my_xlib="" my_xabs="" my_xdir="" for my_xlib in $my_oldlibs; do # Extract the objects. case $my_xlib in [\\/]* | [A-Za-z]:[\\/]*) my_xabs="$my_xlib" ;; *) my_xabs=`pwd`"/$my_xlib" ;; esac func_basename "$my_xlib" my_xlib="$func_basename_result" my_xlib_u=$my_xlib while :; do case " $extracted_archives " in *" $my_xlib_u "*) func_arith $extracted_serial + 1 extracted_serial=$func_arith_result my_xlib_u=lt$extracted_serial-$my_xlib ;; *) break ;; esac done extracted_archives="$extracted_archives $my_xlib_u" my_xdir="$my_gentop/$my_xlib_u" func_mkdir_p "$my_xdir" case $host in *-darwin*) func_verbose "Extracting $my_xabs" # Do not bother doing anything if just a dry run $opt_dry_run || { darwin_orig_dir=`pwd` cd $my_xdir || exit $? darwin_archive=$my_xabs darwin_curdir=`pwd` darwin_base_archive=`basename "$darwin_archive"` darwin_arches=`$LIPO -info "$darwin_archive" 2>/dev/null | $GREP Architectures 2>/dev/null || true` if test -n "$darwin_arches"; then darwin_arches=`$ECHO "$darwin_arches" | $SED -e 's/.*are://'` darwin_arch= func_verbose "$darwin_base_archive has multiple architectures $darwin_arches" for darwin_arch in $darwin_arches ; do func_mkdir_p "unfat-$$/${darwin_base_archive}-${darwin_arch}" $LIPO -thin $darwin_arch -output "unfat-$$/${darwin_base_archive}-${darwin_arch}/${darwin_base_archive}" "${darwin_archive}" cd "unfat-$$/${darwin_base_archive}-${darwin_arch}" func_extract_an_archive "`pwd`" "${darwin_base_archive}" cd "$darwin_curdir" $RM "unfat-$$/${darwin_base_archive}-${darwin_arch}/${darwin_base_archive}" done # $darwin_arches ## Okay now we've a bunch of thin objects, gotta fatten them up :) darwin_filelist=`find unfat-$$ -type f -name \*.o -print -o -name \*.lo -print | $SED -e "$basename" | sort -u` darwin_file= darwin_files= for darwin_file in $darwin_filelist; do darwin_files=`find unfat-$$ -name $darwin_file -print | sort | $NL2SP` $LIPO -create -output "$darwin_file" $darwin_files done # $darwin_filelist $RM -rf unfat-$$ cd "$darwin_orig_dir" else cd $darwin_orig_dir func_extract_an_archive "$my_xdir" "$my_xabs" fi # $darwin_arches } # !$opt_dry_run ;; *) func_extract_an_archive "$my_xdir" "$my_xabs" ;; esac my_oldobjs="$my_oldobjs "`find $my_xdir -name \*.$objext -print -o -name \*.lo -print | sort | $NL2SP` done func_extract_archives_result="$my_oldobjs" } # func_emit_wrapper [arg=no] # # Emit a libtool wrapper script on stdout. # Don't directly open a file because we may want to # incorporate the script contents within a cygwin/mingw # wrapper executable. Must ONLY be called from within # func_mode_link because it depends on a number of variables # set therein. # # ARG is the value that the WRAPPER_SCRIPT_BELONGS_IN_OBJDIR # variable will take. If 'yes', then the emitted script # will assume that the directory in which it is stored is # the $objdir directory. This is a cygwin/mingw-specific # behavior. func_emit_wrapper () { func_emit_wrapper_arg1=${1-no} $ECHO "\ #! $SHELL # $output - temporary wrapper script for $objdir/$outputname # Generated by $PROGRAM (GNU $PACKAGE$TIMESTAMP) $VERSION # # The $output program cannot be directly executed until all the libtool # libraries that it depends on are installed. # # This wrapper script should never be moved out of the build directory. # If it is, it will not operate correctly. # Sed substitution that helps us do robust quoting. It backslashifies # metacharacters that are still active within double-quoted strings. sed_quote_subst='$sed_quote_subst' # Be Bourne compatible if test -n \"\${ZSH_VERSION+set}\" && (emulate sh) >/dev/null 2>&1; then emulate sh NULLCMD=: # Zsh 3.x and 4.x performs word splitting on \${1+\"\$@\"}, which # is contrary to our usage. Disable this feature. alias -g '\${1+\"\$@\"}'='\"\$@\"' setopt NO_GLOB_SUBST else case \`(set -o) 2>/dev/null\` in *posix*) set -o posix;; esac fi BIN_SH=xpg4; export BIN_SH # for Tru64 DUALCASE=1; export DUALCASE # for MKS sh # The HP-UX ksh and POSIX shell print the target directory to stdout # if CDPATH is set. (unset CDPATH) >/dev/null 2>&1 && unset CDPATH relink_command=\"$relink_command\" # This environment variable determines our operation mode. if test \"\$libtool_install_magic\" = \"$magic\"; then # install mode needs the following variables: generated_by_libtool_version='$macro_version' notinst_deplibs='$notinst_deplibs' else # When we are sourced in execute mode, \$file and \$ECHO are already set. if test \"\$libtool_execute_magic\" != \"$magic\"; then file=\"\$0\"" qECHO=`$ECHO "$ECHO" | $SED "$sed_quote_subst"` $ECHO "\ # A function that is used when there is no print builtin or printf. func_fallback_echo () { eval 'cat <<_LTECHO_EOF \$1 _LTECHO_EOF' } ECHO=\"$qECHO\" fi # Very basic option parsing. These options are (a) specific to # the libtool wrapper, (b) are identical between the wrapper # /script/ and the wrapper /executable/ which is used only on # windows platforms, and (c) all begin with the string "--lt-" # (application programs are unlikely to have options which match # this pattern). # # There are only two supported options: --lt-debug and # --lt-dump-script. There is, deliberately, no --lt-help. # # The first argument to this parsing function should be the # script's $0 value, followed by "$@". lt_option_debug= func_parse_lt_options () { lt_script_arg0=\$0 shift for lt_opt do case \"\$lt_opt\" in --lt-debug) lt_option_debug=1 ;; --lt-dump-script) lt_dump_D=\`\$ECHO \"X\$lt_script_arg0\" | $SED -e 's/^X//' -e 's%/[^/]*$%%'\` test \"X\$lt_dump_D\" = \"X\$lt_script_arg0\" && lt_dump_D=. lt_dump_F=\`\$ECHO \"X\$lt_script_arg0\" | $SED -e 's/^X//' -e 's%^.*/%%'\` cat \"\$lt_dump_D/\$lt_dump_F\" exit 0 ;; --lt-*) \$ECHO \"Unrecognized --lt- option: '\$lt_opt'\" 1>&2 exit 1 ;; esac done # Print the debug banner immediately: if test -n \"\$lt_option_debug\"; then echo \"${outputname}:${output}:\${LINENO}: libtool wrapper (GNU $PACKAGE$TIMESTAMP) $VERSION\" 1>&2 fi } # Used when --lt-debug. Prints its arguments to stdout # (redirection is the responsibility of the caller) func_lt_dump_args () { lt_dump_args_N=1; for lt_arg do \$ECHO \"${outputname}:${output}:\${LINENO}: newargv[\$lt_dump_args_N]: \$lt_arg\" lt_dump_args_N=\`expr \$lt_dump_args_N + 1\` done } # Core function for launching the target application func_exec_program_core () { " case $host in # Backslashes separate directories on plain windows *-*-mingw | *-*-os2* | *-cegcc*) $ECHO "\ if test -n \"\$lt_option_debug\"; then \$ECHO \"${outputname}:${output}:\${LINENO}: newargv[0]: \$progdir\\\\\$program\" 1>&2 func_lt_dump_args \${1+\"\$@\"} 1>&2 fi exec \"\$progdir\\\\\$program\" \${1+\"\$@\"} " ;; *) $ECHO "\ if test -n \"\$lt_option_debug\"; then \$ECHO \"${outputname}:${output}:\${LINENO}: newargv[0]: \$progdir/\$program\" 1>&2 func_lt_dump_args \${1+\"\$@\"} 1>&2 fi exec \"\$progdir/\$program\" \${1+\"\$@\"} " ;; esac $ECHO "\ \$ECHO \"\$0: cannot exec \$program \$*\" 1>&2 exit 1 } # A function to encapsulate launching the target application # Strips options in the --lt-* namespace from \$@ and # launches target application with the remaining arguments. func_exec_program () { case \" \$* \" in *\\ --lt-*) for lt_wr_arg do case \$lt_wr_arg in --lt-*) ;; *) set x \"\$@\" \"\$lt_wr_arg\"; shift;; esac shift done ;; esac func_exec_program_core \${1+\"\$@\"} } # Parse options func_parse_lt_options \"\$0\" \${1+\"\$@\"} # Find the directory that this script lives in. thisdir=\`\$ECHO \"\$file\" | $SED 's%/[^/]*$%%'\` test \"x\$thisdir\" = \"x\$file\" && thisdir=. # Follow symbolic links until we get to the real thisdir. file=\`ls -ld \"\$file\" | $SED -n 's/.*-> //p'\` while test -n \"\$file\"; do destdir=\`\$ECHO \"\$file\" | $SED 's%/[^/]*\$%%'\` # If there was a directory component, then change thisdir. if test \"x\$destdir\" != \"x\$file\"; then case \"\$destdir\" in [\\\\/]* | [A-Za-z]:[\\\\/]*) thisdir=\"\$destdir\" ;; *) thisdir=\"\$thisdir/\$destdir\" ;; esac fi file=\`\$ECHO \"\$file\" | $SED 's%^.*/%%'\` file=\`ls -ld \"\$thisdir/\$file\" | $SED -n 's/.*-> //p'\` done # Usually 'no', except on cygwin/mingw when embedded into # the cwrapper. WRAPPER_SCRIPT_BELONGS_IN_OBJDIR=$func_emit_wrapper_arg1 if test \"\$WRAPPER_SCRIPT_BELONGS_IN_OBJDIR\" = \"yes\"; then # special case for '.' if test \"\$thisdir\" = \".\"; then thisdir=\`pwd\` fi # remove .libs from thisdir case \"\$thisdir\" in *[\\\\/]$objdir ) thisdir=\`\$ECHO \"\$thisdir\" | $SED 's%[\\\\/][^\\\\/]*$%%'\` ;; $objdir ) thisdir=. ;; esac fi # Try to get the absolute directory name. absdir=\`cd \"\$thisdir\" && pwd\` test -n \"\$absdir\" && thisdir=\"\$absdir\" " if test "$fast_install" = yes; then $ECHO "\ program=lt-'$outputname'$exeext progdir=\"\$thisdir/$objdir\" if test ! -f \"\$progdir/\$program\" || { file=\`ls -1dt \"\$progdir/\$program\" \"\$progdir/../\$program\" 2>/dev/null | ${SED} 1q\`; \\ test \"X\$file\" != \"X\$progdir/\$program\"; }; then file=\"\$\$-\$program\" if test ! -d \"\$progdir\"; then $MKDIR \"\$progdir\" else $RM \"\$progdir/\$file\" fi" $ECHO "\ # relink executable if necessary if test -n \"\$relink_command\"; then if relink_command_output=\`eval \$relink_command 2>&1\`; then : else $ECHO \"\$relink_command_output\" >&2 $RM \"\$progdir/\$file\" exit 1 fi fi $MV \"\$progdir/\$file\" \"\$progdir/\$program\" 2>/dev/null || { $RM \"\$progdir/\$program\"; $MV \"\$progdir/\$file\" \"\$progdir/\$program\"; } $RM \"\$progdir/\$file\" fi" else $ECHO "\ program='$outputname' progdir=\"\$thisdir/$objdir\" " fi $ECHO "\ if test -f \"\$progdir/\$program\"; then" # fixup the dll searchpath if we need to. # # Fix the DLL searchpath if we need to. Do this before prepending # to shlibpath, because on Windows, both are PATH and uninstalled # libraries must come first. if test -n "$dllsearchpath"; then $ECHO "\ # Add the dll search path components to the executable PATH PATH=$dllsearchpath:\$PATH " fi # Export our shlibpath_var if we have one. if test "$shlibpath_overrides_runpath" = yes && test -n "$shlibpath_var" && test -n "$temp_rpath"; then $ECHO "\ # Add our own library path to $shlibpath_var $shlibpath_var=\"$temp_rpath\$$shlibpath_var\" # Some systems cannot cope with colon-terminated $shlibpath_var # The second colon is a workaround for a bug in BeOS R4 sed $shlibpath_var=\`\$ECHO \"\$$shlibpath_var\" | $SED 's/::*\$//'\` export $shlibpath_var " fi $ECHO "\ if test \"\$libtool_execute_magic\" != \"$magic\"; then # Run the actual program with our arguments. func_exec_program \${1+\"\$@\"} fi else # The program doesn't exist. \$ECHO \"\$0: error: \\\`\$progdir/\$program' does not exist\" 1>&2 \$ECHO \"This script is just a wrapper for \$program.\" 1>&2 \$ECHO \"See the $PACKAGE documentation for more information.\" 1>&2 exit 1 fi fi\ " } # func_emit_cwrapperexe_src # emit the source code for a wrapper executable on stdout # Must ONLY be called from within func_mode_link because # it depends on a number of variable set therein. func_emit_cwrapperexe_src () { cat < #include #ifdef _MSC_VER # include # include # include #else # include # include # ifdef __CYGWIN__ # include # endif #endif #include #include #include #include #include #include #include #include /* declarations of non-ANSI functions */ #if defined(__MINGW32__) # ifdef __STRICT_ANSI__ int _putenv (const char *); # endif #elif defined(__CYGWIN__) # ifdef __STRICT_ANSI__ char *realpath (const char *, char *); int putenv (char *); int setenv (const char *, const char *, int); # endif /* #elif defined (other platforms) ... */ #endif /* portability defines, excluding path handling macros */ #if defined(_MSC_VER) # define setmode _setmode # define stat _stat # define chmod _chmod # define getcwd _getcwd # define putenv _putenv # define S_IXUSR _S_IEXEC # ifndef _INTPTR_T_DEFINED # define _INTPTR_T_DEFINED # define intptr_t int # endif #elif defined(__MINGW32__) # define setmode _setmode # define stat _stat # define chmod _chmod # define getcwd _getcwd # define putenv _putenv #elif defined(__CYGWIN__) # define HAVE_SETENV # define FOPEN_WB "wb" /* #elif defined (other platforms) ... */ #endif #if defined(PATH_MAX) # define LT_PATHMAX PATH_MAX #elif defined(MAXPATHLEN) # define LT_PATHMAX MAXPATHLEN #else # define LT_PATHMAX 1024 #endif #ifndef S_IXOTH # define S_IXOTH 0 #endif #ifndef S_IXGRP # define S_IXGRP 0 #endif /* path handling portability macros */ #ifndef DIR_SEPARATOR # define DIR_SEPARATOR '/' # define PATH_SEPARATOR ':' #endif #if defined (_WIN32) || defined (__MSDOS__) || defined (__DJGPP__) || \ defined (__OS2__) # define HAVE_DOS_BASED_FILE_SYSTEM # define FOPEN_WB "wb" # ifndef DIR_SEPARATOR_2 # define DIR_SEPARATOR_2 '\\' # endif # ifndef PATH_SEPARATOR_2 # define PATH_SEPARATOR_2 ';' # endif #endif #ifndef DIR_SEPARATOR_2 # define IS_DIR_SEPARATOR(ch) ((ch) == DIR_SEPARATOR) #else /* DIR_SEPARATOR_2 */ # define IS_DIR_SEPARATOR(ch) \ (((ch) == DIR_SEPARATOR) || ((ch) == DIR_SEPARATOR_2)) #endif /* DIR_SEPARATOR_2 */ #ifndef PATH_SEPARATOR_2 # define IS_PATH_SEPARATOR(ch) ((ch) == PATH_SEPARATOR) #else /* PATH_SEPARATOR_2 */ # define IS_PATH_SEPARATOR(ch) ((ch) == PATH_SEPARATOR_2) #endif /* PATH_SEPARATOR_2 */ #ifndef FOPEN_WB # define FOPEN_WB "w" #endif #ifndef _O_BINARY # define _O_BINARY 0 #endif #define XMALLOC(type, num) ((type *) xmalloc ((num) * sizeof(type))) #define XFREE(stale) do { \ if (stale) { free ((void *) stale); stale = 0; } \ } while (0) #if defined(LT_DEBUGWRAPPER) static int lt_debug = 1; #else static int lt_debug = 0; #endif const char *program_name = "libtool-wrapper"; /* in case xstrdup fails */ void *xmalloc (size_t num); char *xstrdup (const char *string); const char *base_name (const char *name); char *find_executable (const char *wrapper); char *chase_symlinks (const char *pathspec); int make_executable (const char *path); int check_executable (const char *path); char *strendzap (char *str, const char *pat); void lt_debugprintf (const char *file, int line, const char *fmt, ...); void lt_fatal (const char *file, int line, const char *message, ...); static const char *nonnull (const char *s); static const char *nonempty (const char *s); void lt_setenv (const char *name, const char *value); char *lt_extend_str (const char *orig_value, const char *add, int to_end); void lt_update_exe_path (const char *name, const char *value); void lt_update_lib_path (const char *name, const char *value); char **prepare_spawn (char **argv); void lt_dump_script (FILE *f); EOF cat <= 0) && (st.st_mode & (S_IXUSR | S_IXGRP | S_IXOTH))) return 1; else return 0; } int make_executable (const char *path) { int rval = 0; struct stat st; lt_debugprintf (__FILE__, __LINE__, "(make_executable): %s\n", nonempty (path)); if ((!path) || (!*path)) return 0; if (stat (path, &st) >= 0) { rval = chmod (path, st.st_mode | S_IXOTH | S_IXGRP | S_IXUSR); } return rval; } /* Searches for the full path of the wrapper. Returns newly allocated full path name if found, NULL otherwise Does not chase symlinks, even on platforms that support them. */ char * find_executable (const char *wrapper) { int has_slash = 0; const char *p; const char *p_next; /* static buffer for getcwd */ char tmp[LT_PATHMAX + 1]; int tmp_len; char *concat_name; lt_debugprintf (__FILE__, __LINE__, "(find_executable): %s\n", nonempty (wrapper)); if ((wrapper == NULL) || (*wrapper == '\0')) return NULL; /* Absolute path? */ #if defined (HAVE_DOS_BASED_FILE_SYSTEM) if (isalpha ((unsigned char) wrapper[0]) && wrapper[1] == ':') { concat_name = xstrdup (wrapper); if (check_executable (concat_name)) return concat_name; XFREE (concat_name); } else { #endif if (IS_DIR_SEPARATOR (wrapper[0])) { concat_name = xstrdup (wrapper); if (check_executable (concat_name)) return concat_name; XFREE (concat_name); } #if defined (HAVE_DOS_BASED_FILE_SYSTEM) } #endif for (p = wrapper; *p; p++) if (*p == '/') { has_slash = 1; break; } if (!has_slash) { /* no slashes; search PATH */ const char *path = getenv ("PATH"); if (path != NULL) { for (p = path; *p; p = p_next) { const char *q; size_t p_len; for (q = p; *q; q++) if (IS_PATH_SEPARATOR (*q)) break; p_len = q - p; p_next = (*q == '\0' ? q : q + 1); if (p_len == 0) { /* empty path: current directory */ if (getcwd (tmp, LT_PATHMAX) == NULL) lt_fatal (__FILE__, __LINE__, "getcwd failed: %s", nonnull (strerror (errno))); tmp_len = strlen (tmp); concat_name = XMALLOC (char, tmp_len + 1 + strlen (wrapper) + 1); memcpy (concat_name, tmp, tmp_len); concat_name[tmp_len] = '/'; strcpy (concat_name + tmp_len + 1, wrapper); } else { concat_name = XMALLOC (char, p_len + 1 + strlen (wrapper) + 1); memcpy (concat_name, p, p_len); concat_name[p_len] = '/'; strcpy (concat_name + p_len + 1, wrapper); } if (check_executable (concat_name)) return concat_name; XFREE (concat_name); } } /* not found in PATH; assume curdir */ } /* Relative path | not found in path: prepend cwd */ if (getcwd (tmp, LT_PATHMAX) == NULL) lt_fatal (__FILE__, __LINE__, "getcwd failed: %s", nonnull (strerror (errno))); tmp_len = strlen (tmp); concat_name = XMALLOC (char, tmp_len + 1 + strlen (wrapper) + 1); memcpy (concat_name, tmp, tmp_len); concat_name[tmp_len] = '/'; strcpy (concat_name + tmp_len + 1, wrapper); if (check_executable (concat_name)) return concat_name; XFREE (concat_name); return NULL; } char * chase_symlinks (const char *pathspec) { #ifndef S_ISLNK return xstrdup (pathspec); #else char buf[LT_PATHMAX]; struct stat s; char *tmp_pathspec = xstrdup (pathspec); char *p; int has_symlinks = 0; while (strlen (tmp_pathspec) && !has_symlinks) { lt_debugprintf (__FILE__, __LINE__, "checking path component for symlinks: %s\n", tmp_pathspec); if (lstat (tmp_pathspec, &s) == 0) { if (S_ISLNK (s.st_mode) != 0) { has_symlinks = 1; break; } /* search backwards for last DIR_SEPARATOR */ p = tmp_pathspec + strlen (tmp_pathspec) - 1; while ((p > tmp_pathspec) && (!IS_DIR_SEPARATOR (*p))) p--; if ((p == tmp_pathspec) && (!IS_DIR_SEPARATOR (*p))) { /* no more DIR_SEPARATORS left */ break; } *p = '\0'; } else { lt_fatal (__FILE__, __LINE__, "error accessing file \"%s\": %s", tmp_pathspec, nonnull (strerror (errno))); } } XFREE (tmp_pathspec); if (!has_symlinks) { return xstrdup (pathspec); } tmp_pathspec = realpath (pathspec, buf); if (tmp_pathspec == 0) { lt_fatal (__FILE__, __LINE__, "could not follow symlinks for %s", pathspec); } return xstrdup (tmp_pathspec); #endif } char * strendzap (char *str, const char *pat) { size_t len, patlen; assert (str != NULL); assert (pat != NULL); len = strlen (str); patlen = strlen (pat); if (patlen <= len) { str += len - patlen; if (strcmp (str, pat) == 0) *str = '\0'; } return str; } void lt_debugprintf (const char *file, int line, const char *fmt, ...) { va_list args; if (lt_debug) { (void) fprintf (stderr, "%s:%s:%d: ", program_name, file, line); va_start (args, fmt); (void) vfprintf (stderr, fmt, args); va_end (args); } } static void lt_error_core (int exit_status, const char *file, int line, const char *mode, const char *message, va_list ap) { fprintf (stderr, "%s:%s:%d: %s: ", program_name, file, line, mode); vfprintf (stderr, message, ap); fprintf (stderr, ".\n"); if (exit_status >= 0) exit (exit_status); } void lt_fatal (const char *file, int line, const char *message, ...) { va_list ap; va_start (ap, message); lt_error_core (EXIT_FAILURE, file, line, "FATAL", message, ap); va_end (ap); } static const char * nonnull (const char *s) { return s ? s : "(null)"; } static const char * nonempty (const char *s) { return (s && !*s) ? "(empty)" : nonnull (s); } void lt_setenv (const char *name, const char *value) { lt_debugprintf (__FILE__, __LINE__, "(lt_setenv) setting '%s' to '%s'\n", nonnull (name), nonnull (value)); { #ifdef HAVE_SETENV /* always make a copy, for consistency with !HAVE_SETENV */ char *str = xstrdup (value); setenv (name, str, 1); #else int len = strlen (name) + 1 + strlen (value) + 1; char *str = XMALLOC (char, len); sprintf (str, "%s=%s", name, value); if (putenv (str) != EXIT_SUCCESS) { XFREE (str); } #endif } } char * lt_extend_str (const char *orig_value, const char *add, int to_end) { char *new_value; if (orig_value && *orig_value) { int orig_value_len = strlen (orig_value); int add_len = strlen (add); new_value = XMALLOC (char, add_len + orig_value_len + 1); if (to_end) { strcpy (new_value, orig_value); strcpy (new_value + orig_value_len, add); } else { strcpy (new_value, add); strcpy (new_value + add_len, orig_value); } } else { new_value = xstrdup (add); } return new_value; } void lt_update_exe_path (const char *name, const char *value) { lt_debugprintf (__FILE__, __LINE__, "(lt_update_exe_path) modifying '%s' by prepending '%s'\n", nonnull (name), nonnull (value)); if (name && *name && value && *value) { char *new_value = lt_extend_str (getenv (name), value, 0); /* some systems can't cope with a ':'-terminated path #' */ int len = strlen (new_value); while (((len = strlen (new_value)) > 0) && IS_PATH_SEPARATOR (new_value[len-1])) { new_value[len-1] = '\0'; } lt_setenv (name, new_value); XFREE (new_value); } } void lt_update_lib_path (const char *name, const char *value) { lt_debugprintf (__FILE__, __LINE__, "(lt_update_lib_path) modifying '%s' by prepending '%s'\n", nonnull (name), nonnull (value)); if (name && *name && value && *value) { char *new_value = lt_extend_str (getenv (name), value, 0); lt_setenv (name, new_value); XFREE (new_value); } } EOF case $host_os in mingw*) cat <<"EOF" /* Prepares an argument vector before calling spawn(). Note that spawn() does not by itself call the command interpreter (getenv ("COMSPEC") != NULL ? getenv ("COMSPEC") : ({ OSVERSIONINFO v; v.dwOSVersionInfoSize = sizeof(OSVERSIONINFO); GetVersionEx(&v); v.dwPlatformId == VER_PLATFORM_WIN32_NT; }) ? "cmd.exe" : "command.com"). Instead it simply concatenates the arguments, separated by ' ', and calls CreateProcess(). We must quote the arguments since Win32 CreateProcess() interprets characters like ' ', '\t', '\\', '"' (but not '<' and '>') in a special way: - Space and tab are interpreted as delimiters. They are not treated as delimiters if they are surrounded by double quotes: "...". - Unescaped double quotes are removed from the input. Their only effect is that within double quotes, space and tab are treated like normal characters. - Backslashes not followed by double quotes are not special. - But 2*n+1 backslashes followed by a double quote become n backslashes followed by a double quote (n >= 0): \" -> " \\\" -> \" \\\\\" -> \\" */ #define SHELL_SPECIAL_CHARS "\"\\ \001\002\003\004\005\006\007\010\011\012\013\014\015\016\017\020\021\022\023\024\025\026\027\030\031\032\033\034\035\036\037" #define SHELL_SPACE_CHARS " \001\002\003\004\005\006\007\010\011\012\013\014\015\016\017\020\021\022\023\024\025\026\027\030\031\032\033\034\035\036\037" char ** prepare_spawn (char **argv) { size_t argc; char **new_argv; size_t i; /* Count number of arguments. */ for (argc = 0; argv[argc] != NULL; argc++) ; /* Allocate new argument vector. */ new_argv = XMALLOC (char *, argc + 1); /* Put quoted arguments into the new argument vector. */ for (i = 0; i < argc; i++) { const char *string = argv[i]; if (string[0] == '\0') new_argv[i] = xstrdup ("\"\""); else if (strpbrk (string, SHELL_SPECIAL_CHARS) != NULL) { int quote_around = (strpbrk (string, SHELL_SPACE_CHARS) != NULL); size_t length; unsigned int backslashes; const char *s; char *quoted_string; char *p; length = 0; backslashes = 0; if (quote_around) length++; for (s = string; *s != '\0'; s++) { char c = *s; if (c == '"') length += backslashes + 1; length++; if (c == '\\') backslashes++; else backslashes = 0; } if (quote_around) length += backslashes + 1; quoted_string = XMALLOC (char, length + 1); p = quoted_string; backslashes = 0; if (quote_around) *p++ = '"'; for (s = string; *s != '\0'; s++) { char c = *s; if (c == '"') { unsigned int j; for (j = backslashes + 1; j > 0; j--) *p++ = '\\'; } *p++ = c; if (c == '\\') backslashes++; else backslashes = 0; } if (quote_around) { unsigned int j; for (j = backslashes; j > 0; j--) *p++ = '\\'; *p++ = '"'; } *p = '\0'; new_argv[i] = quoted_string; } else new_argv[i] = (char *) string; } new_argv[argc] = NULL; return new_argv; } EOF ;; esac cat <<"EOF" void lt_dump_script (FILE* f) { EOF func_emit_wrapper yes | $SED -n -e ' s/^\(.\{79\}\)\(..*\)/\1\ \2/ h s/\([\\"]\)/\\\1/g s/$/\\n/ s/\([^\n]*\).*/ fputs ("\1", f);/p g D' cat <<"EOF" } EOF } # end: func_emit_cwrapperexe_src # func_win32_import_lib_p ARG # True if ARG is an import lib, as indicated by $file_magic_cmd func_win32_import_lib_p () { $opt_debug case `eval $file_magic_cmd \"\$1\" 2>/dev/null | $SED -e 10q` in *import*) : ;; *) false ;; esac } # func_mode_link arg... func_mode_link () { $opt_debug case $host in *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-cegcc*) # It is impossible to link a dll without this setting, and # we shouldn't force the makefile maintainer to figure out # which system we are compiling for in order to pass an extra # flag for every libtool invocation. # allow_undefined=no # FIXME: Unfortunately, there are problems with the above when trying # to make a dll which has undefined symbols, in which case not # even a static library is built. For now, we need to specify # -no-undefined on the libtool link line when we can be certain # that all symbols are satisfied, otherwise we get a static library. allow_undefined=yes ;; *) allow_undefined=yes ;; esac libtool_args=$nonopt base_compile="$nonopt $@" compile_command=$nonopt finalize_command=$nonopt compile_rpath= finalize_rpath= compile_shlibpath= finalize_shlibpath= convenience= old_convenience= deplibs= old_deplibs= compiler_flags= linker_flags= dllsearchpath= lib_search_path=`pwd` inst_prefix_dir= new_inherited_linker_flags= avoid_version=no bindir= dlfiles= dlprefiles= dlself=no export_dynamic=no export_symbols= export_symbols_regex= generated= libobjs= ltlibs= module=no no_install=no objs= non_pic_objects= precious_files_regex= prefer_static_libs=no preload=no prev= prevarg= release= rpath= xrpath= perm_rpath= temp_rpath= thread_safe=no vinfo= vinfo_number=no weak_libs= single_module="${wl}-single_module" func_infer_tag $base_compile # We need to know -static, to get the right output filenames. for arg do case $arg in -shared) test "$build_libtool_libs" != yes && \ func_fatal_configuration "can not build a shared library" build_old_libs=no break ;; -all-static | -static | -static-libtool-libs) case $arg in -all-static) if test "$build_libtool_libs" = yes && test -z "$link_static_flag"; then func_warning "complete static linking is impossible in this configuration" fi if test -n "$link_static_flag"; then dlopen_self=$dlopen_self_static fi prefer_static_libs=yes ;; -static) if test -z "$pic_flag" && test -n "$link_static_flag"; then dlopen_self=$dlopen_self_static fi prefer_static_libs=built ;; -static-libtool-libs) if test -z "$pic_flag" && test -n "$link_static_flag"; then dlopen_self=$dlopen_self_static fi prefer_static_libs=yes ;; esac build_libtool_libs=no build_old_libs=yes break ;; esac done # See if our shared archives depend on static archives. test -n "$old_archive_from_new_cmds" && build_old_libs=yes # Go through the arguments, transforming them on the way. while test "$#" -gt 0; do arg="$1" shift func_quote_for_eval "$arg" qarg=$func_quote_for_eval_unquoted_result func_append libtool_args " $func_quote_for_eval_result" # If the previous option needs an argument, assign it. if test -n "$prev"; then case $prev in output) func_append compile_command " @OUTPUT@" func_append finalize_command " @OUTPUT@" ;; esac case $prev in bindir) bindir="$arg" prev= continue ;; dlfiles|dlprefiles) if test "$preload" = no; then # Add the symbol object into the linking commands. func_append compile_command " @SYMFILE@" func_append finalize_command " @SYMFILE@" preload=yes fi case $arg in *.la | *.lo) ;; # We handle these cases below. force) if test "$dlself" = no; then dlself=needless export_dynamic=yes fi prev= continue ;; self) if test "$prev" = dlprefiles; then dlself=yes elif test "$prev" = dlfiles && test "$dlopen_self" != yes; then dlself=yes else dlself=needless export_dynamic=yes fi prev= continue ;; *) if test "$prev" = dlfiles; then func_append dlfiles " $arg" else func_append dlprefiles " $arg" fi prev= continue ;; esac ;; expsyms) export_symbols="$arg" test -f "$arg" \ || func_fatal_error "symbol file \`$arg' does not exist" prev= continue ;; expsyms_regex) export_symbols_regex="$arg" prev= continue ;; framework) case $host in *-*-darwin*) case "$deplibs " in *" $qarg.ltframework "*) ;; *) func_append deplibs " $qarg.ltframework" # this is fixed later ;; esac ;; esac prev= continue ;; inst_prefix) inst_prefix_dir="$arg" prev= continue ;; objectlist) if test -f "$arg"; then save_arg=$arg moreargs= for fil in `cat "$save_arg"` do # func_append moreargs " $fil" arg=$fil # A libtool-controlled object. # Check to see that this really is a libtool object. if func_lalib_unsafe_p "$arg"; then pic_object= non_pic_object= # Read the .lo file func_source "$arg" if test -z "$pic_object" || test -z "$non_pic_object" || test "$pic_object" = none && test "$non_pic_object" = none; then func_fatal_error "cannot find name of object for \`$arg'" fi # Extract subdirectory from the argument. func_dirname "$arg" "/" "" xdir="$func_dirname_result" if test "$pic_object" != none; then # Prepend the subdirectory the object is found in. pic_object="$xdir$pic_object" if test "$prev" = dlfiles; then if test "$build_libtool_libs" = yes && test "$dlopen_support" = yes; then func_append dlfiles " $pic_object" prev= continue else # If libtool objects are unsupported, then we need to preload. prev=dlprefiles fi fi # CHECK ME: I think I busted this. -Ossama if test "$prev" = dlprefiles; then # Preload the old-style object. func_append dlprefiles " $pic_object" prev= fi # A PIC object. func_append libobjs " $pic_object" arg="$pic_object" fi # Non-PIC object. if test "$non_pic_object" != none; then # Prepend the subdirectory the object is found in. non_pic_object="$xdir$non_pic_object" # A standard non-PIC object func_append non_pic_objects " $non_pic_object" if test -z "$pic_object" || test "$pic_object" = none ; then arg="$non_pic_object" fi else # If the PIC object exists, use it instead. # $xdir was prepended to $pic_object above. non_pic_object="$pic_object" func_append non_pic_objects " $non_pic_object" fi else # Only an error if not doing a dry-run. if $opt_dry_run; then # Extract subdirectory from the argument. func_dirname "$arg" "/" "" xdir="$func_dirname_result" func_lo2o "$arg" pic_object=$xdir$objdir/$func_lo2o_result non_pic_object=$xdir$func_lo2o_result func_append libobjs " $pic_object" func_append non_pic_objects " $non_pic_object" else func_fatal_error "\`$arg' is not a valid libtool object" fi fi done else func_fatal_error "link input file \`$arg' does not exist" fi arg=$save_arg prev= continue ;; precious_regex) precious_files_regex="$arg" prev= continue ;; release) release="-$arg" prev= continue ;; rpath | xrpath) # We need an absolute path. case $arg in [\\/]* | [A-Za-z]:[\\/]*) ;; *) func_fatal_error "only absolute run-paths are allowed" ;; esac if test "$prev" = rpath; then case "$rpath " in *" $arg "*) ;; *) func_append rpath " $arg" ;; esac else case "$xrpath " in *" $arg "*) ;; *) func_append xrpath " $arg" ;; esac fi prev= continue ;; shrext) shrext_cmds="$arg" prev= continue ;; weak) func_append weak_libs " $arg" prev= continue ;; xcclinker) func_append linker_flags " $qarg" func_append compiler_flags " $qarg" prev= func_append compile_command " $qarg" func_append finalize_command " $qarg" continue ;; xcompiler) func_append compiler_flags " $qarg" prev= func_append compile_command " $qarg" func_append finalize_command " $qarg" continue ;; xlinker) func_append linker_flags " $qarg" func_append compiler_flags " $wl$qarg" prev= func_append compile_command " $wl$qarg" func_append finalize_command " $wl$qarg" continue ;; *) eval "$prev=\"\$arg\"" prev= continue ;; esac fi # test -n "$prev" prevarg="$arg" case $arg in -all-static) if test -n "$link_static_flag"; then # See comment for -static flag below, for more details. func_append compile_command " $link_static_flag" func_append finalize_command " $link_static_flag" fi continue ;; -allow-undefined) # FIXME: remove this flag sometime in the future. func_fatal_error "\`-allow-undefined' must not be used because it is the default" ;; -avoid-version) avoid_version=yes continue ;; -bindir) prev=bindir continue ;; -dlopen) prev=dlfiles continue ;; -dlpreopen) prev=dlprefiles continue ;; -export-dynamic) export_dynamic=yes continue ;; -export-symbols | -export-symbols-regex) if test -n "$export_symbols" || test -n "$export_symbols_regex"; then func_fatal_error "more than one -exported-symbols argument is not allowed" fi if test "X$arg" = "X-export-symbols"; then prev=expsyms else prev=expsyms_regex fi continue ;; -framework) prev=framework continue ;; -inst-prefix-dir) prev=inst_prefix continue ;; # The native IRIX linker understands -LANG:*, -LIST:* and -LNO:* # so, if we see these flags be careful not to treat them like -L -L[A-Z][A-Z]*:*) case $with_gcc/$host in no/*-*-irix* | /*-*-irix*) func_append compile_command " $arg" func_append finalize_command " $arg" ;; esac continue ;; -L*) func_stripname "-L" '' "$arg" if test -z "$func_stripname_result"; then if test "$#" -gt 0; then func_fatal_error "require no space between \`-L' and \`$1'" else func_fatal_error "need path for \`-L' option" fi fi func_resolve_sysroot "$func_stripname_result" dir=$func_resolve_sysroot_result # We need an absolute path. case $dir in [\\/]* | [A-Za-z]:[\\/]*) ;; *) absdir=`cd "$dir" && pwd` test -z "$absdir" && \ func_fatal_error "cannot determine absolute directory name of \`$dir'" dir="$absdir" ;; esac case "$deplibs " in *" -L$dir "* | *" $arg "*) # Will only happen for absolute or sysroot arguments ;; *) # Preserve sysroot, but never include relative directories case $dir in [\\/]* | [A-Za-z]:[\\/]* | =*) func_append deplibs " $arg" ;; *) func_append deplibs " -L$dir" ;; esac func_append lib_search_path " $dir" ;; esac case $host in *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-cegcc*) testbindir=`$ECHO "$dir" | $SED 's*/lib$*/bin*'` case :$dllsearchpath: in *":$dir:"*) ;; ::) dllsearchpath=$dir;; *) func_append dllsearchpath ":$dir";; esac case :$dllsearchpath: in *":$testbindir:"*) ;; ::) dllsearchpath=$testbindir;; *) func_append dllsearchpath ":$testbindir";; esac ;; esac continue ;; -l*) if test "X$arg" = "X-lc" || test "X$arg" = "X-lm"; then case $host in *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-beos* | *-cegcc* | *-*-haiku*) # These systems don't actually have a C or math library (as such) continue ;; *-*-os2*) # These systems don't actually have a C library (as such) test "X$arg" = "X-lc" && continue ;; *-*-openbsd* | *-*-freebsd* | *-*-dragonfly*) # Do not include libc due to us having libc/libc_r. test "X$arg" = "X-lc" && continue ;; *-*-rhapsody* | *-*-darwin1.[012]) # Rhapsody C and math libraries are in the System framework func_append deplibs " System.ltframework" continue ;; *-*-sco3.2v5* | *-*-sco5v6*) # Causes problems with __ctype test "X$arg" = "X-lc" && continue ;; *-*-sysv4.2uw2* | *-*-sysv5* | *-*-unixware* | *-*-OpenUNIX*) # Compiler inserts libc in the correct place for threads to work test "X$arg" = "X-lc" && continue ;; esac elif test "X$arg" = "X-lc_r"; then case $host in *-*-openbsd* | *-*-freebsd* | *-*-dragonfly*) # Do not include libc_r directly, use -pthread flag. continue ;; esac fi func_append deplibs " $arg" continue ;; -module) module=yes continue ;; # Tru64 UNIX uses -model [arg] to determine the layout of C++ # classes, name mangling, and exception handling. # Darwin uses the -arch flag to determine output architecture. -model|-arch|-isysroot|--sysroot) func_append compiler_flags " $arg" func_append compile_command " $arg" func_append finalize_command " $arg" prev=xcompiler continue ;; -mt|-mthreads|-kthread|-Kthread|-pthread|-pthreads|--thread-safe \ |-threads|-fopenmp|-openmp|-mp|-xopenmp|-omp|-qsmp=*) func_append compiler_flags " $arg" func_append compile_command " $arg" func_append finalize_command " $arg" case "$new_inherited_linker_flags " in *" $arg "*) ;; * ) func_append new_inherited_linker_flags " $arg" ;; esac continue ;; -multi_module) single_module="${wl}-multi_module" continue ;; -no-fast-install) fast_install=no continue ;; -no-install) case $host in *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-*-darwin* | *-cegcc*) # The PATH hackery in wrapper scripts is required on Windows # and Darwin in order for the loader to find any dlls it needs. func_warning "\`-no-install' is ignored for $host" func_warning "assuming \`-no-fast-install' instead" fast_install=no ;; *) no_install=yes ;; esac continue ;; -no-undefined) allow_undefined=no continue ;; -objectlist) prev=objectlist continue ;; -o) prev=output ;; -precious-files-regex) prev=precious_regex continue ;; -release) prev=release continue ;; -rpath) prev=rpath continue ;; -R) prev=xrpath continue ;; -R*) func_stripname '-R' '' "$arg" dir=$func_stripname_result # We need an absolute path. case $dir in [\\/]* | [A-Za-z]:[\\/]*) ;; =*) func_stripname '=' '' "$dir" dir=$lt_sysroot$func_stripname_result ;; *) func_fatal_error "only absolute run-paths are allowed" ;; esac case "$xrpath " in *" $dir "*) ;; *) func_append xrpath " $dir" ;; esac continue ;; -shared) # The effects of -shared are defined in a previous loop. continue ;; -shrext) prev=shrext continue ;; -static | -static-libtool-libs) # The effects of -static are defined in a previous loop. # We used to do the same as -all-static on platforms that # didn't have a PIC flag, but the assumption that the effects # would be equivalent was wrong. It would break on at least # Digital Unix and AIX. continue ;; -thread-safe) thread_safe=yes continue ;; -version-info) prev=vinfo continue ;; -version-number) prev=vinfo vinfo_number=yes continue ;; -weak) prev=weak continue ;; -Wc,*) func_stripname '-Wc,' '' "$arg" args=$func_stripname_result arg= save_ifs="$IFS"; IFS=',' for flag in $args; do IFS="$save_ifs" func_quote_for_eval "$flag" func_append arg " $func_quote_for_eval_result" func_append compiler_flags " $func_quote_for_eval_result" done IFS="$save_ifs" func_stripname ' ' '' "$arg" arg=$func_stripname_result ;; -Wl,*) func_stripname '-Wl,' '' "$arg" args=$func_stripname_result arg= save_ifs="$IFS"; IFS=',' for flag in $args; do IFS="$save_ifs" func_quote_for_eval "$flag" func_append arg " $wl$func_quote_for_eval_result" func_append compiler_flags " $wl$func_quote_for_eval_result" func_append linker_flags " $func_quote_for_eval_result" done IFS="$save_ifs" func_stripname ' ' '' "$arg" arg=$func_stripname_result ;; -Xcompiler) prev=xcompiler continue ;; -Xlinker) prev=xlinker continue ;; -XCClinker) prev=xcclinker continue ;; # -msg_* for osf cc -msg_*) func_quote_for_eval "$arg" arg="$func_quote_for_eval_result" ;; # Flags to be passed through unchanged, with rationale: # -64, -mips[0-9] enable 64-bit mode for the SGI compiler # -r[0-9][0-9]* specify processor for the SGI compiler # -xarch=*, -xtarget=* enable 64-bit mode for the Sun compiler # +DA*, +DD* enable 64-bit mode for the HP compiler # -q* compiler args for the IBM compiler # -m*, -t[45]*, -txscale* architecture-specific flags for GCC # -F/path path to uninstalled frameworks, gcc on darwin # -p, -pg, --coverage, -fprofile-* profiling flags for GCC # @file GCC response files # -tp=* Portland pgcc target processor selection # --sysroot=* for sysroot support # -O*, -flto*, -fwhopr*, -fuse-linker-plugin GCC link-time optimization -64|-mips[0-9]|-r[0-9][0-9]*|-xarch=*|-xtarget=*|+DA*|+DD*|-q*|-m*| \ -t[45]*|-txscale*|-p|-pg|--coverage|-fprofile-*|-F*|@*|-tp=*|--sysroot=*| \ -O*|-flto*|-fwhopr*|-fuse-linker-plugin) func_quote_for_eval "$arg" arg="$func_quote_for_eval_result" func_append compile_command " $arg" func_append finalize_command " $arg" func_append compiler_flags " $arg" continue ;; # Some other compiler flag. -* | +*) func_quote_for_eval "$arg" arg="$func_quote_for_eval_result" ;; *.$objext) # A standard object. func_append objs " $arg" ;; *.lo) # A libtool-controlled object. # Check to see that this really is a libtool object. if func_lalib_unsafe_p "$arg"; then pic_object= non_pic_object= # Read the .lo file func_source "$arg" if test -z "$pic_object" || test -z "$non_pic_object" || test "$pic_object" = none && test "$non_pic_object" = none; then func_fatal_error "cannot find name of object for \`$arg'" fi # Extract subdirectory from the argument. func_dirname "$arg" "/" "" xdir="$func_dirname_result" if test "$pic_object" != none; then # Prepend the subdirectory the object is found in. pic_object="$xdir$pic_object" if test "$prev" = dlfiles; then if test "$build_libtool_libs" = yes && test "$dlopen_support" = yes; then func_append dlfiles " $pic_object" prev= continue else # If libtool objects are unsupported, then we need to preload. prev=dlprefiles fi fi # CHECK ME: I think I busted this. -Ossama if test "$prev" = dlprefiles; then # Preload the old-style object. func_append dlprefiles " $pic_object" prev= fi # A PIC object. func_append libobjs " $pic_object" arg="$pic_object" fi # Non-PIC object. if test "$non_pic_object" != none; then # Prepend the subdirectory the object is found in. non_pic_object="$xdir$non_pic_object" # A standard non-PIC object func_append non_pic_objects " $non_pic_object" if test -z "$pic_object" || test "$pic_object" = none ; then arg="$non_pic_object" fi else # If the PIC object exists, use it instead. # $xdir was prepended to $pic_object above. non_pic_object="$pic_object" func_append non_pic_objects " $non_pic_object" fi else # Only an error if not doing a dry-run. if $opt_dry_run; then # Extract subdirectory from the argument. func_dirname "$arg" "/" "" xdir="$func_dirname_result" func_lo2o "$arg" pic_object=$xdir$objdir/$func_lo2o_result non_pic_object=$xdir$func_lo2o_result func_append libobjs " $pic_object" func_append non_pic_objects " $non_pic_object" else func_fatal_error "\`$arg' is not a valid libtool object" fi fi ;; *.$libext) # An archive. func_append deplibs " $arg" func_append old_deplibs " $arg" continue ;; *.la) # A libtool-controlled library. func_resolve_sysroot "$arg" if test "$prev" = dlfiles; then # This library was specified with -dlopen. func_append dlfiles " $func_resolve_sysroot_result" prev= elif test "$prev" = dlprefiles; then # The library was specified with -dlpreopen. func_append dlprefiles " $func_resolve_sysroot_result" prev= else func_append deplibs " $func_resolve_sysroot_result" fi continue ;; # Some other compiler argument. *) # Unknown arguments in both finalize_command and compile_command need # to be aesthetically quoted because they are evaled later. func_quote_for_eval "$arg" arg="$func_quote_for_eval_result" ;; esac # arg # Now actually substitute the argument into the commands. if test -n "$arg"; then func_append compile_command " $arg" func_append finalize_command " $arg" fi done # argument parsing loop test -n "$prev" && \ func_fatal_help "the \`$prevarg' option requires an argument" if test "$export_dynamic" = yes && test -n "$export_dynamic_flag_spec"; then eval arg=\"$export_dynamic_flag_spec\" func_append compile_command " $arg" func_append finalize_command " $arg" fi oldlibs= # calculate the name of the file, without its directory func_basename "$output" outputname="$func_basename_result" libobjs_save="$libobjs" if test -n "$shlibpath_var"; then # get the directories listed in $shlibpath_var eval shlib_search_path=\`\$ECHO \"\${$shlibpath_var}\" \| \$SED \'s/:/ /g\'\` else shlib_search_path= fi eval sys_lib_search_path=\"$sys_lib_search_path_spec\" eval sys_lib_dlsearch_path=\"$sys_lib_dlsearch_path_spec\" func_dirname "$output" "/" "" output_objdir="$func_dirname_result$objdir" func_to_tool_file "$output_objdir/" tool_output_objdir=$func_to_tool_file_result # Create the object directory. func_mkdir_p "$output_objdir" # Determine the type of output case $output in "") func_fatal_help "you must specify an output file" ;; *.$libext) linkmode=oldlib ;; *.lo | *.$objext) linkmode=obj ;; *.la) linkmode=lib ;; *) linkmode=prog ;; # Anything else should be a program. esac specialdeplibs= libs= # Find all interdependent deplibs by searching for libraries # that are linked more than once (e.g. -la -lb -la) for deplib in $deplibs; do if $opt_preserve_dup_deps ; then case "$libs " in *" $deplib "*) func_append specialdeplibs " $deplib" ;; esac fi func_append libs " $deplib" done if test "$linkmode" = lib; then libs="$predeps $libs $compiler_lib_search_path $postdeps" # Compute libraries that are listed more than once in $predeps # $postdeps and mark them as special (i.e., whose duplicates are # not to be eliminated). pre_post_deps= if $opt_duplicate_compiler_generated_deps; then for pre_post_dep in $predeps $postdeps; do case "$pre_post_deps " in *" $pre_post_dep "*) func_append specialdeplibs " $pre_post_deps" ;; esac func_append pre_post_deps " $pre_post_dep" done fi pre_post_deps= fi deplibs= newdependency_libs= newlib_search_path= need_relink=no # whether we're linking any uninstalled libtool libraries notinst_deplibs= # not-installed libtool libraries notinst_path= # paths that contain not-installed libtool libraries case $linkmode in lib) passes="conv dlpreopen link" for file in $dlfiles $dlprefiles; do case $file in *.la) ;; *) func_fatal_help "libraries can \`-dlopen' only libtool libraries: $file" ;; esac done ;; prog) compile_deplibs= finalize_deplibs= alldeplibs=no newdlfiles= newdlprefiles= passes="conv scan dlopen dlpreopen link" ;; *) passes="conv" ;; esac for pass in $passes; do # The preopen pass in lib mode reverses $deplibs; put it back here # so that -L comes before libs that need it for instance... if test "$linkmode,$pass" = "lib,link"; then ## FIXME: Find the place where the list is rebuilt in the wrong ## order, and fix it there properly tmp_deplibs= for deplib in $deplibs; do tmp_deplibs="$deplib $tmp_deplibs" done deplibs="$tmp_deplibs" fi if test "$linkmode,$pass" = "lib,link" || test "$linkmode,$pass" = "prog,scan"; then libs="$deplibs" deplibs= fi if test "$linkmode" = prog; then case $pass in dlopen) libs="$dlfiles" ;; dlpreopen) libs="$dlprefiles" ;; link) libs="$deplibs %DEPLIBS%" test "X$link_all_deplibs" != Xno && libs="$libs $dependency_libs" ;; esac fi if test "$linkmode,$pass" = "lib,dlpreopen"; then # Collect and forward deplibs of preopened libtool libs for lib in $dlprefiles; do # Ignore non-libtool-libs dependency_libs= func_resolve_sysroot "$lib" case $lib in *.la) func_source "$func_resolve_sysroot_result" ;; esac # Collect preopened libtool deplibs, except any this library # has declared as weak libs for deplib in $dependency_libs; do func_basename "$deplib" deplib_base=$func_basename_result case " $weak_libs " in *" $deplib_base "*) ;; *) func_append deplibs " $deplib" ;; esac done done libs="$dlprefiles" fi if test "$pass" = dlopen; then # Collect dlpreopened libraries save_deplibs="$deplibs" deplibs= fi for deplib in $libs; do lib= found=no case $deplib in -mt|-mthreads|-kthread|-Kthread|-pthread|-pthreads|--thread-safe \ |-threads|-fopenmp|-openmp|-mp|-xopenmp|-omp|-qsmp=*) if test "$linkmode,$pass" = "prog,link"; then compile_deplibs="$deplib $compile_deplibs" finalize_deplibs="$deplib $finalize_deplibs" else func_append compiler_flags " $deplib" if test "$linkmode" = lib ; then case "$new_inherited_linker_flags " in *" $deplib "*) ;; * ) func_append new_inherited_linker_flags " $deplib" ;; esac fi fi continue ;; -l*) if test "$linkmode" != lib && test "$linkmode" != prog; then func_warning "\`-l' is ignored for archives/objects" continue fi func_stripname '-l' '' "$deplib" name=$func_stripname_result if test "$linkmode" = lib; then searchdirs="$newlib_search_path $lib_search_path $compiler_lib_search_dirs $sys_lib_search_path $shlib_search_path" else searchdirs="$newlib_search_path $lib_search_path $sys_lib_search_path $shlib_search_path" fi for searchdir in $searchdirs; do for search_ext in .la $std_shrext .so .a; do # Search the libtool library lib="$searchdir/lib${name}${search_ext}" if test -f "$lib"; then if test "$search_ext" = ".la"; then found=yes else found=no fi break 2 fi done done if test "$found" != yes; then # deplib doesn't seem to be a libtool library if test "$linkmode,$pass" = "prog,link"; then compile_deplibs="$deplib $compile_deplibs" finalize_deplibs="$deplib $finalize_deplibs" else deplibs="$deplib $deplibs" test "$linkmode" = lib && newdependency_libs="$deplib $newdependency_libs" fi continue else # deplib is a libtool library # If $allow_libtool_libs_with_static_runtimes && $deplib is a stdlib, # We need to do some special things here, and not later. if test "X$allow_libtool_libs_with_static_runtimes" = "Xyes" ; then case " $predeps $postdeps " in *" $deplib "*) if func_lalib_p "$lib"; then library_names= old_library= func_source "$lib" for l in $old_library $library_names; do ll="$l" done if test "X$ll" = "X$old_library" ; then # only static version available found=no func_dirname "$lib" "" "." ladir="$func_dirname_result" lib=$ladir/$old_library if test "$linkmode,$pass" = "prog,link"; then compile_deplibs="$deplib $compile_deplibs" finalize_deplibs="$deplib $finalize_deplibs" else deplibs="$deplib $deplibs" test "$linkmode" = lib && newdependency_libs="$deplib $newdependency_libs" fi continue fi fi ;; *) ;; esac fi fi ;; # -l *.ltframework) if test "$linkmode,$pass" = "prog,link"; then compile_deplibs="$deplib $compile_deplibs" finalize_deplibs="$deplib $finalize_deplibs" else deplibs="$deplib $deplibs" if test "$linkmode" = lib ; then case "$new_inherited_linker_flags " in *" $deplib "*) ;; * ) func_append new_inherited_linker_flags " $deplib" ;; esac fi fi continue ;; -L*) case $linkmode in lib) deplibs="$deplib $deplibs" test "$pass" = conv && continue newdependency_libs="$deplib $newdependency_libs" func_stripname '-L' '' "$deplib" func_resolve_sysroot "$func_stripname_result" func_append newlib_search_path " $func_resolve_sysroot_result" ;; prog) if test "$pass" = conv; then deplibs="$deplib $deplibs" continue fi if test "$pass" = scan; then deplibs="$deplib $deplibs" else compile_deplibs="$deplib $compile_deplibs" finalize_deplibs="$deplib $finalize_deplibs" fi func_stripname '-L' '' "$deplib" func_resolve_sysroot "$func_stripname_result" func_append newlib_search_path " $func_resolve_sysroot_result" ;; *) func_warning "\`-L' is ignored for archives/objects" ;; esac # linkmode continue ;; # -L -R*) if test "$pass" = link; then func_stripname '-R' '' "$deplib" func_resolve_sysroot "$func_stripname_result" dir=$func_resolve_sysroot_result # Make sure the xrpath contains only unique directories. case "$xrpath " in *" $dir "*) ;; *) func_append xrpath " $dir" ;; esac fi deplibs="$deplib $deplibs" continue ;; *.la) func_resolve_sysroot "$deplib" lib=$func_resolve_sysroot_result ;; *.$libext) if test "$pass" = conv; then deplibs="$deplib $deplibs" continue fi case $linkmode in lib) # Linking convenience modules into shared libraries is allowed, # but linking other static libraries is non-portable. case " $dlpreconveniencelibs " in *" $deplib "*) ;; *) valid_a_lib=no case $deplibs_check_method in match_pattern*) set dummy $deplibs_check_method; shift match_pattern_regex=`expr "$deplibs_check_method" : "$1 \(.*\)"` if eval "\$ECHO \"$deplib\"" 2>/dev/null | $SED 10q \ | $EGREP "$match_pattern_regex" > /dev/null; then valid_a_lib=yes fi ;; pass_all) valid_a_lib=yes ;; esac if test "$valid_a_lib" != yes; then echo $ECHO "*** Warning: Trying to link with static lib archive $deplib." echo "*** I have the capability to make that library automatically link in when" echo "*** you link to this library. But I can only do this if you have a" echo "*** shared version of the library, which you do not appear to have" echo "*** because the file extensions .$libext of this argument makes me believe" echo "*** that it is just a static archive that I should not use here." else echo $ECHO "*** Warning: Linking the shared library $output against the" $ECHO "*** static library $deplib is not portable!" deplibs="$deplib $deplibs" fi ;; esac continue ;; prog) if test "$pass" != link; then deplibs="$deplib $deplibs" else compile_deplibs="$deplib $compile_deplibs" finalize_deplibs="$deplib $finalize_deplibs" fi continue ;; esac # linkmode ;; # *.$libext *.lo | *.$objext) if test "$pass" = conv; then deplibs="$deplib $deplibs" elif test "$linkmode" = prog; then if test "$pass" = dlpreopen || test "$dlopen_support" != yes || test "$build_libtool_libs" = no; then # If there is no dlopen support or we're linking statically, # we need to preload. func_append newdlprefiles " $deplib" compile_deplibs="$deplib $compile_deplibs" finalize_deplibs="$deplib $finalize_deplibs" else func_append newdlfiles " $deplib" fi fi continue ;; %DEPLIBS%) alldeplibs=yes continue ;; esac # case $deplib if test "$found" = yes || test -f "$lib"; then : else func_fatal_error "cannot find the library \`$lib' or unhandled argument \`$deplib'" fi # Check to see that this really is a libtool archive. func_lalib_unsafe_p "$lib" \ || func_fatal_error "\`$lib' is not a valid libtool archive" func_dirname "$lib" "" "." ladir="$func_dirname_result" dlname= dlopen= dlpreopen= libdir= library_names= old_library= inherited_linker_flags= # If the library was installed with an old release of libtool, # it will not redefine variables installed, or shouldnotlink installed=yes shouldnotlink=no avoidtemprpath= # Read the .la file func_source "$lib" # Convert "-framework foo" to "foo.ltframework" if test -n "$inherited_linker_flags"; then tmp_inherited_linker_flags=`$ECHO "$inherited_linker_flags" | $SED 's/-framework \([^ $]*\)/\1.ltframework/g'` for tmp_inherited_linker_flag in $tmp_inherited_linker_flags; do case " $new_inherited_linker_flags " in *" $tmp_inherited_linker_flag "*) ;; *) func_append new_inherited_linker_flags " $tmp_inherited_linker_flag";; esac done fi dependency_libs=`$ECHO " $dependency_libs" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'` if test "$linkmode,$pass" = "lib,link" || test "$linkmode,$pass" = "prog,scan" || { test "$linkmode" != prog && test "$linkmode" != lib; }; then test -n "$dlopen" && func_append dlfiles " $dlopen" test -n "$dlpreopen" && func_append dlprefiles " $dlpreopen" fi if test "$pass" = conv; then # Only check for convenience libraries deplibs="$lib $deplibs" if test -z "$libdir"; then if test -z "$old_library"; then func_fatal_error "cannot find name of link library for \`$lib'" fi # It is a libtool convenience library, so add in its objects. func_append convenience " $ladir/$objdir/$old_library" func_append old_convenience " $ladir/$objdir/$old_library" tmp_libs= for deplib in $dependency_libs; do deplibs="$deplib $deplibs" if $opt_preserve_dup_deps ; then case "$tmp_libs " in *" $deplib "*) func_append specialdeplibs " $deplib" ;; esac fi func_append tmp_libs " $deplib" done elif test "$linkmode" != prog && test "$linkmode" != lib; then func_fatal_error "\`$lib' is not a convenience library" fi continue fi # $pass = conv # Get the name of the library we link against. linklib= if test -n "$old_library" && { test "$prefer_static_libs" = yes || test "$prefer_static_libs,$installed" = "built,no"; }; then linklib=$old_library else for l in $old_library $library_names; do linklib="$l" done fi if test -z "$linklib"; then func_fatal_error "cannot find name of link library for \`$lib'" fi # This library was specified with -dlopen. if test "$pass" = dlopen; then if test -z "$libdir"; then func_fatal_error "cannot -dlopen a convenience library: \`$lib'" fi if test -z "$dlname" || test "$dlopen_support" != yes || test "$build_libtool_libs" = no; then # If there is no dlname, no dlopen support or we're linking # statically, we need to preload. We also need to preload any # dependent libraries so libltdl's deplib preloader doesn't # bomb out in the load deplibs phase. func_append dlprefiles " $lib $dependency_libs" else func_append newdlfiles " $lib" fi continue fi # $pass = dlopen # We need an absolute path. case $ladir in [\\/]* | [A-Za-z]:[\\/]*) abs_ladir="$ladir" ;; *) abs_ladir=`cd "$ladir" && pwd` if test -z "$abs_ladir"; then func_warning "cannot determine absolute directory name of \`$ladir'" func_warning "passing it literally to the linker, although it might fail" abs_ladir="$ladir" fi ;; esac func_basename "$lib" laname="$func_basename_result" # Find the relevant object directory and library name. if test "X$installed" = Xyes; then if test ! -f "$lt_sysroot$libdir/$linklib" && test -f "$abs_ladir/$linklib"; then func_warning "library \`$lib' was moved." dir="$ladir" absdir="$abs_ladir" libdir="$abs_ladir" else dir="$lt_sysroot$libdir" absdir="$lt_sysroot$libdir" fi test "X$hardcode_automatic" = Xyes && avoidtemprpath=yes else if test ! -f "$ladir/$objdir/$linklib" && test -f "$abs_ladir/$linklib"; then dir="$ladir" absdir="$abs_ladir" # Remove this search path later func_append notinst_path " $abs_ladir" else dir="$ladir/$objdir" absdir="$abs_ladir/$objdir" # Remove this search path later func_append notinst_path " $abs_ladir" fi fi # $installed = yes func_stripname 'lib' '.la' "$laname" name=$func_stripname_result # This library was specified with -dlpreopen. if test "$pass" = dlpreopen; then if test -z "$libdir" && test "$linkmode" = prog; then func_fatal_error "only libraries may -dlpreopen a convenience library: \`$lib'" fi case "$host" in # special handling for platforms with PE-DLLs. *cygwin* | *mingw* | *cegcc* ) # Linker will automatically link against shared library if both # static and shared are present. Therefore, ensure we extract # symbols from the import library if a shared library is present # (otherwise, the dlopen module name will be incorrect). We do # this by putting the import library name into $newdlprefiles. # We recover the dlopen module name by 'saving' the la file # name in a special purpose variable, and (later) extracting the # dlname from the la file. if test -n "$dlname"; then func_tr_sh "$dir/$linklib" eval "libfile_$func_tr_sh_result=\$abs_ladir/\$laname" func_append newdlprefiles " $dir/$linklib" else func_append newdlprefiles " $dir/$old_library" # Keep a list of preopened convenience libraries to check # that they are being used correctly in the link pass. test -z "$libdir" && \ func_append dlpreconveniencelibs " $dir/$old_library" fi ;; * ) # Prefer using a static library (so that no silly _DYNAMIC symbols # are required to link). if test -n "$old_library"; then func_append newdlprefiles " $dir/$old_library" # Keep a list of preopened convenience libraries to check # that they are being used correctly in the link pass. test -z "$libdir" && \ func_append dlpreconveniencelibs " $dir/$old_library" # Otherwise, use the dlname, so that lt_dlopen finds it. elif test -n "$dlname"; then func_append newdlprefiles " $dir/$dlname" else func_append newdlprefiles " $dir/$linklib" fi ;; esac fi # $pass = dlpreopen if test -z "$libdir"; then # Link the convenience library if test "$linkmode" = lib; then deplibs="$dir/$old_library $deplibs" elif test "$linkmode,$pass" = "prog,link"; then compile_deplibs="$dir/$old_library $compile_deplibs" finalize_deplibs="$dir/$old_library $finalize_deplibs" else deplibs="$lib $deplibs" # used for prog,scan pass fi continue fi if test "$linkmode" = prog && test "$pass" != link; then func_append newlib_search_path " $ladir" deplibs="$lib $deplibs" linkalldeplibs=no if test "$link_all_deplibs" != no || test -z "$library_names" || test "$build_libtool_libs" = no; then linkalldeplibs=yes fi tmp_libs= for deplib in $dependency_libs; do case $deplib in -L*) func_stripname '-L' '' "$deplib" func_resolve_sysroot "$func_stripname_result" func_append newlib_search_path " $func_resolve_sysroot_result" ;; esac # Need to link against all dependency_libs? if test "$linkalldeplibs" = yes; then deplibs="$deplib $deplibs" else # Need to hardcode shared library paths # or/and link against static libraries newdependency_libs="$deplib $newdependency_libs" fi if $opt_preserve_dup_deps ; then case "$tmp_libs " in *" $deplib "*) func_append specialdeplibs " $deplib" ;; esac fi func_append tmp_libs " $deplib" done # for deplib continue fi # $linkmode = prog... if test "$linkmode,$pass" = "prog,link"; then if test -n "$library_names" && { { test "$prefer_static_libs" = no || test "$prefer_static_libs,$installed" = "built,yes"; } || test -z "$old_library"; }; then # We need to hardcode the library path if test -n "$shlibpath_var" && test -z "$avoidtemprpath" ; then # Make sure the rpath contains only unique directories. case "$temp_rpath:" in *"$absdir:"*) ;; *) func_append temp_rpath "$absdir:" ;; esac fi # Hardcode the library path. # Skip directories that are in the system default run-time # search path. case " $sys_lib_dlsearch_path " in *" $absdir "*) ;; *) case "$compile_rpath " in *" $absdir "*) ;; *) func_append compile_rpath " $absdir" ;; esac ;; esac case " $sys_lib_dlsearch_path " in *" $libdir "*) ;; *) case "$finalize_rpath " in *" $libdir "*) ;; *) func_append finalize_rpath " $libdir" ;; esac ;; esac fi # $linkmode,$pass = prog,link... if test "$alldeplibs" = yes && { test "$deplibs_check_method" = pass_all || { test "$build_libtool_libs" = yes && test -n "$library_names"; }; }; then # We only need to search for static libraries continue fi fi link_static=no # Whether the deplib will be linked statically use_static_libs=$prefer_static_libs if test "$use_static_libs" = built && test "$installed" = yes; then use_static_libs=no fi if test -n "$library_names" && { test "$use_static_libs" = no || test -z "$old_library"; }; then case $host in *cygwin* | *mingw* | *cegcc*) # No point in relinking DLLs because paths are not encoded func_append notinst_deplibs " $lib" need_relink=no ;; *) if test "$installed" = no; then func_append notinst_deplibs " $lib" need_relink=yes fi ;; esac # This is a shared library # Warn about portability, can't link against -module's on some # systems (darwin). Don't bleat about dlopened modules though! dlopenmodule="" for dlpremoduletest in $dlprefiles; do if test "X$dlpremoduletest" = "X$lib"; then dlopenmodule="$dlpremoduletest" break fi done if test -z "$dlopenmodule" && test "$shouldnotlink" = yes && test "$pass" = link; then echo if test "$linkmode" = prog; then $ECHO "*** Warning: Linking the executable $output against the loadable module" else $ECHO "*** Warning: Linking the shared library $output against the loadable module" fi $ECHO "*** $linklib is not portable!" fi if test "$linkmode" = lib && test "$hardcode_into_libs" = yes; then # Hardcode the library path. # Skip directories that are in the system default run-time # search path. case " $sys_lib_dlsearch_path " in *" $absdir "*) ;; *) case "$compile_rpath " in *" $absdir "*) ;; *) func_append compile_rpath " $absdir" ;; esac ;; esac case " $sys_lib_dlsearch_path " in *" $libdir "*) ;; *) case "$finalize_rpath " in *" $libdir "*) ;; *) func_append finalize_rpath " $libdir" ;; esac ;; esac fi if test -n "$old_archive_from_expsyms_cmds"; then # figure out the soname set dummy $library_names shift realname="$1" shift libname=`eval "\\$ECHO \"$libname_spec\""` # use dlname if we got it. it's perfectly good, no? if test -n "$dlname"; then soname="$dlname" elif test -n "$soname_spec"; then # bleh windows case $host in *cygwin* | mingw* | *cegcc*) func_arith $current - $age major=$func_arith_result versuffix="-$major" ;; esac eval soname=\"$soname_spec\" else soname="$realname" fi # Make a new name for the extract_expsyms_cmds to use soroot="$soname" func_basename "$soroot" soname="$func_basename_result" func_stripname 'lib' '.dll' "$soname" newlib=libimp-$func_stripname_result.a # If the library has no export list, then create one now if test -f "$output_objdir/$soname-def"; then : else func_verbose "extracting exported symbol list from \`$soname'" func_execute_cmds "$extract_expsyms_cmds" 'exit $?' fi # Create $newlib if test -f "$output_objdir/$newlib"; then :; else func_verbose "generating import library for \`$soname'" func_execute_cmds "$old_archive_from_expsyms_cmds" 'exit $?' fi # make sure the library variables are pointing to the new library dir=$output_objdir linklib=$newlib fi # test -n "$old_archive_from_expsyms_cmds" if test "$linkmode" = prog || test "$opt_mode" != relink; then add_shlibpath= add_dir= add= lib_linked=yes case $hardcode_action in immediate | unsupported) if test "$hardcode_direct" = no; then add="$dir/$linklib" case $host in *-*-sco3.2v5.0.[024]*) add_dir="-L$dir" ;; *-*-sysv4*uw2*) add_dir="-L$dir" ;; *-*-sysv5OpenUNIX* | *-*-sysv5UnixWare7.[01].[10]* | \ *-*-unixware7*) add_dir="-L$dir" ;; *-*-darwin* ) # if the lib is a (non-dlopened) module then we can not # link against it, someone is ignoring the earlier warnings if /usr/bin/file -L $add 2> /dev/null | $GREP ": [^:]* bundle" >/dev/null ; then if test "X$dlopenmodule" != "X$lib"; then $ECHO "*** Warning: lib $linklib is a module, not a shared library" if test -z "$old_library" ; then echo echo "*** And there doesn't seem to be a static archive available" echo "*** The link will probably fail, sorry" else add="$dir/$old_library" fi elif test -n "$old_library"; then add="$dir/$old_library" fi fi esac elif test "$hardcode_minus_L" = no; then case $host in *-*-sunos*) add_shlibpath="$dir" ;; esac add_dir="-L$dir" add="-l$name" elif test "$hardcode_shlibpath_var" = no; then add_shlibpath="$dir" add="-l$name" else lib_linked=no fi ;; relink) if test "$hardcode_direct" = yes && test "$hardcode_direct_absolute" = no; then add="$dir/$linklib" elif test "$hardcode_minus_L" = yes; then add_dir="-L$absdir" # Try looking first in the location we're being installed to. if test -n "$inst_prefix_dir"; then case $libdir in [\\/]*) func_append add_dir " -L$inst_prefix_dir$libdir" ;; esac fi add="-l$name" elif test "$hardcode_shlibpath_var" = yes; then add_shlibpath="$dir" add="-l$name" else lib_linked=no fi ;; *) lib_linked=no ;; esac if test "$lib_linked" != yes; then func_fatal_configuration "unsupported hardcode properties" fi if test -n "$add_shlibpath"; then case :$compile_shlibpath: in *":$add_shlibpath:"*) ;; *) func_append compile_shlibpath "$add_shlibpath:" ;; esac fi if test "$linkmode" = prog; then test -n "$add_dir" && compile_deplibs="$add_dir $compile_deplibs" test -n "$add" && compile_deplibs="$add $compile_deplibs" else test -n "$add_dir" && deplibs="$add_dir $deplibs" test -n "$add" && deplibs="$add $deplibs" if test "$hardcode_direct" != yes && test "$hardcode_minus_L" != yes && test "$hardcode_shlibpath_var" = yes; then case :$finalize_shlibpath: in *":$libdir:"*) ;; *) func_append finalize_shlibpath "$libdir:" ;; esac fi fi fi if test "$linkmode" = prog || test "$opt_mode" = relink; then add_shlibpath= add_dir= add= # Finalize command for both is simple: just hardcode it. if test "$hardcode_direct" = yes && test "$hardcode_direct_absolute" = no; then add="$libdir/$linklib" elif test "$hardcode_minus_L" = yes; then add_dir="-L$libdir" add="-l$name" elif test "$hardcode_shlibpath_var" = yes; then case :$finalize_shlibpath: in *":$libdir:"*) ;; *) func_append finalize_shlibpath "$libdir:" ;; esac add="-l$name" elif test "$hardcode_automatic" = yes; then if test -n "$inst_prefix_dir" && test -f "$inst_prefix_dir$libdir/$linklib" ; then add="$inst_prefix_dir$libdir/$linklib" else add="$libdir/$linklib" fi else # We cannot seem to hardcode it, guess we'll fake it. add_dir="-L$libdir" # Try looking first in the location we're being installed to. if test -n "$inst_prefix_dir"; then case $libdir in [\\/]*) func_append add_dir " -L$inst_prefix_dir$libdir" ;; esac fi add="-l$name" fi if test "$linkmode" = prog; then test -n "$add_dir" && finalize_deplibs="$add_dir $finalize_deplibs" test -n "$add" && finalize_deplibs="$add $finalize_deplibs" else test -n "$add_dir" && deplibs="$add_dir $deplibs" test -n "$add" && deplibs="$add $deplibs" fi fi elif test "$linkmode" = prog; then # Here we assume that one of hardcode_direct or hardcode_minus_L # is not unsupported. This is valid on all known static and # shared platforms. if test "$hardcode_direct" != unsupported; then test -n "$old_library" && linklib="$old_library" compile_deplibs="$dir/$linklib $compile_deplibs" finalize_deplibs="$dir/$linklib $finalize_deplibs" else compile_deplibs="-l$name -L$dir $compile_deplibs" finalize_deplibs="-l$name -L$dir $finalize_deplibs" fi elif test "$build_libtool_libs" = yes; then # Not a shared library if test "$deplibs_check_method" != pass_all; then # We're trying link a shared library against a static one # but the system doesn't support it. # Just print a warning and add the library to dependency_libs so # that the program can be linked against the static library. echo $ECHO "*** Warning: This system can not link to static lib archive $lib." echo "*** I have the capability to make that library automatically link in when" echo "*** you link to this library. But I can only do this if you have a" echo "*** shared version of the library, which you do not appear to have." if test "$module" = yes; then echo "*** But as you try to build a module library, libtool will still create " echo "*** a static module, that should work as long as the dlopening application" echo "*** is linked with the -dlopen flag to resolve symbols at runtime." if test -z "$global_symbol_pipe"; then echo echo "*** However, this would only work if libtool was able to extract symbol" echo "*** lists from a program, using \`nm' or equivalent, but libtool could" echo "*** not find such a program. So, this module is probably useless." echo "*** \`nm' from GNU binutils and a full rebuild may help." fi if test "$build_old_libs" = no; then build_libtool_libs=module build_old_libs=yes else build_libtool_libs=no fi fi else deplibs="$dir/$old_library $deplibs" link_static=yes fi fi # link shared/static library? if test "$linkmode" = lib; then if test -n "$dependency_libs" && { test "$hardcode_into_libs" != yes || test "$build_old_libs" = yes || test "$link_static" = yes; }; then # Extract -R from dependency_libs temp_deplibs= for libdir in $dependency_libs; do case $libdir in -R*) func_stripname '-R' '' "$libdir" temp_xrpath=$func_stripname_result case " $xrpath " in *" $temp_xrpath "*) ;; *) func_append xrpath " $temp_xrpath";; esac;; *) func_append temp_deplibs " $libdir";; esac done dependency_libs="$temp_deplibs" fi func_append newlib_search_path " $absdir" # Link against this library test "$link_static" = no && newdependency_libs="$abs_ladir/$laname $newdependency_libs" # ... and its dependency_libs tmp_libs= for deplib in $dependency_libs; do newdependency_libs="$deplib $newdependency_libs" case $deplib in -L*) func_stripname '-L' '' "$deplib" func_resolve_sysroot "$func_stripname_result";; *) func_resolve_sysroot "$deplib" ;; esac if $opt_preserve_dup_deps ; then case "$tmp_libs " in *" $func_resolve_sysroot_result "*) func_append specialdeplibs " $func_resolve_sysroot_result" ;; esac fi func_append tmp_libs " $func_resolve_sysroot_result" done if test "$link_all_deplibs" != no; then # Add the search paths of all dependency libraries for deplib in $dependency_libs; do path= case $deplib in -L*) path="$deplib" ;; *.la) func_resolve_sysroot "$deplib" deplib=$func_resolve_sysroot_result func_dirname "$deplib" "" "." dir=$func_dirname_result # We need an absolute path. case $dir in [\\/]* | [A-Za-z]:[\\/]*) absdir="$dir" ;; *) absdir=`cd "$dir" && pwd` if test -z "$absdir"; then func_warning "cannot determine absolute directory name of \`$dir'" absdir="$dir" fi ;; esac if $GREP "^installed=no" $deplib > /dev/null; then case $host in *-*-darwin*) depdepl= eval deplibrary_names=`${SED} -n -e 's/^library_names=\(.*\)$/\1/p' $deplib` if test -n "$deplibrary_names" ; then for tmp in $deplibrary_names ; do depdepl=$tmp done if test -f "$absdir/$objdir/$depdepl" ; then depdepl="$absdir/$objdir/$depdepl" darwin_install_name=`${OTOOL} -L $depdepl | awk '{if (NR == 2) {print $1;exit}}'` if test -z "$darwin_install_name"; then darwin_install_name=`${OTOOL64} -L $depdepl | awk '{if (NR == 2) {print $1;exit}}'` fi func_append compiler_flags " ${wl}-dylib_file ${wl}${darwin_install_name}:${depdepl}" func_append linker_flags " -dylib_file ${darwin_install_name}:${depdepl}" path= fi fi ;; *) path="-L$absdir/$objdir" ;; esac else eval libdir=`${SED} -n -e 's/^libdir=\(.*\)$/\1/p' $deplib` test -z "$libdir" && \ func_fatal_error "\`$deplib' is not a valid libtool archive" test "$absdir" != "$libdir" && \ func_warning "\`$deplib' seems to be moved" path="-L$absdir" fi ;; esac case " $deplibs " in *" $path "*) ;; *) deplibs="$path $deplibs" ;; esac done fi # link_all_deplibs != no fi # linkmode = lib done # for deplib in $libs if test "$pass" = link; then if test "$linkmode" = "prog"; then compile_deplibs="$new_inherited_linker_flags $compile_deplibs" finalize_deplibs="$new_inherited_linker_flags $finalize_deplibs" else compiler_flags="$compiler_flags "`$ECHO " $new_inherited_linker_flags" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'` fi fi dependency_libs="$newdependency_libs" if test "$pass" = dlpreopen; then # Link the dlpreopened libraries before other libraries for deplib in $save_deplibs; do deplibs="$deplib $deplibs" done fi if test "$pass" != dlopen; then if test "$pass" != conv; then # Make sure lib_search_path contains only unique directories. lib_search_path= for dir in $newlib_search_path; do case "$lib_search_path " in *" $dir "*) ;; *) func_append lib_search_path " $dir" ;; esac done newlib_search_path= fi if test "$linkmode,$pass" != "prog,link"; then vars="deplibs" else vars="compile_deplibs finalize_deplibs" fi for var in $vars dependency_libs; do # Add libraries to $var in reverse order eval tmp_libs=\"\$$var\" new_libs= for deplib in $tmp_libs; do # FIXME: Pedantically, this is the right thing to do, so # that some nasty dependency loop isn't accidentally # broken: #new_libs="$deplib $new_libs" # Pragmatically, this seems to cause very few problems in # practice: case $deplib in -L*) new_libs="$deplib $new_libs" ;; -R*) ;; *) # And here is the reason: when a library appears more # than once as an explicit dependence of a library, or # is implicitly linked in more than once by the # compiler, it is considered special, and multiple # occurrences thereof are not removed. Compare this # with having the same library being listed as a # dependency of multiple other libraries: in this case, # we know (pedantically, we assume) the library does not # need to be listed more than once, so we keep only the # last copy. This is not always right, but it is rare # enough that we require users that really mean to play # such unportable linking tricks to link the library # using -Wl,-lname, so that libtool does not consider it # for duplicate removal. case " $specialdeplibs " in *" $deplib "*) new_libs="$deplib $new_libs" ;; *) case " $new_libs " in *" $deplib "*) ;; *) new_libs="$deplib $new_libs" ;; esac ;; esac ;; esac done tmp_libs= for deplib in $new_libs; do case $deplib in -L*) case " $tmp_libs " in *" $deplib "*) ;; *) func_append tmp_libs " $deplib" ;; esac ;; *) func_append tmp_libs " $deplib" ;; esac done eval $var=\"$tmp_libs\" done # for var fi # Last step: remove runtime libs from dependency_libs # (they stay in deplibs) tmp_libs= for i in $dependency_libs ; do case " $predeps $postdeps $compiler_lib_search_path " in *" $i "*) i="" ;; esac if test -n "$i" ; then func_append tmp_libs " $i" fi done dependency_libs=$tmp_libs done # for pass if test "$linkmode" = prog; then dlfiles="$newdlfiles" fi if test "$linkmode" = prog || test "$linkmode" = lib; then dlprefiles="$newdlprefiles" fi case $linkmode in oldlib) if test -n "$dlfiles$dlprefiles" || test "$dlself" != no; then func_warning "\`-dlopen' is ignored for archives" fi case " $deplibs" in *\ -l* | *\ -L*) func_warning "\`-l' and \`-L' are ignored for archives" ;; esac test -n "$rpath" && \ func_warning "\`-rpath' is ignored for archives" test -n "$xrpath" && \ func_warning "\`-R' is ignored for archives" test -n "$vinfo" && \ func_warning "\`-version-info/-version-number' is ignored for archives" test -n "$release" && \ func_warning "\`-release' is ignored for archives" test -n "$export_symbols$export_symbols_regex" && \ func_warning "\`-export-symbols' is ignored for archives" # Now set the variables for building old libraries. build_libtool_libs=no oldlibs="$output" func_append objs "$old_deplibs" ;; lib) # Make sure we only generate libraries of the form `libNAME.la'. case $outputname in lib*) func_stripname 'lib' '.la' "$outputname" name=$func_stripname_result eval shared_ext=\"$shrext_cmds\" eval libname=\"$libname_spec\" ;; *) test "$module" = no && \ func_fatal_help "libtool library \`$output' must begin with \`lib'" if test "$need_lib_prefix" != no; then # Add the "lib" prefix for modules if required func_stripname '' '.la' "$outputname" name=$func_stripname_result eval shared_ext=\"$shrext_cmds\" eval libname=\"$libname_spec\" else func_stripname '' '.la' "$outputname" libname=$func_stripname_result fi ;; esac if test -n "$objs"; then if test "$deplibs_check_method" != pass_all; then func_fatal_error "cannot build libtool library \`$output' from non-libtool objects on this host:$objs" else echo $ECHO "*** Warning: Linking the shared library $output against the non-libtool" $ECHO "*** objects $objs is not portable!" func_append libobjs " $objs" fi fi test "$dlself" != no && \ func_warning "\`-dlopen self' is ignored for libtool libraries" set dummy $rpath shift test "$#" -gt 1 && \ func_warning "ignoring multiple \`-rpath's for a libtool library" install_libdir="$1" oldlibs= if test -z "$rpath"; then if test "$build_libtool_libs" = yes; then # Building a libtool convenience library. # Some compilers have problems with a `.al' extension so # convenience libraries should have the same extension an # archive normally would. oldlibs="$output_objdir/$libname.$libext $oldlibs" build_libtool_libs=convenience build_old_libs=yes fi test -n "$vinfo" && \ func_warning "\`-version-info/-version-number' is ignored for convenience libraries" test -n "$release" && \ func_warning "\`-release' is ignored for convenience libraries" else # Parse the version information argument. save_ifs="$IFS"; IFS=':' set dummy $vinfo 0 0 0 shift IFS="$save_ifs" test -n "$7" && \ func_fatal_help "too many parameters to \`-version-info'" # convert absolute version numbers to libtool ages # this retains compatibility with .la files and attempts # to make the code below a bit more comprehensible case $vinfo_number in yes) number_major="$1" number_minor="$2" number_revision="$3" # # There are really only two kinds -- those that # use the current revision as the major version # and those that subtract age and use age as # a minor version. But, then there is irix # which has an extra 1 added just for fun # case $version_type in # correct linux to gnu/linux during the next big refactor darwin|linux|osf|windows|none) func_arith $number_major + $number_minor current=$func_arith_result age="$number_minor" revision="$number_revision" ;; freebsd-aout|freebsd-elf|qnx|sunos) current="$number_major" revision="$number_minor" age="0" ;; irix|nonstopux) func_arith $number_major + $number_minor current=$func_arith_result age="$number_minor" revision="$number_minor" lt_irix_increment=no ;; *) func_fatal_configuration "$modename: unknown library version type \`$version_type'" ;; esac ;; no) current="$1" revision="$2" age="$3" ;; esac # Check that each of the things are valid numbers. case $current in 0|[1-9]|[1-9][0-9]|[1-9][0-9][0-9]|[1-9][0-9][0-9][0-9]|[1-9][0-9][0-9][0-9][0-9]) ;; *) func_error "CURRENT \`$current' must be a nonnegative integer" func_fatal_error "\`$vinfo' is not valid version information" ;; esac case $revision in 0|[1-9]|[1-9][0-9]|[1-9][0-9][0-9]|[1-9][0-9][0-9][0-9]|[1-9][0-9][0-9][0-9][0-9]) ;; *) func_error "REVISION \`$revision' must be a nonnegative integer" func_fatal_error "\`$vinfo' is not valid version information" ;; esac case $age in 0|[1-9]|[1-9][0-9]|[1-9][0-9][0-9]|[1-9][0-9][0-9][0-9]|[1-9][0-9][0-9][0-9][0-9]) ;; *) func_error "AGE \`$age' must be a nonnegative integer" func_fatal_error "\`$vinfo' is not valid version information" ;; esac if test "$age" -gt "$current"; then func_error "AGE \`$age' is greater than the current interface number \`$current'" func_fatal_error "\`$vinfo' is not valid version information" fi # Calculate the version variables. major= versuffix= verstring= case $version_type in none) ;; darwin) # Like Linux, but with the current version available in # verstring for coding it into the library header func_arith $current - $age major=.$func_arith_result versuffix="$major.$age.$revision" # Darwin ld doesn't like 0 for these options... func_arith $current + 1 minor_current=$func_arith_result xlcverstring="${wl}-compatibility_version ${wl}$minor_current ${wl}-current_version ${wl}$minor_current.$revision" verstring="-compatibility_version $minor_current -current_version $minor_current.$revision" ;; freebsd-aout) major=".$current" versuffix=".$current.$revision"; ;; freebsd-elf) major=".$current" versuffix=".$current" ;; irix | nonstopux) if test "X$lt_irix_increment" = "Xno"; then func_arith $current - $age else func_arith $current - $age + 1 fi major=$func_arith_result case $version_type in nonstopux) verstring_prefix=nonstopux ;; *) verstring_prefix=sgi ;; esac verstring="$verstring_prefix$major.$revision" # Add in all the interfaces that we are compatible with. loop=$revision while test "$loop" -ne 0; do func_arith $revision - $loop iface=$func_arith_result func_arith $loop - 1 loop=$func_arith_result verstring="$verstring_prefix$major.$iface:$verstring" done # Before this point, $major must not contain `.'. major=.$major versuffix="$major.$revision" ;; linux) # correct to gnu/linux during the next big refactor func_arith $current - $age major=.$func_arith_result versuffix="$major.$age.$revision" ;; osf) func_arith $current - $age major=.$func_arith_result versuffix=".$current.$age.$revision" verstring="$current.$age.$revision" # Add in all the interfaces that we are compatible with. loop=$age while test "$loop" -ne 0; do func_arith $current - $loop iface=$func_arith_result func_arith $loop - 1 loop=$func_arith_result verstring="$verstring:${iface}.0" done # Make executables depend on our current version. func_append verstring ":${current}.0" ;; qnx) major=".$current" versuffix=".$current" ;; sunos) major=".$current" versuffix=".$current.$revision" ;; windows) # Use '-' rather than '.', since we only want one # extension on DOS 8.3 filesystems. func_arith $current - $age major=$func_arith_result versuffix="-$major" ;; *) func_fatal_configuration "unknown library version type \`$version_type'" ;; esac # Clear the version info if we defaulted, and they specified a release. if test -z "$vinfo" && test -n "$release"; then major= case $version_type in darwin) # we can't check for "0.0" in archive_cmds due to quoting # problems, so we reset it completely verstring= ;; *) verstring="0.0" ;; esac if test "$need_version" = no; then versuffix= else versuffix=".0.0" fi fi # Remove version info from name if versioning should be avoided if test "$avoid_version" = yes && test "$need_version" = no; then major= versuffix= verstring="" fi # Check to see if the archive will have undefined symbols. if test "$allow_undefined" = yes; then if test "$allow_undefined_flag" = unsupported; then func_warning "undefined symbols not allowed in $host shared libraries" build_libtool_libs=no build_old_libs=yes fi else # Don't allow undefined symbols. allow_undefined_flag="$no_undefined_flag" fi fi func_generate_dlsyms "$libname" "$libname" "yes" func_append libobjs " $symfileobj" test "X$libobjs" = "X " && libobjs= if test "$opt_mode" != relink; then # Remove our outputs, but don't remove object files since they # may have been created when compiling PIC objects. removelist= tempremovelist=`$ECHO "$output_objdir/*"` for p in $tempremovelist; do case $p in *.$objext | *.gcno) ;; $output_objdir/$outputname | $output_objdir/$libname.* | $output_objdir/${libname}${release}.*) if test "X$precious_files_regex" != "X"; then if $ECHO "$p" | $EGREP -e "$precious_files_regex" >/dev/null 2>&1 then continue fi fi func_append removelist " $p" ;; *) ;; esac done test -n "$removelist" && \ func_show_eval "${RM}r \$removelist" fi # Now set the variables for building old libraries. if test "$build_old_libs" = yes && test "$build_libtool_libs" != convenience ; then func_append oldlibs " $output_objdir/$libname.$libext" # Transform .lo files to .o files. oldobjs="$objs "`$ECHO "$libobjs" | $SP2NL | $SED "/\.${libext}$/d; $lo2o" | $NL2SP` fi # Eliminate all temporary directories. #for path in $notinst_path; do # lib_search_path=`$ECHO "$lib_search_path " | $SED "s% $path % %g"` # deplibs=`$ECHO "$deplibs " | $SED "s% -L$path % %g"` # dependency_libs=`$ECHO "$dependency_libs " | $SED "s% -L$path % %g"` #done if test -n "$xrpath"; then # If the user specified any rpath flags, then add them. temp_xrpath= for libdir in $xrpath; do func_replace_sysroot "$libdir" func_append temp_xrpath " -R$func_replace_sysroot_result" case "$finalize_rpath " in *" $libdir "*) ;; *) func_append finalize_rpath " $libdir" ;; esac done if test "$hardcode_into_libs" != yes || test "$build_old_libs" = yes; then dependency_libs="$temp_xrpath $dependency_libs" fi fi # Make sure dlfiles contains only unique files that won't be dlpreopened old_dlfiles="$dlfiles" dlfiles= for lib in $old_dlfiles; do case " $dlprefiles $dlfiles " in *" $lib "*) ;; *) func_append dlfiles " $lib" ;; esac done # Make sure dlprefiles contains only unique files old_dlprefiles="$dlprefiles" dlprefiles= for lib in $old_dlprefiles; do case "$dlprefiles " in *" $lib "*) ;; *) func_append dlprefiles " $lib" ;; esac done if test "$build_libtool_libs" = yes; then if test -n "$rpath"; then case $host in *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-*-beos* | *-cegcc* | *-*-haiku*) # these systems don't actually have a c library (as such)! ;; *-*-rhapsody* | *-*-darwin1.[012]) # Rhapsody C library is in the System framework func_append deplibs " System.ltframework" ;; *-*-netbsd*) # Don't link with libc until the a.out ld.so is fixed. ;; *-*-openbsd* | *-*-freebsd* | *-*-dragonfly*) # Do not include libc due to us having libc/libc_r. ;; *-*-sco3.2v5* | *-*-sco5v6*) # Causes problems with __ctype ;; *-*-sysv4.2uw2* | *-*-sysv5* | *-*-unixware* | *-*-OpenUNIX*) # Compiler inserts libc in the correct place for threads to work ;; *) # Add libc to deplibs on all other systems if necessary. if test "$build_libtool_need_lc" = "yes"; then func_append deplibs " -lc" fi ;; esac fi # Transform deplibs into only deplibs that can be linked in shared. name_save=$name libname_save=$libname release_save=$release versuffix_save=$versuffix major_save=$major # I'm not sure if I'm treating the release correctly. I think # release should show up in the -l (ie -lgmp5) so we don't want to # add it in twice. Is that correct? release="" versuffix="" major="" newdeplibs= droppeddeps=no case $deplibs_check_method in pass_all) # Don't check for shared/static. Everything works. # This might be a little naive. We might want to check # whether the library exists or not. But this is on # osf3 & osf4 and I'm not really sure... Just # implementing what was already the behavior. newdeplibs=$deplibs ;; test_compile) # This code stresses the "libraries are programs" paradigm to its # limits. Maybe even breaks it. We compile a program, linking it # against the deplibs as a proxy for the library. Then we can check # whether they linked in statically or dynamically with ldd. $opt_dry_run || $RM conftest.c cat > conftest.c </dev/null` $nocaseglob else potential_libs=`ls $i/$libnameglob[.-]* 2>/dev/null` fi for potent_lib in $potential_libs; do # Follow soft links. if ls -lLd "$potent_lib" 2>/dev/null | $GREP " -> " >/dev/null; then continue fi # The statement above tries to avoid entering an # endless loop below, in case of cyclic links. # We might still enter an endless loop, since a link # loop can be closed while we follow links, # but so what? potlib="$potent_lib" while test -h "$potlib" 2>/dev/null; do potliblink=`ls -ld $potlib | ${SED} 's/.* -> //'` case $potliblink in [\\/]* | [A-Za-z]:[\\/]*) potlib="$potliblink";; *) potlib=`$ECHO "$potlib" | $SED 's,[^/]*$,,'`"$potliblink";; esac done if eval $file_magic_cmd \"\$potlib\" 2>/dev/null | $SED -e 10q | $EGREP "$file_magic_regex" > /dev/null; then func_append newdeplibs " $a_deplib" a_deplib="" break 2 fi done done fi if test -n "$a_deplib" ; then droppeddeps=yes echo $ECHO "*** Warning: linker path does not have real file for library $a_deplib." echo "*** I have the capability to make that library automatically link in when" echo "*** you link to this library. But I can only do this if you have a" echo "*** shared version of the library, which you do not appear to have" echo "*** because I did check the linker path looking for a file starting" if test -z "$potlib" ; then $ECHO "*** with $libname but no candidates were found. (...for file magic test)" else $ECHO "*** with $libname and none of the candidates passed a file format test" $ECHO "*** using a file magic. Last file checked: $potlib" fi fi ;; *) # Add a -L argument. func_append newdeplibs " $a_deplib" ;; esac done # Gone through all deplibs. ;; match_pattern*) set dummy $deplibs_check_method; shift match_pattern_regex=`expr "$deplibs_check_method" : "$1 \(.*\)"` for a_deplib in $deplibs; do case $a_deplib in -l*) func_stripname -l '' "$a_deplib" name=$func_stripname_result if test "X$allow_libtool_libs_with_static_runtimes" = "Xyes" ; then case " $predeps $postdeps " in *" $a_deplib "*) func_append newdeplibs " $a_deplib" a_deplib="" ;; esac fi if test -n "$a_deplib" ; then libname=`eval "\\$ECHO \"$libname_spec\""` for i in $lib_search_path $sys_lib_search_path $shlib_search_path; do potential_libs=`ls $i/$libname[.-]* 2>/dev/null` for potent_lib in $potential_libs; do potlib="$potent_lib" # see symlink-check above in file_magic test if eval "\$ECHO \"$potent_lib\"" 2>/dev/null | $SED 10q | \ $EGREP "$match_pattern_regex" > /dev/null; then func_append newdeplibs " $a_deplib" a_deplib="" break 2 fi done done fi if test -n "$a_deplib" ; then droppeddeps=yes echo $ECHO "*** Warning: linker path does not have real file for library $a_deplib." echo "*** I have the capability to make that library automatically link in when" echo "*** you link to this library. But I can only do this if you have a" echo "*** shared version of the library, which you do not appear to have" echo "*** because I did check the linker path looking for a file starting" if test -z "$potlib" ; then $ECHO "*** with $libname but no candidates were found. (...for regex pattern test)" else $ECHO "*** with $libname and none of the candidates passed a file format test" $ECHO "*** using a regex pattern. Last file checked: $potlib" fi fi ;; *) # Add a -L argument. func_append newdeplibs " $a_deplib" ;; esac done # Gone through all deplibs. ;; none | unknown | *) newdeplibs="" tmp_deplibs=`$ECHO " $deplibs" | $SED 's/ -lc$//; s/ -[LR][^ ]*//g'` if test "X$allow_libtool_libs_with_static_runtimes" = "Xyes" ; then for i in $predeps $postdeps ; do # can't use Xsed below, because $i might contain '/' tmp_deplibs=`$ECHO " $tmp_deplibs" | $SED "s,$i,,"` done fi case $tmp_deplibs in *[!\ \ ]*) echo if test "X$deplibs_check_method" = "Xnone"; then echo "*** Warning: inter-library dependencies are not supported in this platform." else echo "*** Warning: inter-library dependencies are not known to be supported." fi echo "*** All declared inter-library dependencies are being dropped." droppeddeps=yes ;; esac ;; esac versuffix=$versuffix_save major=$major_save release=$release_save libname=$libname_save name=$name_save case $host in *-*-rhapsody* | *-*-darwin1.[012]) # On Rhapsody replace the C library with the System framework newdeplibs=`$ECHO " $newdeplibs" | $SED 's/ -lc / System.ltframework /'` ;; esac if test "$droppeddeps" = yes; then if test "$module" = yes; then echo echo "*** Warning: libtool could not satisfy all declared inter-library" $ECHO "*** dependencies of module $libname. Therefore, libtool will create" echo "*** a static module, that should work as long as the dlopening" echo "*** application is linked with the -dlopen flag." if test -z "$global_symbol_pipe"; then echo echo "*** However, this would only work if libtool was able to extract symbol" echo "*** lists from a program, using \`nm' or equivalent, but libtool could" echo "*** not find such a program. So, this module is probably useless." echo "*** \`nm' from GNU binutils and a full rebuild may help." fi if test "$build_old_libs" = no; then oldlibs="$output_objdir/$libname.$libext" build_libtool_libs=module build_old_libs=yes else build_libtool_libs=no fi else echo "*** The inter-library dependencies that have been dropped here will be" echo "*** automatically added whenever a program is linked with this library" echo "*** or is declared to -dlopen it." if test "$allow_undefined" = no; then echo echo "*** Since this library must not contain undefined symbols," echo "*** because either the platform does not support them or" echo "*** it was explicitly requested with -no-undefined," echo "*** libtool will only create a static version of it." if test "$build_old_libs" = no; then oldlibs="$output_objdir/$libname.$libext" build_libtool_libs=module build_old_libs=yes else build_libtool_libs=no fi fi fi fi # Done checking deplibs! deplibs=$newdeplibs fi # Time to change all our "foo.ltframework" stuff back to "-framework foo" case $host in *-*-darwin*) newdeplibs=`$ECHO " $newdeplibs" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'` new_inherited_linker_flags=`$ECHO " $new_inherited_linker_flags" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'` deplibs=`$ECHO " $deplibs" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'` ;; esac # move library search paths that coincide with paths to not yet # installed libraries to the beginning of the library search list new_libs= for path in $notinst_path; do case " $new_libs " in *" -L$path/$objdir "*) ;; *) case " $deplibs " in *" -L$path/$objdir "*) func_append new_libs " -L$path/$objdir" ;; esac ;; esac done for deplib in $deplibs; do case $deplib in -L*) case " $new_libs " in *" $deplib "*) ;; *) func_append new_libs " $deplib" ;; esac ;; *) func_append new_libs " $deplib" ;; esac done deplibs="$new_libs" # All the library-specific variables (install_libdir is set above). library_names= old_library= dlname= # Test again, we may have decided not to build it any more if test "$build_libtool_libs" = yes; then # Remove ${wl} instances when linking with ld. # FIXME: should test the right _cmds variable. case $archive_cmds in *\$LD\ *) wl= ;; esac if test "$hardcode_into_libs" = yes; then # Hardcode the library paths hardcode_libdirs= dep_rpath= rpath="$finalize_rpath" test "$opt_mode" != relink && rpath="$compile_rpath$rpath" for libdir in $rpath; do if test -n "$hardcode_libdir_flag_spec"; then if test -n "$hardcode_libdir_separator"; then func_replace_sysroot "$libdir" libdir=$func_replace_sysroot_result if test -z "$hardcode_libdirs"; then hardcode_libdirs="$libdir" else # Just accumulate the unique libdirs. case $hardcode_libdir_separator$hardcode_libdirs$hardcode_libdir_separator in *"$hardcode_libdir_separator$libdir$hardcode_libdir_separator"*) ;; *) func_append hardcode_libdirs "$hardcode_libdir_separator$libdir" ;; esac fi else eval flag=\"$hardcode_libdir_flag_spec\" func_append dep_rpath " $flag" fi elif test -n "$runpath_var"; then case "$perm_rpath " in *" $libdir "*) ;; *) func_append perm_rpath " $libdir" ;; esac fi done # Substitute the hardcoded libdirs into the rpath. if test -n "$hardcode_libdir_separator" && test -n "$hardcode_libdirs"; then libdir="$hardcode_libdirs" eval "dep_rpath=\"$hardcode_libdir_flag_spec\"" fi if test -n "$runpath_var" && test -n "$perm_rpath"; then # We should set the runpath_var. rpath= for dir in $perm_rpath; do func_append rpath "$dir:" done eval "$runpath_var='$rpath\$$runpath_var'; export $runpath_var" fi test -n "$dep_rpath" && deplibs="$dep_rpath $deplibs" fi shlibpath="$finalize_shlibpath" test "$opt_mode" != relink && shlibpath="$compile_shlibpath$shlibpath" if test -n "$shlibpath"; then eval "$shlibpath_var='$shlibpath\$$shlibpath_var'; export $shlibpath_var" fi # Get the real and link names of the library. eval shared_ext=\"$shrext_cmds\" eval library_names=\"$library_names_spec\" set dummy $library_names shift realname="$1" shift if test -n "$soname_spec"; then eval soname=\"$soname_spec\" else soname="$realname" fi if test -z "$dlname"; then dlname=$soname fi lib="$output_objdir/$realname" linknames= for link do func_append linknames " $link" done # Use standard objects if they are pic test -z "$pic_flag" && libobjs=`$ECHO "$libobjs" | $SP2NL | $SED "$lo2o" | $NL2SP` test "X$libobjs" = "X " && libobjs= delfiles= if test -n "$export_symbols" && test -n "$include_expsyms"; then $opt_dry_run || cp "$export_symbols" "$output_objdir/$libname.uexp" export_symbols="$output_objdir/$libname.uexp" func_append delfiles " $export_symbols" fi orig_export_symbols= case $host_os in cygwin* | mingw* | cegcc*) if test -n "$export_symbols" && test -z "$export_symbols_regex"; then # exporting using user supplied symfile if test "x`$SED 1q $export_symbols`" != xEXPORTS; then # and it's NOT already a .def file. Must figure out # which of the given symbols are data symbols and tag # them as such. So, trigger use of export_symbols_cmds. # export_symbols gets reassigned inside the "prepare # the list of exported symbols" if statement, so the # include_expsyms logic still works. orig_export_symbols="$export_symbols" export_symbols= always_export_symbols=yes fi fi ;; esac # Prepare the list of exported symbols if test -z "$export_symbols"; then if test "$always_export_symbols" = yes || test -n "$export_symbols_regex"; then func_verbose "generating symbol list for \`$libname.la'" export_symbols="$output_objdir/$libname.exp" $opt_dry_run || $RM $export_symbols cmds=$export_symbols_cmds save_ifs="$IFS"; IFS='~' for cmd1 in $cmds; do IFS="$save_ifs" # Take the normal branch if the nm_file_list_spec branch # doesn't work or if tool conversion is not needed. case $nm_file_list_spec~$to_tool_file_cmd in *~func_convert_file_noop | *~func_convert_file_msys_to_w32 | ~*) try_normal_branch=yes eval cmd=\"$cmd1\" func_len " $cmd" len=$func_len_result ;; *) try_normal_branch=no ;; esac if test "$try_normal_branch" = yes \ && { test "$len" -lt "$max_cmd_len" \ || test "$max_cmd_len" -le -1; } then func_show_eval "$cmd" 'exit $?' skipped_export=false elif test -n "$nm_file_list_spec"; then func_basename "$output" output_la=$func_basename_result save_libobjs=$libobjs save_output=$output output=${output_objdir}/${output_la}.nm func_to_tool_file "$output" libobjs=$nm_file_list_spec$func_to_tool_file_result func_append delfiles " $output" func_verbose "creating $NM input file list: $output" for obj in $save_libobjs; do func_to_tool_file "$obj" $ECHO "$func_to_tool_file_result" done > "$output" eval cmd=\"$cmd1\" func_show_eval "$cmd" 'exit $?' output=$save_output libobjs=$save_libobjs skipped_export=false else # The command line is too long to execute in one step. func_verbose "using reloadable object file for export list..." skipped_export=: # Break out early, otherwise skipped_export may be # set to false by a later but shorter cmd. break fi done IFS="$save_ifs" if test -n "$export_symbols_regex" && test "X$skipped_export" != "X:"; then func_show_eval '$EGREP -e "$export_symbols_regex" "$export_symbols" > "${export_symbols}T"' func_show_eval '$MV "${export_symbols}T" "$export_symbols"' fi fi fi if test -n "$export_symbols" && test -n "$include_expsyms"; then tmp_export_symbols="$export_symbols" test -n "$orig_export_symbols" && tmp_export_symbols="$orig_export_symbols" $opt_dry_run || eval '$ECHO "$include_expsyms" | $SP2NL >> "$tmp_export_symbols"' fi if test "X$skipped_export" != "X:" && test -n "$orig_export_symbols"; then # The given exports_symbols file has to be filtered, so filter it. func_verbose "filter symbol list for \`$libname.la' to tag DATA exports" # FIXME: $output_objdir/$libname.filter potentially contains lots of # 's' commands which not all seds can handle. GNU sed should be fine # though. Also, the filter scales superlinearly with the number of # global variables. join(1) would be nice here, but unfortunately # isn't a blessed tool. $opt_dry_run || $SED -e '/[ ,]DATA/!d;s,\(.*\)\([ \,].*\),s|^\1$|\1\2|,' < $export_symbols > $output_objdir/$libname.filter func_append delfiles " $export_symbols $output_objdir/$libname.filter" export_symbols=$output_objdir/$libname.def $opt_dry_run || $SED -f $output_objdir/$libname.filter < $orig_export_symbols > $export_symbols fi tmp_deplibs= for test_deplib in $deplibs; do case " $convenience " in *" $test_deplib "*) ;; *) func_append tmp_deplibs " $test_deplib" ;; esac done deplibs="$tmp_deplibs" if test -n "$convenience"; then if test -n "$whole_archive_flag_spec" && test "$compiler_needs_object" = yes && test -z "$libobjs"; then # extract the archives, so we have objects to list. # TODO: could optimize this to just extract one archive. whole_archive_flag_spec= fi if test -n "$whole_archive_flag_spec"; then save_libobjs=$libobjs eval libobjs=\"\$libobjs $whole_archive_flag_spec\" test "X$libobjs" = "X " && libobjs= else gentop="$output_objdir/${outputname}x" func_append generated " $gentop" func_extract_archives $gentop $convenience func_append libobjs " $func_extract_archives_result" test "X$libobjs" = "X " && libobjs= fi fi if test "$thread_safe" = yes && test -n "$thread_safe_flag_spec"; then eval flag=\"$thread_safe_flag_spec\" func_append linker_flags " $flag" fi # Make a backup of the uninstalled library when relinking if test "$opt_mode" = relink; then $opt_dry_run || eval '(cd $output_objdir && $RM ${realname}U && $MV $realname ${realname}U)' || exit $? fi # Do each of the archive commands. if test "$module" = yes && test -n "$module_cmds" ; then if test -n "$export_symbols" && test -n "$module_expsym_cmds"; then eval test_cmds=\"$module_expsym_cmds\" cmds=$module_expsym_cmds else eval test_cmds=\"$module_cmds\" cmds=$module_cmds fi else if test -n "$export_symbols" && test -n "$archive_expsym_cmds"; then eval test_cmds=\"$archive_expsym_cmds\" cmds=$archive_expsym_cmds else eval test_cmds=\"$archive_cmds\" cmds=$archive_cmds fi fi if test "X$skipped_export" != "X:" && func_len " $test_cmds" && len=$func_len_result && test "$len" -lt "$max_cmd_len" || test "$max_cmd_len" -le -1; then : else # The command line is too long to link in one step, link piecewise # or, if using GNU ld and skipped_export is not :, use a linker # script. # Save the value of $output and $libobjs because we want to # use them later. If we have whole_archive_flag_spec, we # want to use save_libobjs as it was before # whole_archive_flag_spec was expanded, because we can't # assume the linker understands whole_archive_flag_spec. # This may have to be revisited, in case too many # convenience libraries get linked in and end up exceeding # the spec. if test -z "$convenience" || test -z "$whole_archive_flag_spec"; then save_libobjs=$libobjs fi save_output=$output func_basename "$output" output_la=$func_basename_result # Clear the reloadable object creation command queue and # initialize k to one. test_cmds= concat_cmds= objlist= last_robj= k=1 if test -n "$save_libobjs" && test "X$skipped_export" != "X:" && test "$with_gnu_ld" = yes; then output=${output_objdir}/${output_la}.lnkscript func_verbose "creating GNU ld script: $output" echo 'INPUT (' > $output for obj in $save_libobjs do func_to_tool_file "$obj" $ECHO "$func_to_tool_file_result" >> $output done echo ')' >> $output func_append delfiles " $output" func_to_tool_file "$output" output=$func_to_tool_file_result elif test -n "$save_libobjs" && test "X$skipped_export" != "X:" && test "X$file_list_spec" != X; then output=${output_objdir}/${output_la}.lnk func_verbose "creating linker input file list: $output" : > $output set x $save_libobjs shift firstobj= if test "$compiler_needs_object" = yes; then firstobj="$1 " shift fi for obj do func_to_tool_file "$obj" $ECHO "$func_to_tool_file_result" >> $output done func_append delfiles " $output" func_to_tool_file "$output" output=$firstobj\"$file_list_spec$func_to_tool_file_result\" else if test -n "$save_libobjs"; then func_verbose "creating reloadable object files..." output=$output_objdir/$output_la-${k}.$objext eval test_cmds=\"$reload_cmds\" func_len " $test_cmds" len0=$func_len_result len=$len0 # Loop over the list of objects to be linked. for obj in $save_libobjs do func_len " $obj" func_arith $len + $func_len_result len=$func_arith_result if test "X$objlist" = X || test "$len" -lt "$max_cmd_len"; then func_append objlist " $obj" else # The command $test_cmds is almost too long, add a # command to the queue. if test "$k" -eq 1 ; then # The first file doesn't have a previous command to add. reload_objs=$objlist eval concat_cmds=\"$reload_cmds\" else # All subsequent reloadable object files will link in # the last one created. reload_objs="$objlist $last_robj" eval concat_cmds=\"\$concat_cmds~$reload_cmds~\$RM $last_robj\" fi last_robj=$output_objdir/$output_la-${k}.$objext func_arith $k + 1 k=$func_arith_result output=$output_objdir/$output_la-${k}.$objext objlist=" $obj" func_len " $last_robj" func_arith $len0 + $func_len_result len=$func_arith_result fi done # Handle the remaining objects by creating one last # reloadable object file. All subsequent reloadable object # files will link in the last one created. test -z "$concat_cmds" || concat_cmds=$concat_cmds~ reload_objs="$objlist $last_robj" eval concat_cmds=\"\${concat_cmds}$reload_cmds\" if test -n "$last_robj"; then eval concat_cmds=\"\${concat_cmds}~\$RM $last_robj\" fi func_append delfiles " $output" else output= fi if ${skipped_export-false}; then func_verbose "generating symbol list for \`$libname.la'" export_symbols="$output_objdir/$libname.exp" $opt_dry_run || $RM $export_symbols libobjs=$output # Append the command to create the export file. test -z "$concat_cmds" || concat_cmds=$concat_cmds~ eval concat_cmds=\"\$concat_cmds$export_symbols_cmds\" if test -n "$last_robj"; then eval concat_cmds=\"\$concat_cmds~\$RM $last_robj\" fi fi test -n "$save_libobjs" && func_verbose "creating a temporary reloadable object file: $output" # Loop through the commands generated above and execute them. save_ifs="$IFS"; IFS='~' for cmd in $concat_cmds; do IFS="$save_ifs" $opt_silent || { func_quote_for_expand "$cmd" eval "func_echo $func_quote_for_expand_result" } $opt_dry_run || eval "$cmd" || { lt_exit=$? # Restore the uninstalled library and exit if test "$opt_mode" = relink; then ( cd "$output_objdir" && \ $RM "${realname}T" && \ $MV "${realname}U" "$realname" ) fi exit $lt_exit } done IFS="$save_ifs" if test -n "$export_symbols_regex" && ${skipped_export-false}; then func_show_eval '$EGREP -e "$export_symbols_regex" "$export_symbols" > "${export_symbols}T"' func_show_eval '$MV "${export_symbols}T" "$export_symbols"' fi fi if ${skipped_export-false}; then if test -n "$export_symbols" && test -n "$include_expsyms"; then tmp_export_symbols="$export_symbols" test -n "$orig_export_symbols" && tmp_export_symbols="$orig_export_symbols" $opt_dry_run || eval '$ECHO "$include_expsyms" | $SP2NL >> "$tmp_export_symbols"' fi if test -n "$orig_export_symbols"; then # The given exports_symbols file has to be filtered, so filter it. func_verbose "filter symbol list for \`$libname.la' to tag DATA exports" # FIXME: $output_objdir/$libname.filter potentially contains lots of # 's' commands which not all seds can handle. GNU sed should be fine # though. Also, the filter scales superlinearly with the number of # global variables. join(1) would be nice here, but unfortunately # isn't a blessed tool. $opt_dry_run || $SED -e '/[ ,]DATA/!d;s,\(.*\)\([ \,].*\),s|^\1$|\1\2|,' < $export_symbols > $output_objdir/$libname.filter func_append delfiles " $export_symbols $output_objdir/$libname.filter" export_symbols=$output_objdir/$libname.def $opt_dry_run || $SED -f $output_objdir/$libname.filter < $orig_export_symbols > $export_symbols fi fi libobjs=$output # Restore the value of output. output=$save_output if test -n "$convenience" && test -n "$whole_archive_flag_spec"; then eval libobjs=\"\$libobjs $whole_archive_flag_spec\" test "X$libobjs" = "X " && libobjs= fi # Expand the library linking commands again to reset the # value of $libobjs for piecewise linking. # Do each of the archive commands. if test "$module" = yes && test -n "$module_cmds" ; then if test -n "$export_symbols" && test -n "$module_expsym_cmds"; then cmds=$module_expsym_cmds else cmds=$module_cmds fi else if test -n "$export_symbols" && test -n "$archive_expsym_cmds"; then cmds=$archive_expsym_cmds else cmds=$archive_cmds fi fi fi if test -n "$delfiles"; then # Append the command to remove temporary files to $cmds. eval cmds=\"\$cmds~\$RM $delfiles\" fi # Add any objects from preloaded convenience libraries if test -n "$dlprefiles"; then gentop="$output_objdir/${outputname}x" func_append generated " $gentop" func_extract_archives $gentop $dlprefiles func_append libobjs " $func_extract_archives_result" test "X$libobjs" = "X " && libobjs= fi save_ifs="$IFS"; IFS='~' for cmd in $cmds; do IFS="$save_ifs" eval cmd=\"$cmd\" $opt_silent || { func_quote_for_expand "$cmd" eval "func_echo $func_quote_for_expand_result" } $opt_dry_run || eval "$cmd" || { lt_exit=$? # Restore the uninstalled library and exit if test "$opt_mode" = relink; then ( cd "$output_objdir" && \ $RM "${realname}T" && \ $MV "${realname}U" "$realname" ) fi exit $lt_exit } done IFS="$save_ifs" # Restore the uninstalled library and exit if test "$opt_mode" = relink; then $opt_dry_run || eval '(cd $output_objdir && $RM ${realname}T && $MV $realname ${realname}T && $MV ${realname}U $realname)' || exit $? if test -n "$convenience"; then if test -z "$whole_archive_flag_spec"; then func_show_eval '${RM}r "$gentop"' fi fi exit $EXIT_SUCCESS fi # Create links to the real library. for linkname in $linknames; do if test "$realname" != "$linkname"; then func_show_eval '(cd "$output_objdir" && $RM "$linkname" && $LN_S "$realname" "$linkname")' 'exit $?' fi done # If -module or -export-dynamic was specified, set the dlname. if test "$module" = yes || test "$export_dynamic" = yes; then # On all known operating systems, these are identical. dlname="$soname" fi fi ;; obj) if test -n "$dlfiles$dlprefiles" || test "$dlself" != no; then func_warning "\`-dlopen' is ignored for objects" fi case " $deplibs" in *\ -l* | *\ -L*) func_warning "\`-l' and \`-L' are ignored for objects" ;; esac test -n "$rpath" && \ func_warning "\`-rpath' is ignored for objects" test -n "$xrpath" && \ func_warning "\`-R' is ignored for objects" test -n "$vinfo" && \ func_warning "\`-version-info' is ignored for objects" test -n "$release" && \ func_warning "\`-release' is ignored for objects" case $output in *.lo) test -n "$objs$old_deplibs" && \ func_fatal_error "cannot build library object \`$output' from non-libtool objects" libobj=$output func_lo2o "$libobj" obj=$func_lo2o_result ;; *) libobj= obj="$output" ;; esac # Delete the old objects. $opt_dry_run || $RM $obj $libobj # Objects from convenience libraries. This assumes # single-version convenience libraries. Whenever we create # different ones for PIC/non-PIC, this we'll have to duplicate # the extraction. reload_conv_objs= gentop= # reload_cmds runs $LD directly, so let us get rid of # -Wl from whole_archive_flag_spec and hope we can get by with # turning comma into space.. wl= if test -n "$convenience"; then if test -n "$whole_archive_flag_spec"; then eval tmp_whole_archive_flags=\"$whole_archive_flag_spec\" reload_conv_objs=$reload_objs\ `$ECHO "$tmp_whole_archive_flags" | $SED 's|,| |g'` else gentop="$output_objdir/${obj}x" func_append generated " $gentop" func_extract_archives $gentop $convenience reload_conv_objs="$reload_objs $func_extract_archives_result" fi fi # If we're not building shared, we need to use non_pic_objs test "$build_libtool_libs" != yes && libobjs="$non_pic_objects" # Create the old-style object. reload_objs="$objs$old_deplibs "`$ECHO "$libobjs" | $SP2NL | $SED "/\.${libext}$/d; /\.lib$/d; $lo2o" | $NL2SP`" $reload_conv_objs" ### testsuite: skip nested quoting test output="$obj" func_execute_cmds "$reload_cmds" 'exit $?' # Exit if we aren't doing a library object file. if test -z "$libobj"; then if test -n "$gentop"; then func_show_eval '${RM}r "$gentop"' fi exit $EXIT_SUCCESS fi if test "$build_libtool_libs" != yes; then if test -n "$gentop"; then func_show_eval '${RM}r "$gentop"' fi # Create an invalid libtool object if no PIC, so that we don't # accidentally link it into a program. # $show "echo timestamp > $libobj" # $opt_dry_run || eval "echo timestamp > $libobj" || exit $? exit $EXIT_SUCCESS fi if test -n "$pic_flag" || test "$pic_mode" != default; then # Only do commands if we really have different PIC objects. reload_objs="$libobjs $reload_conv_objs" output="$libobj" func_execute_cmds "$reload_cmds" 'exit $?' fi if test -n "$gentop"; then func_show_eval '${RM}r "$gentop"' fi exit $EXIT_SUCCESS ;; prog) case $host in *cygwin*) func_stripname '' '.exe' "$output" output=$func_stripname_result.exe;; esac test -n "$vinfo" && \ func_warning "\`-version-info' is ignored for programs" test -n "$release" && \ func_warning "\`-release' is ignored for programs" test "$preload" = yes \ && test "$dlopen_support" = unknown \ && test "$dlopen_self" = unknown \ && test "$dlopen_self_static" = unknown && \ func_warning "\`LT_INIT([dlopen])' not used. Assuming no dlopen support." case $host in *-*-rhapsody* | *-*-darwin1.[012]) # On Rhapsody replace the C library is the System framework compile_deplibs=`$ECHO " $compile_deplibs" | $SED 's/ -lc / System.ltframework /'` finalize_deplibs=`$ECHO " $finalize_deplibs" | $SED 's/ -lc / System.ltframework /'` ;; esac case $host in *-*-darwin*) # Don't allow lazy linking, it breaks C++ global constructors # But is supposedly fixed on 10.4 or later (yay!). if test "$tagname" = CXX ; then case ${MACOSX_DEPLOYMENT_TARGET-10.0} in 10.[0123]) func_append compile_command " ${wl}-bind_at_load" func_append finalize_command " ${wl}-bind_at_load" ;; esac fi # Time to change all our "foo.ltframework" stuff back to "-framework foo" compile_deplibs=`$ECHO " $compile_deplibs" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'` finalize_deplibs=`$ECHO " $finalize_deplibs" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'` ;; esac # move library search paths that coincide with paths to not yet # installed libraries to the beginning of the library search list new_libs= for path in $notinst_path; do case " $new_libs " in *" -L$path/$objdir "*) ;; *) case " $compile_deplibs " in *" -L$path/$objdir "*) func_append new_libs " -L$path/$objdir" ;; esac ;; esac done for deplib in $compile_deplibs; do case $deplib in -L*) case " $new_libs " in *" $deplib "*) ;; *) func_append new_libs " $deplib" ;; esac ;; *) func_append new_libs " $deplib" ;; esac done compile_deplibs="$new_libs" func_append compile_command " $compile_deplibs" func_append finalize_command " $finalize_deplibs" if test -n "$rpath$xrpath"; then # If the user specified any rpath flags, then add them. for libdir in $rpath $xrpath; do # This is the magic to use -rpath. case "$finalize_rpath " in *" $libdir "*) ;; *) func_append finalize_rpath " $libdir" ;; esac done fi # Now hardcode the library paths rpath= hardcode_libdirs= for libdir in $compile_rpath $finalize_rpath; do if test -n "$hardcode_libdir_flag_spec"; then if test -n "$hardcode_libdir_separator"; then if test -z "$hardcode_libdirs"; then hardcode_libdirs="$libdir" else # Just accumulate the unique libdirs. case $hardcode_libdir_separator$hardcode_libdirs$hardcode_libdir_separator in *"$hardcode_libdir_separator$libdir$hardcode_libdir_separator"*) ;; *) func_append hardcode_libdirs "$hardcode_libdir_separator$libdir" ;; esac fi else eval flag=\"$hardcode_libdir_flag_spec\" func_append rpath " $flag" fi elif test -n "$runpath_var"; then case "$perm_rpath " in *" $libdir "*) ;; *) func_append perm_rpath " $libdir" ;; esac fi case $host in *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-cegcc*) testbindir=`${ECHO} "$libdir" | ${SED} -e 's*/lib$*/bin*'` case :$dllsearchpath: in *":$libdir:"*) ;; ::) dllsearchpath=$libdir;; *) func_append dllsearchpath ":$libdir";; esac case :$dllsearchpath: in *":$testbindir:"*) ;; ::) dllsearchpath=$testbindir;; *) func_append dllsearchpath ":$testbindir";; esac ;; esac done # Substitute the hardcoded libdirs into the rpath. if test -n "$hardcode_libdir_separator" && test -n "$hardcode_libdirs"; then libdir="$hardcode_libdirs" eval rpath=\" $hardcode_libdir_flag_spec\" fi compile_rpath="$rpath" rpath= hardcode_libdirs= for libdir in $finalize_rpath; do if test -n "$hardcode_libdir_flag_spec"; then if test -n "$hardcode_libdir_separator"; then if test -z "$hardcode_libdirs"; then hardcode_libdirs="$libdir" else # Just accumulate the unique libdirs. case $hardcode_libdir_separator$hardcode_libdirs$hardcode_libdir_separator in *"$hardcode_libdir_separator$libdir$hardcode_libdir_separator"*) ;; *) func_append hardcode_libdirs "$hardcode_libdir_separator$libdir" ;; esac fi else eval flag=\"$hardcode_libdir_flag_spec\" func_append rpath " $flag" fi elif test -n "$runpath_var"; then case "$finalize_perm_rpath " in *" $libdir "*) ;; *) func_append finalize_perm_rpath " $libdir" ;; esac fi done # Substitute the hardcoded libdirs into the rpath. if test -n "$hardcode_libdir_separator" && test -n "$hardcode_libdirs"; then libdir="$hardcode_libdirs" eval rpath=\" $hardcode_libdir_flag_spec\" fi finalize_rpath="$rpath" if test -n "$libobjs" && test "$build_old_libs" = yes; then # Transform all the library objects into standard objects. compile_command=`$ECHO "$compile_command" | $SP2NL | $SED "$lo2o" | $NL2SP` finalize_command=`$ECHO "$finalize_command" | $SP2NL | $SED "$lo2o" | $NL2SP` fi func_generate_dlsyms "$outputname" "@PROGRAM@" "no" # template prelinking step if test -n "$prelink_cmds"; then func_execute_cmds "$prelink_cmds" 'exit $?' fi wrappers_required=yes case $host in *cegcc* | *mingw32ce*) # Disable wrappers for cegcc and mingw32ce hosts, we are cross compiling anyway. wrappers_required=no ;; *cygwin* | *mingw* ) if test "$build_libtool_libs" != yes; then wrappers_required=no fi ;; *) if test "$need_relink" = no || test "$build_libtool_libs" != yes; then wrappers_required=no fi ;; esac if test "$wrappers_required" = no; then # Replace the output file specification. compile_command=`$ECHO "$compile_command" | $SED 's%@OUTPUT@%'"$output"'%g'` link_command="$compile_command$compile_rpath" # We have no uninstalled library dependencies, so finalize right now. exit_status=0 func_show_eval "$link_command" 'exit_status=$?' if test -n "$postlink_cmds"; then func_to_tool_file "$output" postlink_cmds=`func_echo_all "$postlink_cmds" | $SED -e 's%@OUTPUT@%'"$output"'%g' -e 's%@TOOL_OUTPUT@%'"$func_to_tool_file_result"'%g'` func_execute_cmds "$postlink_cmds" 'exit $?' fi # Delete the generated files. if test -f "$output_objdir/${outputname}S.${objext}"; then func_show_eval '$RM "$output_objdir/${outputname}S.${objext}"' fi exit $exit_status fi if test -n "$compile_shlibpath$finalize_shlibpath"; then compile_command="$shlibpath_var=\"$compile_shlibpath$finalize_shlibpath\$$shlibpath_var\" $compile_command" fi if test -n "$finalize_shlibpath"; then finalize_command="$shlibpath_var=\"$finalize_shlibpath\$$shlibpath_var\" $finalize_command" fi compile_var= finalize_var= if test -n "$runpath_var"; then if test -n "$perm_rpath"; then # We should set the runpath_var. rpath= for dir in $perm_rpath; do func_append rpath "$dir:" done compile_var="$runpath_var=\"$rpath\$$runpath_var\" " fi if test -n "$finalize_perm_rpath"; then # We should set the runpath_var. rpath= for dir in $finalize_perm_rpath; do func_append rpath "$dir:" done finalize_var="$runpath_var=\"$rpath\$$runpath_var\" " fi fi if test "$no_install" = yes; then # We don't need to create a wrapper script. link_command="$compile_var$compile_command$compile_rpath" # Replace the output file specification. link_command=`$ECHO "$link_command" | $SED 's%@OUTPUT@%'"$output"'%g'` # Delete the old output file. $opt_dry_run || $RM $output # Link the executable and exit func_show_eval "$link_command" 'exit $?' if test -n "$postlink_cmds"; then func_to_tool_file "$output" postlink_cmds=`func_echo_all "$postlink_cmds" | $SED -e 's%@OUTPUT@%'"$output"'%g' -e 's%@TOOL_OUTPUT@%'"$func_to_tool_file_result"'%g'` func_execute_cmds "$postlink_cmds" 'exit $?' fi exit $EXIT_SUCCESS fi if test "$hardcode_action" = relink; then # Fast installation is not supported link_command="$compile_var$compile_command$compile_rpath" relink_command="$finalize_var$finalize_command$finalize_rpath" func_warning "this platform does not like uninstalled shared libraries" func_warning "\`$output' will be relinked during installation" else if test "$fast_install" != no; then link_command="$finalize_var$compile_command$finalize_rpath" if test "$fast_install" = yes; then relink_command=`$ECHO "$compile_var$compile_command$compile_rpath" | $SED 's%@OUTPUT@%\$progdir/\$file%g'` else # fast_install is set to needless relink_command= fi else link_command="$compile_var$compile_command$compile_rpath" relink_command="$finalize_var$finalize_command$finalize_rpath" fi fi # Replace the output file specification. link_command=`$ECHO "$link_command" | $SED 's%@OUTPUT@%'"$output_objdir/$outputname"'%g'` # Delete the old output files. $opt_dry_run || $RM $output $output_objdir/$outputname $output_objdir/lt-$outputname func_show_eval "$link_command" 'exit $?' if test -n "$postlink_cmds"; then func_to_tool_file "$output_objdir/$outputname" postlink_cmds=`func_echo_all "$postlink_cmds" | $SED -e 's%@OUTPUT@%'"$output_objdir/$outputname"'%g' -e 's%@TOOL_OUTPUT@%'"$func_to_tool_file_result"'%g'` func_execute_cmds "$postlink_cmds" 'exit $?' fi # Now create the wrapper script. func_verbose "creating $output" # Quote the relink command for shipping. if test -n "$relink_command"; then # Preserve any variables that may affect compiler behavior for var in $variables_saved_for_relink; do if eval test -z \"\${$var+set}\"; then relink_command="{ test -z \"\${$var+set}\" || $lt_unset $var || { $var=; export $var; }; }; $relink_command" elif eval var_value=\$$var; test -z "$var_value"; then relink_command="$var=; export $var; $relink_command" else func_quote_for_eval "$var_value" relink_command="$var=$func_quote_for_eval_result; export $var; $relink_command" fi done relink_command="(cd `pwd`; $relink_command)" relink_command=`$ECHO "$relink_command" | $SED "$sed_quote_subst"` fi # Only actually do things if not in dry run mode. $opt_dry_run || { # win32 will think the script is a binary if it has # a .exe suffix, so we strip it off here. case $output in *.exe) func_stripname '' '.exe' "$output" output=$func_stripname_result ;; esac # test for cygwin because mv fails w/o .exe extensions case $host in *cygwin*) exeext=.exe func_stripname '' '.exe' "$outputname" outputname=$func_stripname_result ;; *) exeext= ;; esac case $host in *cygwin* | *mingw* ) func_dirname_and_basename "$output" "" "." output_name=$func_basename_result output_path=$func_dirname_result cwrappersource="$output_path/$objdir/lt-$output_name.c" cwrapper="$output_path/$output_name.exe" $RM $cwrappersource $cwrapper trap "$RM $cwrappersource $cwrapper; exit $EXIT_FAILURE" 1 2 15 func_emit_cwrapperexe_src > $cwrappersource # The wrapper executable is built using the $host compiler, # because it contains $host paths and files. If cross- # compiling, it, like the target executable, must be # executed on the $host or under an emulation environment. $opt_dry_run || { $LTCC $LTCFLAGS -o $cwrapper $cwrappersource $STRIP $cwrapper } # Now, create the wrapper script for func_source use: func_ltwrapper_scriptname $cwrapper $RM $func_ltwrapper_scriptname_result trap "$RM $func_ltwrapper_scriptname_result; exit $EXIT_FAILURE" 1 2 15 $opt_dry_run || { # note: this script will not be executed, so do not chmod. if test "x$build" = "x$host" ; then $cwrapper --lt-dump-script > $func_ltwrapper_scriptname_result else func_emit_wrapper no > $func_ltwrapper_scriptname_result fi } ;; * ) $RM $output trap "$RM $output; exit $EXIT_FAILURE" 1 2 15 func_emit_wrapper no > $output chmod +x $output ;; esac } exit $EXIT_SUCCESS ;; esac # See if we need to build an old-fashioned archive. for oldlib in $oldlibs; do if test "$build_libtool_libs" = convenience; then oldobjs="$libobjs_save $symfileobj" addlibs="$convenience" build_libtool_libs=no else if test "$build_libtool_libs" = module; then oldobjs="$libobjs_save" build_libtool_libs=no else oldobjs="$old_deplibs $non_pic_objects" if test "$preload" = yes && test -f "$symfileobj"; then func_append oldobjs " $symfileobj" fi fi addlibs="$old_convenience" fi if test -n "$addlibs"; then gentop="$output_objdir/${outputname}x" func_append generated " $gentop" func_extract_archives $gentop $addlibs func_append oldobjs " $func_extract_archives_result" fi # Do each command in the archive commands. if test -n "$old_archive_from_new_cmds" && test "$build_libtool_libs" = yes; then cmds=$old_archive_from_new_cmds else # Add any objects from preloaded convenience libraries if test -n "$dlprefiles"; then gentop="$output_objdir/${outputname}x" func_append generated " $gentop" func_extract_archives $gentop $dlprefiles func_append oldobjs " $func_extract_archives_result" fi # POSIX demands no paths to be encoded in archives. We have # to avoid creating archives with duplicate basenames if we # might have to extract them afterwards, e.g., when creating a # static archive out of a convenience library, or when linking # the entirety of a libtool archive into another (currently # not supported by libtool). if (for obj in $oldobjs do func_basename "$obj" $ECHO "$func_basename_result" done | sort | sort -uc >/dev/null 2>&1); then : else echo "copying selected object files to avoid basename conflicts..." gentop="$output_objdir/${outputname}x" func_append generated " $gentop" func_mkdir_p "$gentop" save_oldobjs=$oldobjs oldobjs= counter=1 for obj in $save_oldobjs do func_basename "$obj" objbase="$func_basename_result" case " $oldobjs " in " ") oldobjs=$obj ;; *[\ /]"$objbase "*) while :; do # Make sure we don't pick an alternate name that also # overlaps. newobj=lt$counter-$objbase func_arith $counter + 1 counter=$func_arith_result case " $oldobjs " in *[\ /]"$newobj "*) ;; *) if test ! -f "$gentop/$newobj"; then break; fi ;; esac done func_show_eval "ln $obj $gentop/$newobj || cp $obj $gentop/$newobj" func_append oldobjs " $gentop/$newobj" ;; *) func_append oldobjs " $obj" ;; esac done fi func_to_tool_file "$oldlib" func_convert_file_msys_to_w32 tool_oldlib=$func_to_tool_file_result eval cmds=\"$old_archive_cmds\" func_len " $cmds" len=$func_len_result if test "$len" -lt "$max_cmd_len" || test "$max_cmd_len" -le -1; then cmds=$old_archive_cmds elif test -n "$archiver_list_spec"; then func_verbose "using command file archive linking..." for obj in $oldobjs do func_to_tool_file "$obj" $ECHO "$func_to_tool_file_result" done > $output_objdir/$libname.libcmd func_to_tool_file "$output_objdir/$libname.libcmd" oldobjs=" $archiver_list_spec$func_to_tool_file_result" cmds=$old_archive_cmds else # the command line is too long to link in one step, link in parts func_verbose "using piecewise archive linking..." save_RANLIB=$RANLIB RANLIB=: objlist= concat_cmds= save_oldobjs=$oldobjs oldobjs= # Is there a better way of finding the last object in the list? for obj in $save_oldobjs do last_oldobj=$obj done eval test_cmds=\"$old_archive_cmds\" func_len " $test_cmds" len0=$func_len_result len=$len0 for obj in $save_oldobjs do func_len " $obj" func_arith $len + $func_len_result len=$func_arith_result func_append objlist " $obj" if test "$len" -lt "$max_cmd_len"; then : else # the above command should be used before it gets too long oldobjs=$objlist if test "$obj" = "$last_oldobj" ; then RANLIB=$save_RANLIB fi test -z "$concat_cmds" || concat_cmds=$concat_cmds~ eval concat_cmds=\"\${concat_cmds}$old_archive_cmds\" objlist= len=$len0 fi done RANLIB=$save_RANLIB oldobjs=$objlist if test "X$oldobjs" = "X" ; then eval cmds=\"\$concat_cmds\" else eval cmds=\"\$concat_cmds~\$old_archive_cmds\" fi fi fi func_execute_cmds "$cmds" 'exit $?' done test -n "$generated" && \ func_show_eval "${RM}r$generated" # Now create the libtool archive. case $output in *.la) old_library= test "$build_old_libs" = yes && old_library="$libname.$libext" func_verbose "creating $output" # Preserve any variables that may affect compiler behavior for var in $variables_saved_for_relink; do if eval test -z \"\${$var+set}\"; then relink_command="{ test -z \"\${$var+set}\" || $lt_unset $var || { $var=; export $var; }; }; $relink_command" elif eval var_value=\$$var; test -z "$var_value"; then relink_command="$var=; export $var; $relink_command" else func_quote_for_eval "$var_value" relink_command="$var=$func_quote_for_eval_result; export $var; $relink_command" fi done # Quote the link command for shipping. relink_command="(cd `pwd`; $SHELL $progpath $preserve_args --mode=relink $libtool_args @inst_prefix_dir@)" relink_command=`$ECHO "$relink_command" | $SED "$sed_quote_subst"` if test "$hardcode_automatic" = yes ; then relink_command= fi # Only create the output if not a dry run. $opt_dry_run || { for installed in no yes; do if test "$installed" = yes; then if test -z "$install_libdir"; then break fi output="$output_objdir/$outputname"i # Replace all uninstalled libtool libraries with the installed ones newdependency_libs= for deplib in $dependency_libs; do case $deplib in *.la) func_basename "$deplib" name="$func_basename_result" func_resolve_sysroot "$deplib" eval libdir=`${SED} -n -e 's/^libdir=\(.*\)$/\1/p' $func_resolve_sysroot_result` test -z "$libdir" && \ func_fatal_error "\`$deplib' is not a valid libtool archive" func_append newdependency_libs " ${lt_sysroot:+=}$libdir/$name" ;; -L*) func_stripname -L '' "$deplib" func_replace_sysroot "$func_stripname_result" func_append newdependency_libs " -L$func_replace_sysroot_result" ;; -R*) func_stripname -R '' "$deplib" func_replace_sysroot "$func_stripname_result" func_append newdependency_libs " -R$func_replace_sysroot_result" ;; *) func_append newdependency_libs " $deplib" ;; esac done dependency_libs="$newdependency_libs" newdlfiles= for lib in $dlfiles; do case $lib in *.la) func_basename "$lib" name="$func_basename_result" eval libdir=`${SED} -n -e 's/^libdir=\(.*\)$/\1/p' $lib` test -z "$libdir" && \ func_fatal_error "\`$lib' is not a valid libtool archive" func_append newdlfiles " ${lt_sysroot:+=}$libdir/$name" ;; *) func_append newdlfiles " $lib" ;; esac done dlfiles="$newdlfiles" newdlprefiles= for lib in $dlprefiles; do case $lib in *.la) # Only pass preopened files to the pseudo-archive (for # eventual linking with the app. that links it) if we # didn't already link the preopened objects directly into # the library: func_basename "$lib" name="$func_basename_result" eval libdir=`${SED} -n -e 's/^libdir=\(.*\)$/\1/p' $lib` test -z "$libdir" && \ func_fatal_error "\`$lib' is not a valid libtool archive" func_append newdlprefiles " ${lt_sysroot:+=}$libdir/$name" ;; esac done dlprefiles="$newdlprefiles" else newdlfiles= for lib in $dlfiles; do case $lib in [\\/]* | [A-Za-z]:[\\/]*) abs="$lib" ;; *) abs=`pwd`"/$lib" ;; esac func_append newdlfiles " $abs" done dlfiles="$newdlfiles" newdlprefiles= for lib in $dlprefiles; do case $lib in [\\/]* | [A-Za-z]:[\\/]*) abs="$lib" ;; *) abs=`pwd`"/$lib" ;; esac func_append newdlprefiles " $abs" done dlprefiles="$newdlprefiles" fi $RM $output # place dlname in correct position for cygwin # In fact, it would be nice if we could use this code for all target # systems that can't hard-code library paths into their executables # and that have no shared library path variable independent of PATH, # but it turns out we can't easily determine that from inspecting # libtool variables, so we have to hard-code the OSs to which it # applies here; at the moment, that means platforms that use the PE # object format with DLL files. See the long comment at the top of # tests/bindir.at for full details. tdlname=$dlname case $host,$output,$installed,$module,$dlname in *cygwin*,*lai,yes,no,*.dll | *mingw*,*lai,yes,no,*.dll | *cegcc*,*lai,yes,no,*.dll) # If a -bindir argument was supplied, place the dll there. if test "x$bindir" != x ; then func_relative_path "$install_libdir" "$bindir" tdlname=$func_relative_path_result$dlname else # Otherwise fall back on heuristic. tdlname=../bin/$dlname fi ;; esac $ECHO > $output "\ # $outputname - a libtool library file # Generated by $PROGRAM (GNU $PACKAGE$TIMESTAMP) $VERSION # # Please DO NOT delete this file! # It is necessary for linking the library. # The name that we can dlopen(3). dlname='$tdlname' # Names of this library. library_names='$library_names' # The name of the static archive. old_library='$old_library' # Linker flags that can not go in dependency_libs. inherited_linker_flags='$new_inherited_linker_flags' # Libraries that this one depends upon. dependency_libs='$dependency_libs' # Names of additional weak libraries provided by this library weak_library_names='$weak_libs' # Version information for $libname. current=$current age=$age revision=$revision # Is this an already installed library? installed=$installed # Should we warn about portability when linking against -modules? shouldnotlink=$module # Files to dlopen/dlpreopen dlopen='$dlfiles' dlpreopen='$dlprefiles' # Directory that this library needs to be installed in: libdir='$install_libdir'" if test "$installed" = no && test "$need_relink" = yes; then $ECHO >> $output "\ relink_command=\"$relink_command\"" fi done } # Do a symbolic link so that the libtool archive can be found in # LD_LIBRARY_PATH before the program is installed. func_show_eval '( cd "$output_objdir" && $RM "$outputname" && $LN_S "../$outputname" "$outputname" )' 'exit $?' ;; esac exit $EXIT_SUCCESS } { test "$opt_mode" = link || test "$opt_mode" = relink; } && func_mode_link ${1+"$@"} # func_mode_uninstall arg... func_mode_uninstall () { $opt_debug RM="$nonopt" files= rmforce= exit_status=0 # This variable tells wrapper scripts just to set variables rather # than running their programs. libtool_install_magic="$magic" for arg do case $arg in -f) func_append RM " $arg"; rmforce=yes ;; -*) func_append RM " $arg" ;; *) func_append files " $arg" ;; esac done test -z "$RM" && \ func_fatal_help "you must specify an RM program" rmdirs= for file in $files; do func_dirname "$file" "" "." dir="$func_dirname_result" if test "X$dir" = X.; then odir="$objdir" else odir="$dir/$objdir" fi func_basename "$file" name="$func_basename_result" test "$opt_mode" = uninstall && odir="$dir" # Remember odir for removal later, being careful to avoid duplicates if test "$opt_mode" = clean; then case " $rmdirs " in *" $odir "*) ;; *) func_append rmdirs " $odir" ;; esac fi # Don't error if the file doesn't exist and rm -f was used. if { test -L "$file"; } >/dev/null 2>&1 || { test -h "$file"; } >/dev/null 2>&1 || test -f "$file"; then : elif test -d "$file"; then exit_status=1 continue elif test "$rmforce" = yes; then continue fi rmfiles="$file" case $name in *.la) # Possibly a libtool archive, so verify it. if func_lalib_p "$file"; then func_source $dir/$name # Delete the libtool libraries and symlinks. for n in $library_names; do func_append rmfiles " $odir/$n" done test -n "$old_library" && func_append rmfiles " $odir/$old_library" case "$opt_mode" in clean) case " $library_names " in *" $dlname "*) ;; *) test -n "$dlname" && func_append rmfiles " $odir/$dlname" ;; esac test -n "$libdir" && func_append rmfiles " $odir/$name $odir/${name}i" ;; uninstall) if test -n "$library_names"; then # Do each command in the postuninstall commands. func_execute_cmds "$postuninstall_cmds" 'test "$rmforce" = yes || exit_status=1' fi if test -n "$old_library"; then # Do each command in the old_postuninstall commands. func_execute_cmds "$old_postuninstall_cmds" 'test "$rmforce" = yes || exit_status=1' fi # FIXME: should reinstall the best remaining shared library. ;; esac fi ;; *.lo) # Possibly a libtool object, so verify it. if func_lalib_p "$file"; then # Read the .lo file func_source $dir/$name # Add PIC object to the list of files to remove. if test -n "$pic_object" && test "$pic_object" != none; then func_append rmfiles " $dir/$pic_object" fi # Add non-PIC object to the list of files to remove. if test -n "$non_pic_object" && test "$non_pic_object" != none; then func_append rmfiles " $dir/$non_pic_object" fi fi ;; *) if test "$opt_mode" = clean ; then noexename=$name case $file in *.exe) func_stripname '' '.exe' "$file" file=$func_stripname_result func_stripname '' '.exe' "$name" noexename=$func_stripname_result # $file with .exe has already been added to rmfiles, # add $file without .exe func_append rmfiles " $file" ;; esac # Do a test to see if this is a libtool program. if func_ltwrapper_p "$file"; then if func_ltwrapper_executable_p "$file"; then func_ltwrapper_scriptname "$file" relink_command= func_source $func_ltwrapper_scriptname_result func_append rmfiles " $func_ltwrapper_scriptname_result" else relink_command= func_source $dir/$noexename fi # note $name still contains .exe if it was in $file originally # as does the version of $file that was added into $rmfiles func_append rmfiles " $odir/$name $odir/${name}S.${objext}" if test "$fast_install" = yes && test -n "$relink_command"; then func_append rmfiles " $odir/lt-$name" fi if test "X$noexename" != "X$name" ; then func_append rmfiles " $odir/lt-${noexename}.c" fi fi fi ;; esac func_show_eval "$RM $rmfiles" 'exit_status=1' done # Try to remove the ${objdir}s in the directories where we deleted files for dir in $rmdirs; do if test -d "$dir"; then func_show_eval "rmdir $dir >/dev/null 2>&1" fi done exit $exit_status } { test "$opt_mode" = uninstall || test "$opt_mode" = clean; } && func_mode_uninstall ${1+"$@"} test -z "$opt_mode" && { help="$generic_help" func_fatal_help "you must specify a MODE" } test -z "$exec_cmd" && \ func_fatal_help "invalid operation mode \`$opt_mode'" if test -n "$exec_cmd"; then eval exec "$exec_cmd" exit $EXIT_FAILURE fi exit $exit_status # The TAGs below are defined such that we never get into a situation # in which we disable both kinds of libraries. Given conflicting # choices, we go for a static library, that is the most portable, # since we can't tell whether shared libraries were disabled because # the user asked for that or because the platform doesn't support # them. This is particularly important on AIX, because we don't # support having both static and shared libraries enabled at the same # time on that platform, so we default to a shared-only configuration. # If a disable-shared tag is given, we'll fallback to a static-only # configuration. But we'll never go from static-only to shared-only. # ### BEGIN LIBTOOL TAG CONFIG: disable-shared build_libtool_libs=no build_old_libs=yes # ### END LIBTOOL TAG CONFIG: disable-shared # ### BEGIN LIBTOOL TAG CONFIG: disable-static build_old_libs=`case $build_libtool_libs in yes) echo no;; *) echo yes;; esac` # ### END LIBTOOL TAG CONFIG: disable-static # Local Variables: # mode:shell-script # sh-indentation:2 # End: # vi:sw=2 yaz-4.2.30/config/install-sh0000755000175000017500000003325611713710362012607 00000000000000#!/bin/sh # install - install a program, script, or datafile scriptversion=2011-01-19.21; # UTC # This originates from X11R5 (mit/util/scripts/install.sh), which was # later released in X11R6 (xc/config/util/install.sh) with the # following copyright and license. # # Copyright (C) 1994 X Consortium # # Permission is hereby granted, free of charge, to any person obtaining a copy # of this software and associated documentation files (the "Software"), to # deal in the Software without restriction, including without limitation the # rights to use, copy, modify, merge, publish, distribute, sublicense, and/or # sell copies of the Software, and to permit persons to whom the Software is # furnished to do so, subject to the following conditions: # # The above copyright notice and this permission notice shall be included in # all copies or substantial portions of the Software. # # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR # IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, # FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE # X CONSORTIUM BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN # AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNEC- # TION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. # # Except as contained in this notice, the name of the X Consortium shall not # be used in advertising or otherwise to promote the sale, use or other deal- # ings in this Software without prior written authorization from the X Consor- # tium. # # # FSF changes to this file are in the public domain. # # Calling this script install-sh is preferred over install.sh, to prevent # `make' implicit rules from creating a file called install from it # when there is no Makefile. # # This script is compatible with the BSD install script, but was written # from scratch. nl=' ' IFS=" "" $nl" # set DOITPROG to echo to test this script # Don't use :- since 4.3BSD and earlier shells don't like it. doit=${DOITPROG-} if test -z "$doit"; then doit_exec=exec else doit_exec=$doit fi # Put in absolute file names if you don't have them in your path; # or use environment vars. chgrpprog=${CHGRPPROG-chgrp} chmodprog=${CHMODPROG-chmod} chownprog=${CHOWNPROG-chown} cmpprog=${CMPPROG-cmp} cpprog=${CPPROG-cp} mkdirprog=${MKDIRPROG-mkdir} mvprog=${MVPROG-mv} rmprog=${RMPROG-rm} stripprog=${STRIPPROG-strip} posix_glob='?' initialize_posix_glob=' test "$posix_glob" != "?" || { if (set -f) 2>/dev/null; then posix_glob= else posix_glob=: fi } ' posix_mkdir= # Desired mode of installed file. mode=0755 chgrpcmd= chmodcmd=$chmodprog chowncmd= mvcmd=$mvprog rmcmd="$rmprog -f" stripcmd= src= dst= dir_arg= dst_arg= copy_on_change=false no_target_directory= usage="\ Usage: $0 [OPTION]... [-T] SRCFILE DSTFILE or: $0 [OPTION]... SRCFILES... DIRECTORY or: $0 [OPTION]... -t DIRECTORY SRCFILES... or: $0 [OPTION]... -d DIRECTORIES... In the 1st form, copy SRCFILE to DSTFILE. In the 2nd and 3rd, copy all SRCFILES to DIRECTORY. In the 4th, create DIRECTORIES. Options: --help display this help and exit. --version display version info and exit. -c (ignored) -C install only if different (preserve the last data modification time) -d create directories instead of installing files. -g GROUP $chgrpprog installed files to GROUP. -m MODE $chmodprog installed files to MODE. -o USER $chownprog installed files to USER. -s $stripprog installed files. -t DIRECTORY install into DIRECTORY. -T report an error if DSTFILE is a directory. Environment variables override the default commands: CHGRPPROG CHMODPROG CHOWNPROG CMPPROG CPPROG MKDIRPROG MVPROG RMPROG STRIPPROG " while test $# -ne 0; do case $1 in -c) ;; -C) copy_on_change=true;; -d) dir_arg=true;; -g) chgrpcmd="$chgrpprog $2" shift;; --help) echo "$usage"; exit $?;; -m) mode=$2 case $mode in *' '* | *' '* | *' '* | *'*'* | *'?'* | *'['*) echo "$0: invalid mode: $mode" >&2 exit 1;; esac shift;; -o) chowncmd="$chownprog $2" shift;; -s) stripcmd=$stripprog;; -t) dst_arg=$2 # Protect names problematic for `test' and other utilities. case $dst_arg in -* | [=\(\)!]) dst_arg=./$dst_arg;; esac shift;; -T) no_target_directory=true;; --version) echo "$0 $scriptversion"; exit $?;; --) shift break;; -*) echo "$0: invalid option: $1" >&2 exit 1;; *) break;; esac shift done if test $# -ne 0 && test -z "$dir_arg$dst_arg"; then # When -d is used, all remaining arguments are directories to create. # When -t is used, the destination is already specified. # Otherwise, the last argument is the destination. Remove it from $@. for arg do if test -n "$dst_arg"; then # $@ is not empty: it contains at least $arg. set fnord "$@" "$dst_arg" shift # fnord fi shift # arg dst_arg=$arg # Protect names problematic for `test' and other utilities. case $dst_arg in -* | [=\(\)!]) dst_arg=./$dst_arg;; esac done fi if test $# -eq 0; then if test -z "$dir_arg"; then echo "$0: no input file specified." >&2 exit 1 fi # It's OK to call `install-sh -d' without argument. # This can happen when creating conditional directories. exit 0 fi if test -z "$dir_arg"; then do_exit='(exit $ret); exit $ret' trap "ret=129; $do_exit" 1 trap "ret=130; $do_exit" 2 trap "ret=141; $do_exit" 13 trap "ret=143; $do_exit" 15 # Set umask so as not to create temps with too-generous modes. # However, 'strip' requires both read and write access to temps. case $mode in # Optimize common cases. *644) cp_umask=133;; *755) cp_umask=22;; *[0-7]) if test -z "$stripcmd"; then u_plus_rw= else u_plus_rw='% 200' fi cp_umask=`expr '(' 777 - $mode % 1000 ')' $u_plus_rw`;; *) if test -z "$stripcmd"; then u_plus_rw= else u_plus_rw=,u+rw fi cp_umask=$mode$u_plus_rw;; esac fi for src do # Protect names problematic for `test' and other utilities. case $src in -* | [=\(\)!]) src=./$src;; esac if test -n "$dir_arg"; then dst=$src dstdir=$dst test -d "$dstdir" dstdir_status=$? else # Waiting for this to be detected by the "$cpprog $src $dsttmp" command # might cause directories to be created, which would be especially bad # if $src (and thus $dsttmp) contains '*'. if test ! -f "$src" && test ! -d "$src"; then echo "$0: $src does not exist." >&2 exit 1 fi if test -z "$dst_arg"; then echo "$0: no destination specified." >&2 exit 1 fi dst=$dst_arg # If destination is a directory, append the input filename; won't work # if double slashes aren't ignored. if test -d "$dst"; then if test -n "$no_target_directory"; then echo "$0: $dst_arg: Is a directory" >&2 exit 1 fi dstdir=$dst dst=$dstdir/`basename "$src"` dstdir_status=0 else # Prefer dirname, but fall back on a substitute if dirname fails. dstdir=` (dirname "$dst") 2>/dev/null || expr X"$dst" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$dst" : 'X\(//\)[^/]' \| \ X"$dst" : 'X\(//\)$' \| \ X"$dst" : 'X\(/\)' \| . 2>/dev/null || echo X"$dst" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/ q } /^X\(\/\/\)[^/].*/{ s//\1/ q } /^X\(\/\/\)$/{ s//\1/ q } /^X\(\/\).*/{ s//\1/ q } s/.*/./; q' ` test -d "$dstdir" dstdir_status=$? fi fi obsolete_mkdir_used=false if test $dstdir_status != 0; then case $posix_mkdir in '') # Create intermediate dirs using mode 755 as modified by the umask. # This is like FreeBSD 'install' as of 1997-10-28. umask=`umask` case $stripcmd.$umask in # Optimize common cases. *[2367][2367]) mkdir_umask=$umask;; .*0[02][02] | .[02][02] | .[02]) mkdir_umask=22;; *[0-7]) mkdir_umask=`expr $umask + 22 \ - $umask % 100 % 40 + $umask % 20 \ - $umask % 10 % 4 + $umask % 2 `;; *) mkdir_umask=$umask,go-w;; esac # With -d, create the new directory with the user-specified mode. # Otherwise, rely on $mkdir_umask. if test -n "$dir_arg"; then mkdir_mode=-m$mode else mkdir_mode= fi posix_mkdir=false case $umask in *[123567][0-7][0-7]) # POSIX mkdir -p sets u+wx bits regardless of umask, which # is incompatible with FreeBSD 'install' when (umask & 300) != 0. ;; *) tmpdir=${TMPDIR-/tmp}/ins$RANDOM-$$ trap 'ret=$?; rmdir "$tmpdir/d" "$tmpdir" 2>/dev/null; exit $ret' 0 if (umask $mkdir_umask && exec $mkdirprog $mkdir_mode -p -- "$tmpdir/d") >/dev/null 2>&1 then if test -z "$dir_arg" || { # Check for POSIX incompatibilities with -m. # HP-UX 11.23 and IRIX 6.5 mkdir -m -p sets group- or # other-writeable bit of parent directory when it shouldn't. # FreeBSD 6.1 mkdir -m -p sets mode of existing directory. ls_ld_tmpdir=`ls -ld "$tmpdir"` case $ls_ld_tmpdir in d????-?r-*) different_mode=700;; d????-?--*) different_mode=755;; *) false;; esac && $mkdirprog -m$different_mode -p -- "$tmpdir" && { ls_ld_tmpdir_1=`ls -ld "$tmpdir"` test "$ls_ld_tmpdir" = "$ls_ld_tmpdir_1" } } then posix_mkdir=: fi rmdir "$tmpdir/d" "$tmpdir" else # Remove any dirs left behind by ancient mkdir implementations. rmdir ./$mkdir_mode ./-p ./-- 2>/dev/null fi trap '' 0;; esac;; esac if $posix_mkdir && ( umask $mkdir_umask && $doit_exec $mkdirprog $mkdir_mode -p -- "$dstdir" ) then : else # The umask is ridiculous, or mkdir does not conform to POSIX, # or it failed possibly due to a race condition. Create the # directory the slow way, step by step, checking for races as we go. case $dstdir in /*) prefix='/';; [-=\(\)!]*) prefix='./';; *) prefix='';; esac eval "$initialize_posix_glob" oIFS=$IFS IFS=/ $posix_glob set -f set fnord $dstdir shift $posix_glob set +f IFS=$oIFS prefixes= for d do test X"$d" = X && continue prefix=$prefix$d if test -d "$prefix"; then prefixes= else if $posix_mkdir; then (umask=$mkdir_umask && $doit_exec $mkdirprog $mkdir_mode -p -- "$dstdir") && break # Don't fail if two instances are running concurrently. test -d "$prefix" || exit 1 else case $prefix in *\'*) qprefix=`echo "$prefix" | sed "s/'/'\\\\\\\\''/g"`;; *) qprefix=$prefix;; esac prefixes="$prefixes '$qprefix'" fi fi prefix=$prefix/ done if test -n "$prefixes"; then # Don't fail if two instances are running concurrently. (umask $mkdir_umask && eval "\$doit_exec \$mkdirprog $prefixes") || test -d "$dstdir" || exit 1 obsolete_mkdir_used=true fi fi fi if test -n "$dir_arg"; then { test -z "$chowncmd" || $doit $chowncmd "$dst"; } && { test -z "$chgrpcmd" || $doit $chgrpcmd "$dst"; } && { test "$obsolete_mkdir_used$chowncmd$chgrpcmd" = false || test -z "$chmodcmd" || $doit $chmodcmd $mode "$dst"; } || exit 1 else # Make a couple of temp file names in the proper directory. dsttmp=$dstdir/_inst.$$_ rmtmp=$dstdir/_rm.$$_ # Trap to clean up those temp files at exit. trap 'ret=$?; rm -f "$dsttmp" "$rmtmp" && exit $ret' 0 # Copy the file name to the temp name. (umask $cp_umask && $doit_exec $cpprog "$src" "$dsttmp") && # and set any options; do chmod last to preserve setuid bits. # # If any of these fail, we abort the whole thing. If we want to # ignore errors from any of these, just make sure not to ignore # errors from the above "$doit $cpprog $src $dsttmp" command. # { test -z "$chowncmd" || $doit $chowncmd "$dsttmp"; } && { test -z "$chgrpcmd" || $doit $chgrpcmd "$dsttmp"; } && { test -z "$stripcmd" || $doit $stripcmd "$dsttmp"; } && { test -z "$chmodcmd" || $doit $chmodcmd $mode "$dsttmp"; } && # If -C, don't bother to copy if it wouldn't change the file. if $copy_on_change && old=`LC_ALL=C ls -dlL "$dst" 2>/dev/null` && new=`LC_ALL=C ls -dlL "$dsttmp" 2>/dev/null` && eval "$initialize_posix_glob" && $posix_glob set -f && set X $old && old=:$2:$4:$5:$6 && set X $new && new=:$2:$4:$5:$6 && $posix_glob set +f && test "$old" = "$new" && $cmpprog "$dst" "$dsttmp" >/dev/null 2>&1 then rm -f "$dsttmp" else # Rename the file to the real destination. $doit $mvcmd -f "$dsttmp" "$dst" 2>/dev/null || # The rename failed, perhaps because mv can't rename something else # to itself, or perhaps because mv is so ancient that it does not # support -f. { # Now remove or move aside any old file at destination location. # We try this two ways since rm can't unlink itself on some # systems and the destination file might be busy for other # reasons. In this case, the final cleanup might fail but the new # file should still install successfully. { test ! -f "$dst" || $doit $rmcmd -f "$dst" 2>/dev/null || { $doit $mvcmd -f "$dst" "$rmtmp" 2>/dev/null && { $doit $rmcmd -f "$rmtmp" 2>/dev/null; :; } } || { echo "$0: cannot unlink or rename $dst" >&2 (exit 1); exit 1 } } && # Now rename the file to the real destination. $doit $mvcmd "$dsttmp" "$dst" } fi || exit 1 trap '' 0 fi done # Local variables: # eval: (add-hook 'write-file-hooks 'time-stamp) # time-stamp-start: "scriptversion=" # time-stamp-format: "%:y-%02m-%02d.%02H" # time-stamp-time-zone: "UTC" # time-stamp-end: "; # UTC" # End: yaz-4.2.30/config/config.guess0000755000175000017500000012743211716337145013132 00000000000000#! /bin/sh # Attempt to guess a canonical system name. # Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, # 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, # 2011, 2012 Free Software Foundation, Inc. timestamp='2012-02-10' # This file is free software; you can redistribute it and/or modify it # under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 2 of the License, or # (at your option) any later version. # # This program is distributed in the hope that it will be useful, but # WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU # General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program; if not, see . # # As a special exception to the GNU General Public License, if you # distribute this file as part of a program that contains a # configuration script generated by Autoconf, you may include it under # the same distribution terms that you use for the rest of that program. # Originally written by Per Bothner. Please send patches (context # diff format) to and include a ChangeLog # entry. # # This script attempts to guess a canonical system name similar to # config.sub. If it succeeds, it prints the system name on stdout, and # exits with 0. Otherwise, it exits with 1. # # You can get the latest version of this script from: # http://git.savannah.gnu.org/gitweb/?p=config.git;a=blob_plain;f=config.guess;hb=HEAD me=`echo "$0" | sed -e 's,.*/,,'` usage="\ Usage: $0 [OPTION] Output the configuration name of the system \`$me' is run on. Operation modes: -h, --help print this help, then exit -t, --time-stamp print date of last modification, then exit -v, --version print version number, then exit Report bugs and patches to ." version="\ GNU config.guess ($timestamp) Originally written by Per Bothner. Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011, 2012 Free Software Foundation, Inc. This is free software; see the source for copying conditions. There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE." help=" Try \`$me --help' for more information." # Parse command line while test $# -gt 0 ; do case $1 in --time-stamp | --time* | -t ) echo "$timestamp" ; exit ;; --version | -v ) echo "$version" ; exit ;; --help | --h* | -h ) echo "$usage"; exit ;; -- ) # Stop option processing shift; break ;; - ) # Use stdin as input. break ;; -* ) echo "$me: invalid option $1$help" >&2 exit 1 ;; * ) break ;; esac done if test $# != 0; then echo "$me: too many arguments$help" >&2 exit 1 fi trap 'exit 1' 1 2 15 # CC_FOR_BUILD -- compiler used by this script. Note that the use of a # compiler to aid in system detection is discouraged as it requires # temporary files to be created and, as you can see below, it is a # headache to deal with in a portable fashion. # Historically, `CC_FOR_BUILD' used to be named `HOST_CC'. We still # use `HOST_CC' if defined, but it is deprecated. # Portable tmp directory creation inspired by the Autoconf team. set_cc_for_build=' trap "exitcode=\$?; (rm -f \$tmpfiles 2>/dev/null; rmdir \$tmp 2>/dev/null) && exit \$exitcode" 0 ; trap "rm -f \$tmpfiles 2>/dev/null; rmdir \$tmp 2>/dev/null; exit 1" 1 2 13 15 ; : ${TMPDIR=/tmp} ; { tmp=`(umask 077 && mktemp -d "$TMPDIR/cgXXXXXX") 2>/dev/null` && test -n "$tmp" && test -d "$tmp" ; } || { test -n "$RANDOM" && tmp=$TMPDIR/cg$$-$RANDOM && (umask 077 && mkdir $tmp) ; } || { tmp=$TMPDIR/cg-$$ && (umask 077 && mkdir $tmp) && echo "Warning: creating insecure temp directory" >&2 ; } || { echo "$me: cannot create a temporary directory in $TMPDIR" >&2 ; exit 1 ; } ; dummy=$tmp/dummy ; tmpfiles="$dummy.c $dummy.o $dummy.rel $dummy" ; case $CC_FOR_BUILD,$HOST_CC,$CC in ,,) echo "int x;" > $dummy.c ; for c in cc gcc c89 c99 ; do if ($c -c -o $dummy.o $dummy.c) >/dev/null 2>&1 ; then CC_FOR_BUILD="$c"; break ; fi ; done ; if test x"$CC_FOR_BUILD" = x ; then CC_FOR_BUILD=no_compiler_found ; fi ;; ,,*) CC_FOR_BUILD=$CC ;; ,*,*) CC_FOR_BUILD=$HOST_CC ;; esac ; set_cc_for_build= ;' # This is needed to find uname on a Pyramid OSx when run in the BSD universe. # (ghazi@noc.rutgers.edu 1994-08-24) if (test -f /.attbin/uname) >/dev/null 2>&1 ; then PATH=$PATH:/.attbin ; export PATH fi UNAME_MACHINE=`(uname -m) 2>/dev/null` || UNAME_MACHINE=unknown UNAME_RELEASE=`(uname -r) 2>/dev/null` || UNAME_RELEASE=unknown UNAME_SYSTEM=`(uname -s) 2>/dev/null` || UNAME_SYSTEM=unknown UNAME_VERSION=`(uname -v) 2>/dev/null` || UNAME_VERSION=unknown # Note: order is significant - the case branches are not exclusive. case "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" in *:NetBSD:*:*) # NetBSD (nbsd) targets should (where applicable) match one or # more of the tuples: *-*-netbsdelf*, *-*-netbsdaout*, # *-*-netbsdecoff* and *-*-netbsd*. For targets that recently # switched to ELF, *-*-netbsd* would select the old # object file format. This provides both forward # compatibility and a consistent mechanism for selecting the # object file format. # # Note: NetBSD doesn't particularly care about the vendor # portion of the name. We always set it to "unknown". sysctl="sysctl -n hw.machine_arch" UNAME_MACHINE_ARCH=`(/sbin/$sysctl 2>/dev/null || \ /usr/sbin/$sysctl 2>/dev/null || echo unknown)` case "${UNAME_MACHINE_ARCH}" in armeb) machine=armeb-unknown ;; arm*) machine=arm-unknown ;; sh3el) machine=shl-unknown ;; sh3eb) machine=sh-unknown ;; sh5el) machine=sh5le-unknown ;; *) machine=${UNAME_MACHINE_ARCH}-unknown ;; esac # The Operating System including object format, if it has switched # to ELF recently, or will in the future. case "${UNAME_MACHINE_ARCH}" in arm*|i386|m68k|ns32k|sh3*|sparc|vax) eval $set_cc_for_build if echo __ELF__ | $CC_FOR_BUILD -E - 2>/dev/null \ | grep -q __ELF__ then # Once all utilities can be ECOFF (netbsdecoff) or a.out (netbsdaout). # Return netbsd for either. FIX? os=netbsd else os=netbsdelf fi ;; *) os=netbsd ;; esac # The OS release # Debian GNU/NetBSD machines have a different userland, and # thus, need a distinct triplet. However, they do not need # kernel version information, so it can be replaced with a # suitable tag, in the style of linux-gnu. case "${UNAME_VERSION}" in Debian*) release='-gnu' ;; *) release=`echo ${UNAME_RELEASE}|sed -e 's/[-_].*/\./'` ;; esac # Since CPU_TYPE-MANUFACTURER-KERNEL-OPERATING_SYSTEM: # contains redundant information, the shorter form: # CPU_TYPE-MANUFACTURER-OPERATING_SYSTEM is used. echo "${machine}-${os}${release}" exit ;; *:OpenBSD:*:*) UNAME_MACHINE_ARCH=`arch | sed 's/OpenBSD.//'` echo ${UNAME_MACHINE_ARCH}-unknown-openbsd${UNAME_RELEASE} exit ;; *:ekkoBSD:*:*) echo ${UNAME_MACHINE}-unknown-ekkobsd${UNAME_RELEASE} exit ;; *:SolidBSD:*:*) echo ${UNAME_MACHINE}-unknown-solidbsd${UNAME_RELEASE} exit ;; macppc:MirBSD:*:*) echo powerpc-unknown-mirbsd${UNAME_RELEASE} exit ;; *:MirBSD:*:*) echo ${UNAME_MACHINE}-unknown-mirbsd${UNAME_RELEASE} exit ;; alpha:OSF1:*:*) case $UNAME_RELEASE in *4.0) UNAME_RELEASE=`/usr/sbin/sizer -v | awk '{print $3}'` ;; *5.*) UNAME_RELEASE=`/usr/sbin/sizer -v | awk '{print $4}'` ;; esac # According to Compaq, /usr/sbin/psrinfo has been available on # OSF/1 and Tru64 systems produced since 1995. I hope that # covers most systems running today. This code pipes the CPU # types through head -n 1, so we only detect the type of CPU 0. ALPHA_CPU_TYPE=`/usr/sbin/psrinfo -v | sed -n -e 's/^ The alpha \(.*\) processor.*$/\1/p' | head -n 1` case "$ALPHA_CPU_TYPE" in "EV4 (21064)") UNAME_MACHINE="alpha" ;; "EV4.5 (21064)") UNAME_MACHINE="alpha" ;; "LCA4 (21066/21068)") UNAME_MACHINE="alpha" ;; "EV5 (21164)") UNAME_MACHINE="alphaev5" ;; "EV5.6 (21164A)") UNAME_MACHINE="alphaev56" ;; "EV5.6 (21164PC)") UNAME_MACHINE="alphapca56" ;; "EV5.7 (21164PC)") UNAME_MACHINE="alphapca57" ;; "EV6 (21264)") UNAME_MACHINE="alphaev6" ;; "EV6.7 (21264A)") UNAME_MACHINE="alphaev67" ;; "EV6.8CB (21264C)") UNAME_MACHINE="alphaev68" ;; "EV6.8AL (21264B)") UNAME_MACHINE="alphaev68" ;; "EV6.8CX (21264D)") UNAME_MACHINE="alphaev68" ;; "EV6.9A (21264/EV69A)") UNAME_MACHINE="alphaev69" ;; "EV7 (21364)") UNAME_MACHINE="alphaev7" ;; "EV7.9 (21364A)") UNAME_MACHINE="alphaev79" ;; esac # A Pn.n version is a patched version. # A Vn.n version is a released version. # A Tn.n version is a released field test version. # A Xn.n version is an unreleased experimental baselevel. # 1.2 uses "1.2" for uname -r. echo ${UNAME_MACHINE}-dec-osf`echo ${UNAME_RELEASE} | sed -e 's/^[PVTX]//' | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz'` # Reset EXIT trap before exiting to avoid spurious non-zero exit code. exitcode=$? trap '' 0 exit $exitcode ;; Alpha\ *:Windows_NT*:*) # How do we know it's Interix rather than the generic POSIX subsystem? # Should we change UNAME_MACHINE based on the output of uname instead # of the specific Alpha model? echo alpha-pc-interix exit ;; 21064:Windows_NT:50:3) echo alpha-dec-winnt3.5 exit ;; Amiga*:UNIX_System_V:4.0:*) echo m68k-unknown-sysv4 exit ;; *:[Aa]miga[Oo][Ss]:*:*) echo ${UNAME_MACHINE}-unknown-amigaos exit ;; *:[Mm]orph[Oo][Ss]:*:*) echo ${UNAME_MACHINE}-unknown-morphos exit ;; *:OS/390:*:*) echo i370-ibm-openedition exit ;; *:z/VM:*:*) echo s390-ibm-zvmoe exit ;; *:OS400:*:*) echo powerpc-ibm-os400 exit ;; arm:RISC*:1.[012]*:*|arm:riscix:1.[012]*:*) echo arm-acorn-riscix${UNAME_RELEASE} exit ;; arm:riscos:*:*|arm:RISCOS:*:*) echo arm-unknown-riscos exit ;; SR2?01:HI-UX/MPP:*:* | SR8000:HI-UX/MPP:*:*) echo hppa1.1-hitachi-hiuxmpp exit ;; Pyramid*:OSx*:*:* | MIS*:OSx*:*:* | MIS*:SMP_DC-OSx*:*:*) # akee@wpdis03.wpafb.af.mil (Earle F. Ake) contributed MIS and NILE. if test "`(/bin/universe) 2>/dev/null`" = att ; then echo pyramid-pyramid-sysv3 else echo pyramid-pyramid-bsd fi exit ;; NILE*:*:*:dcosx) echo pyramid-pyramid-svr4 exit ;; DRS?6000:unix:4.0:6*) echo sparc-icl-nx6 exit ;; DRS?6000:UNIX_SV:4.2*:7* | DRS?6000:isis:4.2*:7*) case `/usr/bin/uname -p` in sparc) echo sparc-icl-nx7; exit ;; esac ;; s390x:SunOS:*:*) echo ${UNAME_MACHINE}-ibm-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` exit ;; sun4H:SunOS:5.*:*) echo sparc-hal-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` exit ;; sun4*:SunOS:5.*:* | tadpole*:SunOS:5.*:*) echo sparc-sun-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` exit ;; i86pc:AuroraUX:5.*:* | i86xen:AuroraUX:5.*:*) echo i386-pc-auroraux${UNAME_RELEASE} exit ;; i86pc:SunOS:5.*:* | i86xen:SunOS:5.*:*) eval $set_cc_for_build SUN_ARCH="i386" # If there is a compiler, see if it is configured for 64-bit objects. # Note that the Sun cc does not turn __LP64__ into 1 like gcc does. # This test works for both compilers. if [ "$CC_FOR_BUILD" != 'no_compiler_found' ]; then if (echo '#ifdef __amd64'; echo IS_64BIT_ARCH; echo '#endif') | \ (CCOPTS= $CC_FOR_BUILD -E - 2>/dev/null) | \ grep IS_64BIT_ARCH >/dev/null then SUN_ARCH="x86_64" fi fi echo ${SUN_ARCH}-pc-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` exit ;; sun4*:SunOS:6*:*) # According to config.sub, this is the proper way to canonicalize # SunOS6. Hard to guess exactly what SunOS6 will be like, but # it's likely to be more like Solaris than SunOS4. echo sparc-sun-solaris3`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` exit ;; sun4*:SunOS:*:*) case "`/usr/bin/arch -k`" in Series*|S4*) UNAME_RELEASE=`uname -v` ;; esac # Japanese Language versions have a version number like `4.1.3-JL'. echo sparc-sun-sunos`echo ${UNAME_RELEASE}|sed -e 's/-/_/'` exit ;; sun3*:SunOS:*:*) echo m68k-sun-sunos${UNAME_RELEASE} exit ;; sun*:*:4.2BSD:*) UNAME_RELEASE=`(sed 1q /etc/motd | awk '{print substr($5,1,3)}') 2>/dev/null` test "x${UNAME_RELEASE}" = "x" && UNAME_RELEASE=3 case "`/bin/arch`" in sun3) echo m68k-sun-sunos${UNAME_RELEASE} ;; sun4) echo sparc-sun-sunos${UNAME_RELEASE} ;; esac exit ;; aushp:SunOS:*:*) echo sparc-auspex-sunos${UNAME_RELEASE} exit ;; # The situation for MiNT is a little confusing. The machine name # can be virtually everything (everything which is not # "atarist" or "atariste" at least should have a processor # > m68000). The system name ranges from "MiNT" over "FreeMiNT" # to the lowercase version "mint" (or "freemint"). Finally # the system name "TOS" denotes a system which is actually not # MiNT. But MiNT is downward compatible to TOS, so this should # be no problem. atarist[e]:*MiNT:*:* | atarist[e]:*mint:*:* | atarist[e]:*TOS:*:*) echo m68k-atari-mint${UNAME_RELEASE} exit ;; atari*:*MiNT:*:* | atari*:*mint:*:* | atarist[e]:*TOS:*:*) echo m68k-atari-mint${UNAME_RELEASE} exit ;; *falcon*:*MiNT:*:* | *falcon*:*mint:*:* | *falcon*:*TOS:*:*) echo m68k-atari-mint${UNAME_RELEASE} exit ;; milan*:*MiNT:*:* | milan*:*mint:*:* | *milan*:*TOS:*:*) echo m68k-milan-mint${UNAME_RELEASE} exit ;; hades*:*MiNT:*:* | hades*:*mint:*:* | *hades*:*TOS:*:*) echo m68k-hades-mint${UNAME_RELEASE} exit ;; *:*MiNT:*:* | *:*mint:*:* | *:*TOS:*:*) echo m68k-unknown-mint${UNAME_RELEASE} exit ;; m68k:machten:*:*) echo m68k-apple-machten${UNAME_RELEASE} exit ;; powerpc:machten:*:*) echo powerpc-apple-machten${UNAME_RELEASE} exit ;; RISC*:Mach:*:*) echo mips-dec-mach_bsd4.3 exit ;; RISC*:ULTRIX:*:*) echo mips-dec-ultrix${UNAME_RELEASE} exit ;; VAX*:ULTRIX*:*:*) echo vax-dec-ultrix${UNAME_RELEASE} exit ;; 2020:CLIX:*:* | 2430:CLIX:*:*) echo clipper-intergraph-clix${UNAME_RELEASE} exit ;; mips:*:*:UMIPS | mips:*:*:RISCos) eval $set_cc_for_build sed 's/^ //' << EOF >$dummy.c #ifdef __cplusplus #include /* for printf() prototype */ int main (int argc, char *argv[]) { #else int main (argc, argv) int argc; char *argv[]; { #endif #if defined (host_mips) && defined (MIPSEB) #if defined (SYSTYPE_SYSV) printf ("mips-mips-riscos%ssysv\n", argv[1]); exit (0); #endif #if defined (SYSTYPE_SVR4) printf ("mips-mips-riscos%ssvr4\n", argv[1]); exit (0); #endif #if defined (SYSTYPE_BSD43) || defined(SYSTYPE_BSD) printf ("mips-mips-riscos%sbsd\n", argv[1]); exit (0); #endif #endif exit (-1); } EOF $CC_FOR_BUILD -o $dummy $dummy.c && dummyarg=`echo "${UNAME_RELEASE}" | sed -n 's/\([0-9]*\).*/\1/p'` && SYSTEM_NAME=`$dummy $dummyarg` && { echo "$SYSTEM_NAME"; exit; } echo mips-mips-riscos${UNAME_RELEASE} exit ;; Motorola:PowerMAX_OS:*:*) echo powerpc-motorola-powermax exit ;; Motorola:*:4.3:PL8-*) echo powerpc-harris-powermax exit ;; Night_Hawk:*:*:PowerMAX_OS | Synergy:PowerMAX_OS:*:*) echo powerpc-harris-powermax exit ;; Night_Hawk:Power_UNIX:*:*) echo powerpc-harris-powerunix exit ;; m88k:CX/UX:7*:*) echo m88k-harris-cxux7 exit ;; m88k:*:4*:R4*) echo m88k-motorola-sysv4 exit ;; m88k:*:3*:R3*) echo m88k-motorola-sysv3 exit ;; AViiON:dgux:*:*) # DG/UX returns AViiON for all architectures UNAME_PROCESSOR=`/usr/bin/uname -p` if [ $UNAME_PROCESSOR = mc88100 ] || [ $UNAME_PROCESSOR = mc88110 ] then if [ ${TARGET_BINARY_INTERFACE}x = m88kdguxelfx ] || \ [ ${TARGET_BINARY_INTERFACE}x = x ] then echo m88k-dg-dgux${UNAME_RELEASE} else echo m88k-dg-dguxbcs${UNAME_RELEASE} fi else echo i586-dg-dgux${UNAME_RELEASE} fi exit ;; M88*:DolphinOS:*:*) # DolphinOS (SVR3) echo m88k-dolphin-sysv3 exit ;; M88*:*:R3*:*) # Delta 88k system running SVR3 echo m88k-motorola-sysv3 exit ;; XD88*:*:*:*) # Tektronix XD88 system running UTekV (SVR3) echo m88k-tektronix-sysv3 exit ;; Tek43[0-9][0-9]:UTek:*:*) # Tektronix 4300 system running UTek (BSD) echo m68k-tektronix-bsd exit ;; *:IRIX*:*:*) echo mips-sgi-irix`echo ${UNAME_RELEASE}|sed -e 's/-/_/g'` exit ;; ????????:AIX?:[12].1:2) # AIX 2.2.1 or AIX 2.1.1 is RT/PC AIX. echo romp-ibm-aix # uname -m gives an 8 hex-code CPU id exit ;; # Note that: echo "'`uname -s`'" gives 'AIX ' i*86:AIX:*:*) echo i386-ibm-aix exit ;; ia64:AIX:*:*) if [ -x /usr/bin/oslevel ] ; then IBM_REV=`/usr/bin/oslevel` else IBM_REV=${UNAME_VERSION}.${UNAME_RELEASE} fi echo ${UNAME_MACHINE}-ibm-aix${IBM_REV} exit ;; *:AIX:2:3) if grep bos325 /usr/include/stdio.h >/dev/null 2>&1; then eval $set_cc_for_build sed 's/^ //' << EOF >$dummy.c #include main() { if (!__power_pc()) exit(1); puts("powerpc-ibm-aix3.2.5"); exit(0); } EOF if $CC_FOR_BUILD -o $dummy $dummy.c && SYSTEM_NAME=`$dummy` then echo "$SYSTEM_NAME" else echo rs6000-ibm-aix3.2.5 fi elif grep bos324 /usr/include/stdio.h >/dev/null 2>&1; then echo rs6000-ibm-aix3.2.4 else echo rs6000-ibm-aix3.2 fi exit ;; *:AIX:*:[4567]) IBM_CPU_ID=`/usr/sbin/lsdev -C -c processor -S available | sed 1q | awk '{ print $1 }'` if /usr/sbin/lsattr -El ${IBM_CPU_ID} | grep ' POWER' >/dev/null 2>&1; then IBM_ARCH=rs6000 else IBM_ARCH=powerpc fi if [ -x /usr/bin/oslevel ] ; then IBM_REV=`/usr/bin/oslevel` else IBM_REV=${UNAME_VERSION}.${UNAME_RELEASE} fi echo ${IBM_ARCH}-ibm-aix${IBM_REV} exit ;; *:AIX:*:*) echo rs6000-ibm-aix exit ;; ibmrt:4.4BSD:*|romp-ibm:BSD:*) echo romp-ibm-bsd4.4 exit ;; ibmrt:*BSD:*|romp-ibm:BSD:*) # covers RT/PC BSD and echo romp-ibm-bsd${UNAME_RELEASE} # 4.3 with uname added to exit ;; # report: romp-ibm BSD 4.3 *:BOSX:*:*) echo rs6000-bull-bosx exit ;; DPX/2?00:B.O.S.:*:*) echo m68k-bull-sysv3 exit ;; 9000/[34]??:4.3bsd:1.*:*) echo m68k-hp-bsd exit ;; hp300:4.4BSD:*:* | 9000/[34]??:4.3bsd:2.*:*) echo m68k-hp-bsd4.4 exit ;; 9000/[34678]??:HP-UX:*:*) HPUX_REV=`echo ${UNAME_RELEASE}|sed -e 's/[^.]*.[0B]*//'` case "${UNAME_MACHINE}" in 9000/31? ) HP_ARCH=m68000 ;; 9000/[34]?? ) HP_ARCH=m68k ;; 9000/[678][0-9][0-9]) if [ -x /usr/bin/getconf ]; then sc_cpu_version=`/usr/bin/getconf SC_CPU_VERSION 2>/dev/null` sc_kernel_bits=`/usr/bin/getconf SC_KERNEL_BITS 2>/dev/null` case "${sc_cpu_version}" in 523) HP_ARCH="hppa1.0" ;; # CPU_PA_RISC1_0 528) HP_ARCH="hppa1.1" ;; # CPU_PA_RISC1_1 532) # CPU_PA_RISC2_0 case "${sc_kernel_bits}" in 32) HP_ARCH="hppa2.0n" ;; 64) HP_ARCH="hppa2.0w" ;; '') HP_ARCH="hppa2.0" ;; # HP-UX 10.20 esac ;; esac fi if [ "${HP_ARCH}" = "" ]; then eval $set_cc_for_build sed 's/^ //' << EOF >$dummy.c #define _HPUX_SOURCE #include #include int main () { #if defined(_SC_KERNEL_BITS) long bits = sysconf(_SC_KERNEL_BITS); #endif long cpu = sysconf (_SC_CPU_VERSION); switch (cpu) { case CPU_PA_RISC1_0: puts ("hppa1.0"); break; case CPU_PA_RISC1_1: puts ("hppa1.1"); break; case CPU_PA_RISC2_0: #if defined(_SC_KERNEL_BITS) switch (bits) { case 64: puts ("hppa2.0w"); break; case 32: puts ("hppa2.0n"); break; default: puts ("hppa2.0"); break; } break; #else /* !defined(_SC_KERNEL_BITS) */ puts ("hppa2.0"); break; #endif default: puts ("hppa1.0"); break; } exit (0); } EOF (CCOPTS= $CC_FOR_BUILD -o $dummy $dummy.c 2>/dev/null) && HP_ARCH=`$dummy` test -z "$HP_ARCH" && HP_ARCH=hppa fi ;; esac if [ ${HP_ARCH} = "hppa2.0w" ] then eval $set_cc_for_build # hppa2.0w-hp-hpux* has a 64-bit kernel and a compiler generating # 32-bit code. hppa64-hp-hpux* has the same kernel and a compiler # generating 64-bit code. GNU and HP use different nomenclature: # # $ CC_FOR_BUILD=cc ./config.guess # => hppa2.0w-hp-hpux11.23 # $ CC_FOR_BUILD="cc +DA2.0w" ./config.guess # => hppa64-hp-hpux11.23 if echo __LP64__ | (CCOPTS= $CC_FOR_BUILD -E - 2>/dev/null) | grep -q __LP64__ then HP_ARCH="hppa2.0w" else HP_ARCH="hppa64" fi fi echo ${HP_ARCH}-hp-hpux${HPUX_REV} exit ;; ia64:HP-UX:*:*) HPUX_REV=`echo ${UNAME_RELEASE}|sed -e 's/[^.]*.[0B]*//'` echo ia64-hp-hpux${HPUX_REV} exit ;; 3050*:HI-UX:*:*) eval $set_cc_for_build sed 's/^ //' << EOF >$dummy.c #include int main () { long cpu = sysconf (_SC_CPU_VERSION); /* The order matters, because CPU_IS_HP_MC68K erroneously returns true for CPU_PA_RISC1_0. CPU_IS_PA_RISC returns correct results, however. */ if (CPU_IS_PA_RISC (cpu)) { switch (cpu) { case CPU_PA_RISC1_0: puts ("hppa1.0-hitachi-hiuxwe2"); break; case CPU_PA_RISC1_1: puts ("hppa1.1-hitachi-hiuxwe2"); break; case CPU_PA_RISC2_0: puts ("hppa2.0-hitachi-hiuxwe2"); break; default: puts ("hppa-hitachi-hiuxwe2"); break; } } else if (CPU_IS_HP_MC68K (cpu)) puts ("m68k-hitachi-hiuxwe2"); else puts ("unknown-hitachi-hiuxwe2"); exit (0); } EOF $CC_FOR_BUILD -o $dummy $dummy.c && SYSTEM_NAME=`$dummy` && { echo "$SYSTEM_NAME"; exit; } echo unknown-hitachi-hiuxwe2 exit ;; 9000/7??:4.3bsd:*:* | 9000/8?[79]:4.3bsd:*:* ) echo hppa1.1-hp-bsd exit ;; 9000/8??:4.3bsd:*:*) echo hppa1.0-hp-bsd exit ;; *9??*:MPE/iX:*:* | *3000*:MPE/iX:*:*) echo hppa1.0-hp-mpeix exit ;; hp7??:OSF1:*:* | hp8?[79]:OSF1:*:* ) echo hppa1.1-hp-osf exit ;; hp8??:OSF1:*:*) echo hppa1.0-hp-osf exit ;; i*86:OSF1:*:*) if [ -x /usr/sbin/sysversion ] ; then echo ${UNAME_MACHINE}-unknown-osf1mk else echo ${UNAME_MACHINE}-unknown-osf1 fi exit ;; parisc*:Lites*:*:*) echo hppa1.1-hp-lites exit ;; C1*:ConvexOS:*:* | convex:ConvexOS:C1*:*) echo c1-convex-bsd exit ;; C2*:ConvexOS:*:* | convex:ConvexOS:C2*:*) if getsysinfo -f scalar_acc then echo c32-convex-bsd else echo c2-convex-bsd fi exit ;; C34*:ConvexOS:*:* | convex:ConvexOS:C34*:*) echo c34-convex-bsd exit ;; C38*:ConvexOS:*:* | convex:ConvexOS:C38*:*) echo c38-convex-bsd exit ;; C4*:ConvexOS:*:* | convex:ConvexOS:C4*:*) echo c4-convex-bsd exit ;; CRAY*Y-MP:*:*:*) echo ymp-cray-unicos${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' exit ;; CRAY*[A-Z]90:*:*:*) echo ${UNAME_MACHINE}-cray-unicos${UNAME_RELEASE} \ | sed -e 's/CRAY.*\([A-Z]90\)/\1/' \ -e y/ABCDEFGHIJKLMNOPQRSTUVWXYZ/abcdefghijklmnopqrstuvwxyz/ \ -e 's/\.[^.]*$/.X/' exit ;; CRAY*TS:*:*:*) echo t90-cray-unicos${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' exit ;; CRAY*T3E:*:*:*) echo alphaev5-cray-unicosmk${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' exit ;; CRAY*SV1:*:*:*) echo sv1-cray-unicos${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' exit ;; *:UNICOS/mp:*:*) echo craynv-cray-unicosmp${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' exit ;; F30[01]:UNIX_System_V:*:* | F700:UNIX_System_V:*:*) FUJITSU_PROC=`uname -m | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz'` FUJITSU_SYS=`uname -p | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz' | sed -e 's/\///'` FUJITSU_REL=`echo ${UNAME_RELEASE} | sed -e 's/ /_/'` echo "${FUJITSU_PROC}-fujitsu-${FUJITSU_SYS}${FUJITSU_REL}" exit ;; 5000:UNIX_System_V:4.*:*) FUJITSU_SYS=`uname -p | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz' | sed -e 's/\///'` FUJITSU_REL=`echo ${UNAME_RELEASE} | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz' | sed -e 's/ /_/'` echo "sparc-fujitsu-${FUJITSU_SYS}${FUJITSU_REL}" exit ;; i*86:BSD/386:*:* | i*86:BSD/OS:*:* | *:Ascend\ Embedded/OS:*:*) echo ${UNAME_MACHINE}-pc-bsdi${UNAME_RELEASE} exit ;; sparc*:BSD/OS:*:*) echo sparc-unknown-bsdi${UNAME_RELEASE} exit ;; *:BSD/OS:*:*) echo ${UNAME_MACHINE}-unknown-bsdi${UNAME_RELEASE} exit ;; *:FreeBSD:*:*) UNAME_PROCESSOR=`/usr/bin/uname -p` case ${UNAME_PROCESSOR} in amd64) echo x86_64-unknown-freebsd`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'` ;; *) echo ${UNAME_PROCESSOR}-unknown-freebsd`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'` ;; esac exit ;; i*:CYGWIN*:*) echo ${UNAME_MACHINE}-pc-cygwin exit ;; *:MINGW*:*) echo ${UNAME_MACHINE}-pc-mingw32 exit ;; i*:MSYS*:*) echo ${UNAME_MACHINE}-pc-msys exit ;; i*:windows32*:*) # uname -m includes "-pc" on this system. echo ${UNAME_MACHINE}-mingw32 exit ;; i*:PW*:*) echo ${UNAME_MACHINE}-pc-pw32 exit ;; *:Interix*:*) case ${UNAME_MACHINE} in x86) echo i586-pc-interix${UNAME_RELEASE} exit ;; authenticamd | genuineintel | EM64T) echo x86_64-unknown-interix${UNAME_RELEASE} exit ;; IA64) echo ia64-unknown-interix${UNAME_RELEASE} exit ;; esac ;; [345]86:Windows_95:* | [345]86:Windows_98:* | [345]86:Windows_NT:*) echo i${UNAME_MACHINE}-pc-mks exit ;; 8664:Windows_NT:*) echo x86_64-pc-mks exit ;; i*:Windows_NT*:* | Pentium*:Windows_NT*:*) # How do we know it's Interix rather than the generic POSIX subsystem? # It also conflicts with pre-2.0 versions of AT&T UWIN. Should we # UNAME_MACHINE based on the output of uname instead of i386? echo i586-pc-interix exit ;; i*:UWIN*:*) echo ${UNAME_MACHINE}-pc-uwin exit ;; amd64:CYGWIN*:*:* | x86_64:CYGWIN*:*:*) echo x86_64-unknown-cygwin exit ;; p*:CYGWIN*:*) echo powerpcle-unknown-cygwin exit ;; prep*:SunOS:5.*:*) echo powerpcle-unknown-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` exit ;; *:GNU:*:*) # the GNU system echo `echo ${UNAME_MACHINE}|sed -e 's,[-/].*$,,'`-unknown-gnu`echo ${UNAME_RELEASE}|sed -e 's,/.*$,,'` exit ;; *:GNU/*:*:*) # other systems with GNU libc and userland echo ${UNAME_MACHINE}-unknown-`echo ${UNAME_SYSTEM} | sed 's,^[^/]*/,,' | tr '[A-Z]' '[a-z]'``echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'`-gnu exit ;; i*86:Minix:*:*) echo ${UNAME_MACHINE}-pc-minix exit ;; aarch64:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-gnu exit ;; aarch64_be:Linux:*:*) UNAME_MACHINE=aarch64_be echo ${UNAME_MACHINE}-unknown-linux-gnu exit ;; alpha:Linux:*:*) case `sed -n '/^cpu model/s/^.*: \(.*\)/\1/p' < /proc/cpuinfo` in EV5) UNAME_MACHINE=alphaev5 ;; EV56) UNAME_MACHINE=alphaev56 ;; PCA56) UNAME_MACHINE=alphapca56 ;; PCA57) UNAME_MACHINE=alphapca56 ;; EV6) UNAME_MACHINE=alphaev6 ;; EV67) UNAME_MACHINE=alphaev67 ;; EV68*) UNAME_MACHINE=alphaev68 ;; esac objdump --private-headers /bin/sh | grep -q ld.so.1 if test "$?" = 0 ; then LIBC="libc1" ; else LIBC="" ; fi echo ${UNAME_MACHINE}-unknown-linux-gnu${LIBC} exit ;; arm*:Linux:*:*) eval $set_cc_for_build if echo __ARM_EABI__ | $CC_FOR_BUILD -E - 2>/dev/null \ | grep -q __ARM_EABI__ then echo ${UNAME_MACHINE}-unknown-linux-gnu else if echo __ARM_PCS_VFP | $CC_FOR_BUILD -E - 2>/dev/null \ | grep -q __ARM_PCS_VFP then echo ${UNAME_MACHINE}-unknown-linux-gnueabi else echo ${UNAME_MACHINE}-unknown-linux-gnueabihf fi fi exit ;; avr32*:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-gnu exit ;; cris:Linux:*:*) echo ${UNAME_MACHINE}-axis-linux-gnu exit ;; crisv32:Linux:*:*) echo ${UNAME_MACHINE}-axis-linux-gnu exit ;; frv:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-gnu exit ;; hexagon:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-gnu exit ;; i*86:Linux:*:*) LIBC=gnu eval $set_cc_for_build sed 's/^ //' << EOF >$dummy.c #ifdef __dietlibc__ LIBC=dietlibc #endif EOF eval `$CC_FOR_BUILD -E $dummy.c 2>/dev/null | grep '^LIBC'` echo "${UNAME_MACHINE}-pc-linux-${LIBC}" exit ;; ia64:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-gnu exit ;; m32r*:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-gnu exit ;; m68*:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-gnu exit ;; mips:Linux:*:* | mips64:Linux:*:*) eval $set_cc_for_build sed 's/^ //' << EOF >$dummy.c #undef CPU #undef ${UNAME_MACHINE} #undef ${UNAME_MACHINE}el #if defined(__MIPSEL__) || defined(__MIPSEL) || defined(_MIPSEL) || defined(MIPSEL) CPU=${UNAME_MACHINE}el #else #if defined(__MIPSEB__) || defined(__MIPSEB) || defined(_MIPSEB) || defined(MIPSEB) CPU=${UNAME_MACHINE} #else CPU= #endif #endif EOF eval `$CC_FOR_BUILD -E $dummy.c 2>/dev/null | grep '^CPU'` test x"${CPU}" != x && { echo "${CPU}-unknown-linux-gnu"; exit; } ;; or32:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-gnu exit ;; padre:Linux:*:*) echo sparc-unknown-linux-gnu exit ;; parisc64:Linux:*:* | hppa64:Linux:*:*) echo hppa64-unknown-linux-gnu exit ;; parisc:Linux:*:* | hppa:Linux:*:*) # Look for CPU level case `grep '^cpu[^a-z]*:' /proc/cpuinfo 2>/dev/null | cut -d' ' -f2` in PA7*) echo hppa1.1-unknown-linux-gnu ;; PA8*) echo hppa2.0-unknown-linux-gnu ;; *) echo hppa-unknown-linux-gnu ;; esac exit ;; ppc64:Linux:*:*) echo powerpc64-unknown-linux-gnu exit ;; ppc:Linux:*:*) echo powerpc-unknown-linux-gnu exit ;; s390:Linux:*:* | s390x:Linux:*:*) echo ${UNAME_MACHINE}-ibm-linux exit ;; sh64*:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-gnu exit ;; sh*:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-gnu exit ;; sparc:Linux:*:* | sparc64:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-gnu exit ;; tile*:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-gnu exit ;; vax:Linux:*:*) echo ${UNAME_MACHINE}-dec-linux-gnu exit ;; x86_64:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-gnu exit ;; xtensa*:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-gnu exit ;; i*86:DYNIX/ptx:4*:*) # ptx 4.0 does uname -s correctly, with DYNIX/ptx in there. # earlier versions are messed up and put the nodename in both # sysname and nodename. echo i386-sequent-sysv4 exit ;; i*86:UNIX_SV:4.2MP:2.*) # Unixware is an offshoot of SVR4, but it has its own version # number series starting with 2... # I am not positive that other SVR4 systems won't match this, # I just have to hope. -- rms. # Use sysv4.2uw... so that sysv4* matches it. echo ${UNAME_MACHINE}-pc-sysv4.2uw${UNAME_VERSION} exit ;; i*86:OS/2:*:*) # If we were able to find `uname', then EMX Unix compatibility # is probably installed. echo ${UNAME_MACHINE}-pc-os2-emx exit ;; i*86:XTS-300:*:STOP) echo ${UNAME_MACHINE}-unknown-stop exit ;; i*86:atheos:*:*) echo ${UNAME_MACHINE}-unknown-atheos exit ;; i*86:syllable:*:*) echo ${UNAME_MACHINE}-pc-syllable exit ;; i*86:LynxOS:2.*:* | i*86:LynxOS:3.[01]*:* | i*86:LynxOS:4.[02]*:*) echo i386-unknown-lynxos${UNAME_RELEASE} exit ;; i*86:*DOS:*:*) echo ${UNAME_MACHINE}-pc-msdosdjgpp exit ;; i*86:*:4.*:* | i*86:SYSTEM_V:4.*:*) UNAME_REL=`echo ${UNAME_RELEASE} | sed 's/\/MP$//'` if grep Novell /usr/include/link.h >/dev/null 2>/dev/null; then echo ${UNAME_MACHINE}-univel-sysv${UNAME_REL} else echo ${UNAME_MACHINE}-pc-sysv${UNAME_REL} fi exit ;; i*86:*:5:[678]*) # UnixWare 7.x, OpenUNIX and OpenServer 6. case `/bin/uname -X | grep "^Machine"` in *486*) UNAME_MACHINE=i486 ;; *Pentium) UNAME_MACHINE=i586 ;; *Pent*|*Celeron) UNAME_MACHINE=i686 ;; esac echo ${UNAME_MACHINE}-unknown-sysv${UNAME_RELEASE}${UNAME_SYSTEM}${UNAME_VERSION} exit ;; i*86:*:3.2:*) if test -f /usr/options/cb.name; then UNAME_REL=`sed -n 's/.*Version //p' /dev/null >/dev/null ; then UNAME_REL=`(/bin/uname -X|grep Release|sed -e 's/.*= //')` (/bin/uname -X|grep i80486 >/dev/null) && UNAME_MACHINE=i486 (/bin/uname -X|grep '^Machine.*Pentium' >/dev/null) \ && UNAME_MACHINE=i586 (/bin/uname -X|grep '^Machine.*Pent *II' >/dev/null) \ && UNAME_MACHINE=i686 (/bin/uname -X|grep '^Machine.*Pentium Pro' >/dev/null) \ && UNAME_MACHINE=i686 echo ${UNAME_MACHINE}-pc-sco$UNAME_REL else echo ${UNAME_MACHINE}-pc-sysv32 fi exit ;; pc:*:*:*) # Left here for compatibility: # uname -m prints for DJGPP always 'pc', but it prints nothing about # the processor, so we play safe by assuming i586. # Note: whatever this is, it MUST be the same as what config.sub # prints for the "djgpp" host, or else GDB configury will decide that # this is a cross-build. echo i586-pc-msdosdjgpp exit ;; Intel:Mach:3*:*) echo i386-pc-mach3 exit ;; paragon:*:*:*) echo i860-intel-osf1 exit ;; i860:*:4.*:*) # i860-SVR4 if grep Stardent /usr/include/sys/uadmin.h >/dev/null 2>&1 ; then echo i860-stardent-sysv${UNAME_RELEASE} # Stardent Vistra i860-SVR4 else # Add other i860-SVR4 vendors below as they are discovered. echo i860-unknown-sysv${UNAME_RELEASE} # Unknown i860-SVR4 fi exit ;; mini*:CTIX:SYS*5:*) # "miniframe" echo m68010-convergent-sysv exit ;; mc68k:UNIX:SYSTEM5:3.51m) echo m68k-convergent-sysv exit ;; M680?0:D-NIX:5.3:*) echo m68k-diab-dnix exit ;; M68*:*:R3V[5678]*:*) test -r /sysV68 && { echo 'm68k-motorola-sysv'; exit; } ;; 3[345]??:*:4.0:3.0 | 3[34]??A:*:4.0:3.0 | 3[34]??,*:*:4.0:3.0 | 3[34]??/*:*:4.0:3.0 | 4400:*:4.0:3.0 | 4850:*:4.0:3.0 | SKA40:*:4.0:3.0 | SDS2:*:4.0:3.0 | SHG2:*:4.0:3.0 | S7501*:*:4.0:3.0) OS_REL='' test -r /etc/.relid \ && OS_REL=.`sed -n 's/[^ ]* [^ ]* \([0-9][0-9]\).*/\1/p' < /etc/.relid` /bin/uname -p 2>/dev/null | grep 86 >/dev/null \ && { echo i486-ncr-sysv4.3${OS_REL}; exit; } /bin/uname -p 2>/dev/null | /bin/grep entium >/dev/null \ && { echo i586-ncr-sysv4.3${OS_REL}; exit; } ;; 3[34]??:*:4.0:* | 3[34]??,*:*:4.0:*) /bin/uname -p 2>/dev/null | grep 86 >/dev/null \ && { echo i486-ncr-sysv4; exit; } ;; NCR*:*:4.2:* | MPRAS*:*:4.2:*) OS_REL='.3' test -r /etc/.relid \ && OS_REL=.`sed -n 's/[^ ]* [^ ]* \([0-9][0-9]\).*/\1/p' < /etc/.relid` /bin/uname -p 2>/dev/null | grep 86 >/dev/null \ && { echo i486-ncr-sysv4.3${OS_REL}; exit; } /bin/uname -p 2>/dev/null | /bin/grep entium >/dev/null \ && { echo i586-ncr-sysv4.3${OS_REL}; exit; } /bin/uname -p 2>/dev/null | /bin/grep pteron >/dev/null \ && { echo i586-ncr-sysv4.3${OS_REL}; exit; } ;; m68*:LynxOS:2.*:* | m68*:LynxOS:3.0*:*) echo m68k-unknown-lynxos${UNAME_RELEASE} exit ;; mc68030:UNIX_System_V:4.*:*) echo m68k-atari-sysv4 exit ;; TSUNAMI:LynxOS:2.*:*) echo sparc-unknown-lynxos${UNAME_RELEASE} exit ;; rs6000:LynxOS:2.*:*) echo rs6000-unknown-lynxos${UNAME_RELEASE} exit ;; PowerPC:LynxOS:2.*:* | PowerPC:LynxOS:3.[01]*:* | PowerPC:LynxOS:4.[02]*:*) echo powerpc-unknown-lynxos${UNAME_RELEASE} exit ;; SM[BE]S:UNIX_SV:*:*) echo mips-dde-sysv${UNAME_RELEASE} exit ;; RM*:ReliantUNIX-*:*:*) echo mips-sni-sysv4 exit ;; RM*:SINIX-*:*:*) echo mips-sni-sysv4 exit ;; *:SINIX-*:*:*) if uname -p 2>/dev/null >/dev/null ; then UNAME_MACHINE=`(uname -p) 2>/dev/null` echo ${UNAME_MACHINE}-sni-sysv4 else echo ns32k-sni-sysv fi exit ;; PENTIUM:*:4.0*:*) # Unisys `ClearPath HMP IX 4000' SVR4/MP effort # says echo i586-unisys-sysv4 exit ;; *:UNIX_System_V:4*:FTX*) # From Gerald Hewes . # How about differentiating between stratus architectures? -djm echo hppa1.1-stratus-sysv4 exit ;; *:*:*:FTX*) # From seanf@swdc.stratus.com. echo i860-stratus-sysv4 exit ;; i*86:VOS:*:*) # From Paul.Green@stratus.com. echo ${UNAME_MACHINE}-stratus-vos exit ;; *:VOS:*:*) # From Paul.Green@stratus.com. echo hppa1.1-stratus-vos exit ;; mc68*:A/UX:*:*) echo m68k-apple-aux${UNAME_RELEASE} exit ;; news*:NEWS-OS:6*:*) echo mips-sony-newsos6 exit ;; R[34]000:*System_V*:*:* | R4000:UNIX_SYSV:*:* | R*000:UNIX_SV:*:*) if [ -d /usr/nec ]; then echo mips-nec-sysv${UNAME_RELEASE} else echo mips-unknown-sysv${UNAME_RELEASE} fi exit ;; BeBox:BeOS:*:*) # BeOS running on hardware made by Be, PPC only. echo powerpc-be-beos exit ;; BeMac:BeOS:*:*) # BeOS running on Mac or Mac clone, PPC only. echo powerpc-apple-beos exit ;; BePC:BeOS:*:*) # BeOS running on Intel PC compatible. echo i586-pc-beos exit ;; BePC:Haiku:*:*) # Haiku running on Intel PC compatible. echo i586-pc-haiku exit ;; SX-4:SUPER-UX:*:*) echo sx4-nec-superux${UNAME_RELEASE} exit ;; SX-5:SUPER-UX:*:*) echo sx5-nec-superux${UNAME_RELEASE} exit ;; SX-6:SUPER-UX:*:*) echo sx6-nec-superux${UNAME_RELEASE} exit ;; SX-7:SUPER-UX:*:*) echo sx7-nec-superux${UNAME_RELEASE} exit ;; SX-8:SUPER-UX:*:*) echo sx8-nec-superux${UNAME_RELEASE} exit ;; SX-8R:SUPER-UX:*:*) echo sx8r-nec-superux${UNAME_RELEASE} exit ;; Power*:Rhapsody:*:*) echo powerpc-apple-rhapsody${UNAME_RELEASE} exit ;; *:Rhapsody:*:*) echo ${UNAME_MACHINE}-apple-rhapsody${UNAME_RELEASE} exit ;; *:Darwin:*:*) UNAME_PROCESSOR=`uname -p` || UNAME_PROCESSOR=unknown case $UNAME_PROCESSOR in i386) eval $set_cc_for_build if [ "$CC_FOR_BUILD" != 'no_compiler_found' ]; then if (echo '#ifdef __LP64__'; echo IS_64BIT_ARCH; echo '#endif') | \ (CCOPTS= $CC_FOR_BUILD -E - 2>/dev/null) | \ grep IS_64BIT_ARCH >/dev/null then UNAME_PROCESSOR="x86_64" fi fi ;; unknown) UNAME_PROCESSOR=powerpc ;; esac echo ${UNAME_PROCESSOR}-apple-darwin${UNAME_RELEASE} exit ;; *:procnto*:*:* | *:QNX:[0123456789]*:*) UNAME_PROCESSOR=`uname -p` if test "$UNAME_PROCESSOR" = "x86"; then UNAME_PROCESSOR=i386 UNAME_MACHINE=pc fi echo ${UNAME_PROCESSOR}-${UNAME_MACHINE}-nto-qnx${UNAME_RELEASE} exit ;; *:QNX:*:4*) echo i386-pc-qnx exit ;; NEO-?:NONSTOP_KERNEL:*:*) echo neo-tandem-nsk${UNAME_RELEASE} exit ;; NSE-?:NONSTOP_KERNEL:*:*) echo nse-tandem-nsk${UNAME_RELEASE} exit ;; NSR-?:NONSTOP_KERNEL:*:*) echo nsr-tandem-nsk${UNAME_RELEASE} exit ;; *:NonStop-UX:*:*) echo mips-compaq-nonstopux exit ;; BS2000:POSIX*:*:*) echo bs2000-siemens-sysv exit ;; DS/*:UNIX_System_V:*:*) echo ${UNAME_MACHINE}-${UNAME_SYSTEM}-${UNAME_RELEASE} exit ;; *:Plan9:*:*) # "uname -m" is not consistent, so use $cputype instead. 386 # is converted to i386 for consistency with other x86 # operating systems. if test "$cputype" = "386"; then UNAME_MACHINE=i386 else UNAME_MACHINE="$cputype" fi echo ${UNAME_MACHINE}-unknown-plan9 exit ;; *:TOPS-10:*:*) echo pdp10-unknown-tops10 exit ;; *:TENEX:*:*) echo pdp10-unknown-tenex exit ;; KS10:TOPS-20:*:* | KL10:TOPS-20:*:* | TYPE4:TOPS-20:*:*) echo pdp10-dec-tops20 exit ;; XKL-1:TOPS-20:*:* | TYPE5:TOPS-20:*:*) echo pdp10-xkl-tops20 exit ;; *:TOPS-20:*:*) echo pdp10-unknown-tops20 exit ;; *:ITS:*:*) echo pdp10-unknown-its exit ;; SEI:*:*:SEIUX) echo mips-sei-seiux${UNAME_RELEASE} exit ;; *:DragonFly:*:*) echo ${UNAME_MACHINE}-unknown-dragonfly`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'` exit ;; *:*VMS:*:*) UNAME_MACHINE=`(uname -p) 2>/dev/null` case "${UNAME_MACHINE}" in A*) echo alpha-dec-vms ; exit ;; I*) echo ia64-dec-vms ; exit ;; V*) echo vax-dec-vms ; exit ;; esac ;; *:XENIX:*:SysV) echo i386-pc-xenix exit ;; i*86:skyos:*:*) echo ${UNAME_MACHINE}-pc-skyos`echo ${UNAME_RELEASE}` | sed -e 's/ .*$//' exit ;; i*86:rdos:*:*) echo ${UNAME_MACHINE}-pc-rdos exit ;; i*86:AROS:*:*) echo ${UNAME_MACHINE}-pc-aros exit ;; x86_64:VMkernel:*:*) echo ${UNAME_MACHINE}-unknown-esx exit ;; esac #echo '(No uname command or uname output not recognized.)' 1>&2 #echo "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" 1>&2 eval $set_cc_for_build cat >$dummy.c < # include #endif main () { #if defined (sony) #if defined (MIPSEB) /* BFD wants "bsd" instead of "newsos". Perhaps BFD should be changed, I don't know.... */ printf ("mips-sony-bsd\n"); exit (0); #else #include printf ("m68k-sony-newsos%s\n", #ifdef NEWSOS4 "4" #else "" #endif ); exit (0); #endif #endif #if defined (__arm) && defined (__acorn) && defined (__unix) printf ("arm-acorn-riscix\n"); exit (0); #endif #if defined (hp300) && !defined (hpux) printf ("m68k-hp-bsd\n"); exit (0); #endif #if defined (NeXT) #if !defined (__ARCHITECTURE__) #define __ARCHITECTURE__ "m68k" #endif int version; version=`(hostinfo | sed -n 's/.*NeXT Mach \([0-9]*\).*/\1/p') 2>/dev/null`; if (version < 4) printf ("%s-next-nextstep%d\n", __ARCHITECTURE__, version); else printf ("%s-next-openstep%d\n", __ARCHITECTURE__, version); exit (0); #endif #if defined (MULTIMAX) || defined (n16) #if defined (UMAXV) printf ("ns32k-encore-sysv\n"); exit (0); #else #if defined (CMU) printf ("ns32k-encore-mach\n"); exit (0); #else printf ("ns32k-encore-bsd\n"); exit (0); #endif #endif #endif #if defined (__386BSD__) printf ("i386-pc-bsd\n"); exit (0); #endif #if defined (sequent) #if defined (i386) printf ("i386-sequent-dynix\n"); exit (0); #endif #if defined (ns32000) printf ("ns32k-sequent-dynix\n"); exit (0); #endif #endif #if defined (_SEQUENT_) struct utsname un; uname(&un); if (strncmp(un.version, "V2", 2) == 0) { printf ("i386-sequent-ptx2\n"); exit (0); } if (strncmp(un.version, "V1", 2) == 0) { /* XXX is V1 correct? */ printf ("i386-sequent-ptx1\n"); exit (0); } printf ("i386-sequent-ptx\n"); exit (0); #endif #if defined (vax) # if !defined (ultrix) # include # if defined (BSD) # if BSD == 43 printf ("vax-dec-bsd4.3\n"); exit (0); # else # if BSD == 199006 printf ("vax-dec-bsd4.3reno\n"); exit (0); # else printf ("vax-dec-bsd\n"); exit (0); # endif # endif # else printf ("vax-dec-bsd\n"); exit (0); # endif # else printf ("vax-dec-ultrix\n"); exit (0); # endif #endif #if defined (alliant) && defined (i860) printf ("i860-alliant-bsd\n"); exit (0); #endif exit (1); } EOF $CC_FOR_BUILD -o $dummy $dummy.c 2>/dev/null && SYSTEM_NAME=`$dummy` && { echo "$SYSTEM_NAME"; exit; } # Apollos put the system type in the environment. test -d /usr/apollo && { echo ${ISP}-apollo-${SYSTYPE}; exit; } # Convex versions that predate uname can use getsysinfo(1) if [ -x /usr/convex/getsysinfo ] then case `getsysinfo -f cpu_type` in c1*) echo c1-convex-bsd exit ;; c2*) if getsysinfo -f scalar_acc then echo c32-convex-bsd else echo c2-convex-bsd fi exit ;; c34*) echo c34-convex-bsd exit ;; c38*) echo c38-convex-bsd exit ;; c4*) echo c4-convex-bsd exit ;; esac fi cat >&2 < in order to provide the needed information to handle your system. config.guess timestamp = $timestamp uname -m = `(uname -m) 2>/dev/null || echo unknown` uname -r = `(uname -r) 2>/dev/null || echo unknown` uname -s = `(uname -s) 2>/dev/null || echo unknown` uname -v = `(uname -v) 2>/dev/null || echo unknown` /usr/bin/uname -p = `(/usr/bin/uname -p) 2>/dev/null` /bin/uname -X = `(/bin/uname -X) 2>/dev/null` hostinfo = `(hostinfo) 2>/dev/null` /bin/universe = `(/bin/universe) 2>/dev/null` /usr/bin/arch -k = `(/usr/bin/arch -k) 2>/dev/null` /bin/arch = `(/bin/arch) 2>/dev/null` /usr/bin/oslevel = `(/usr/bin/oslevel) 2>/dev/null` /usr/convex/getsysinfo = `(/usr/convex/getsysinfo) 2>/dev/null` UNAME_MACHINE = ${UNAME_MACHINE} UNAME_RELEASE = ${UNAME_RELEASE} UNAME_SYSTEM = ${UNAME_SYSTEM} UNAME_VERSION = ${UNAME_VERSION} EOF exit 1 # Local variables: # eval: (add-hook 'write-file-hooks 'time-stamp) # time-stamp-start: "timestamp='" # time-stamp-format: "%:y-%02m-%02d" # time-stamp-end: "'" # End: yaz-4.2.30/config/ylwrap0000755000175000017500000001435711713710362012050 00000000000000#! /bin/sh # ylwrap - wrapper for lex/yacc invocations. scriptversion=2011-08-25.18; # UTC # Copyright (C) 1996, 1997, 1998, 1999, 2001, 2002, 2003, 2004, 2005, # 2007, 2009, 2010, 2011 Free Software Foundation, Inc. # # Written by Tom Tromey . # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 2, or (at your option) # any later version. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program. If not, see . # As a special exception to the GNU General Public License, if you # distribute this file as part of a program that contains a # configuration script generated by Autoconf, you may include it under # the same distribution terms that you use for the rest of that program. # This file is maintained in Automake, please report # bugs to or send patches to # . case "$1" in '') echo "$0: No files given. Try \`$0 --help' for more information." 1>&2 exit 1 ;; --basedir) basedir=$2 shift 2 ;; -h|--h*) cat <<\EOF Usage: ylwrap [--help|--version] INPUT [OUTPUT DESIRED]... -- PROGRAM [ARGS]... Wrapper for lex/yacc invocations, renaming files as desired. INPUT is the input file OUTPUT is one file PROG generates DESIRED is the file we actually want instead of OUTPUT PROGRAM is program to run ARGS are passed to PROG Any number of OUTPUT,DESIRED pairs may be used. Report bugs to . EOF exit $? ;; -v|--v*) echo "ylwrap $scriptversion" exit $? ;; esac # The input. input="$1" shift case "$input" in [\\/]* | ?:[\\/]*) # Absolute path; do nothing. ;; *) # Relative path. Make it absolute. input="`pwd`/$input" ;; esac pairlist= while test "$#" -ne 0; do if test "$1" = "--"; then shift break fi pairlist="$pairlist $1" shift done # The program to run. prog="$1" shift # Make any relative path in $prog absolute. case "$prog" in [\\/]* | ?:[\\/]*) ;; *[\\/]*) prog="`pwd`/$prog" ;; esac # FIXME: add hostname here for parallel makes that run commands on # other machines. But that might take us over the 14-char limit. dirname=ylwrap$$ do_exit="cd '`pwd`' && rm -rf $dirname > /dev/null 2>&1;"' (exit $ret); exit $ret' trap "ret=129; $do_exit" 1 trap "ret=130; $do_exit" 2 trap "ret=141; $do_exit" 13 trap "ret=143; $do_exit" 15 mkdir $dirname || exit 1 cd $dirname case $# in 0) "$prog" "$input" ;; *) "$prog" "$@" "$input" ;; esac ret=$? if test $ret -eq 0; then set X $pairlist shift first=yes # Since DOS filename conventions don't allow two dots, # the DOS version of Bison writes out y_tab.c instead of y.tab.c # and y_tab.h instead of y.tab.h. Test to see if this is the case. y_tab_nodot="no" if test -f y_tab.c || test -f y_tab.h; then y_tab_nodot="yes" fi # The directory holding the input. input_dir=`echo "$input" | sed -e 's,\([\\/]\)[^\\/]*$,\1,'` # Quote $INPUT_DIR so we can use it in a regexp. # FIXME: really we should care about more than `.' and `\'. input_rx=`echo "$input_dir" | sed 's,\\\\,\\\\\\\\,g;s,\\.,\\\\.,g'` while test "$#" -ne 0; do from="$1" # Handle y_tab.c and y_tab.h output by DOS if test $y_tab_nodot = "yes"; then if test $from = "y.tab.c"; then from="y_tab.c" else if test $from = "y.tab.h"; then from="y_tab.h" fi fi fi if test -f "$from"; then # If $2 is an absolute path name, then just use that, # otherwise prepend `../'. case "$2" in [\\/]* | ?:[\\/]*) target="$2";; *) target="../$2";; esac # We do not want to overwrite a header file if it hasn't # changed. This avoid useless recompilations. However the # parser itself (the first file) should always be updated, # because it is the destination of the .y.c rule in the # Makefile. Divert the output of all other files to a temporary # file so we can compare them to existing versions. if test $first = no; then realtarget="$target" target="tmp-`echo $target | sed s/.*[\\/]//g`" fi # Edit out `#line' or `#' directives. # # We don't want the resulting debug information to point at # an absolute srcdir; it is better for it to just mention the # .y file with no path. # # We want to use the real output file name, not yy.lex.c for # instance. # # We want the include guards to be adjusted too. FROM=`echo "$from" | sed \ -e 'y/abcdefghijklmnopqrstuvwxyz/ABCDEFGHIJKLMNOPQRSTUVWXYZ/'\ -e 's/[^ABCDEFGHIJKLMNOPQRSTUVWXYZ]/_/g'` TARGET=`echo "$2" | sed \ -e 'y/abcdefghijklmnopqrstuvwxyz/ABCDEFGHIJKLMNOPQRSTUVWXYZ/'\ -e 's/[^ABCDEFGHIJKLMNOPQRSTUVWXYZ]/_/g'` sed -e "/^#/!b" -e "s,$input_rx,," -e "s,$from,$2," \ -e "s,$FROM,$TARGET," "$from" >"$target" || ret=$? # Check whether header files must be updated. if test $first = no; then if test -f "$realtarget" && cmp -s "$realtarget" "$target"; then echo "$2" is unchanged rm -f "$target" else echo updating "$2" mv -f "$target" "$realtarget" fi fi else # A missing file is only an error for the first file. This # is a blatant hack to let us support using "yacc -d". If -d # is not specified, we don't want an error when the header # file is "missing". if test $first = yes; then ret=1 fi fi shift shift first=no done else ret=$? fi # Remove the directory. cd .. rm -rf $dirname exit $ret # Local Variables: # mode: shell-script # sh-indentation: 2 # eval: (add-hook 'write-file-hooks 'time-stamp) # time-stamp-start: "scriptversion=" # time-stamp-format: "%:y-%02m-%02d.%02H" # time-stamp-time-zone: "UTC" # time-stamp-end: "; # UTC" # End: yaz-4.2.30/config/config.sub0000755000175000017500000010517611716337145012576 00000000000000#! /bin/sh # Configuration validation subroutine script. # Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, # 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, # 2011, 2012 Free Software Foundation, Inc. timestamp='2012-02-10' # This file is (in principle) common to ALL GNU software. # The presence of a machine in this file suggests that SOME GNU software # can handle that machine. It does not imply ALL GNU software can. # # This file is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 2 of the License, or # (at your option) any later version. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program; if not, see . # # As a special exception to the GNU General Public License, if you # distribute this file as part of a program that contains a # configuration script generated by Autoconf, you may include it under # the same distribution terms that you use for the rest of that program. # Please send patches to . Submit a context # diff and a properly formatted GNU ChangeLog entry. # # Configuration subroutine to validate and canonicalize a configuration type. # Supply the specified configuration type as an argument. # If it is invalid, we print an error message on stderr and exit with code 1. # Otherwise, we print the canonical config type on stdout and succeed. # You can get the latest version of this script from: # http://git.savannah.gnu.org/gitweb/?p=config.git;a=blob_plain;f=config.sub;hb=HEAD # This file is supposed to be the same for all GNU packages # and recognize all the CPU types, system types and aliases # that are meaningful with *any* GNU software. # Each package is responsible for reporting which valid configurations # it does not support. The user should be able to distinguish # a failure to support a valid configuration from a meaningless # configuration. # The goal of this file is to map all the various variations of a given # machine specification into a single specification in the form: # CPU_TYPE-MANUFACTURER-OPERATING_SYSTEM # or in some cases, the newer four-part form: # CPU_TYPE-MANUFACTURER-KERNEL-OPERATING_SYSTEM # It is wrong to echo any other type of specification. me=`echo "$0" | sed -e 's,.*/,,'` usage="\ Usage: $0 [OPTION] CPU-MFR-OPSYS $0 [OPTION] ALIAS Canonicalize a configuration name. Operation modes: -h, --help print this help, then exit -t, --time-stamp print date of last modification, then exit -v, --version print version number, then exit Report bugs and patches to ." version="\ GNU config.sub ($timestamp) Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011, 2012 Free Software Foundation, Inc. This is free software; see the source for copying conditions. There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE." help=" Try \`$me --help' for more information." # Parse command line while test $# -gt 0 ; do case $1 in --time-stamp | --time* | -t ) echo "$timestamp" ; exit ;; --version | -v ) echo "$version" ; exit ;; --help | --h* | -h ) echo "$usage"; exit ;; -- ) # Stop option processing shift; break ;; - ) # Use stdin as input. break ;; -* ) echo "$me: invalid option $1$help" exit 1 ;; *local*) # First pass through any local machine types. echo $1 exit ;; * ) break ;; esac done case $# in 0) echo "$me: missing argument$help" >&2 exit 1;; 1) ;; *) echo "$me: too many arguments$help" >&2 exit 1;; esac # Separate what the user gave into CPU-COMPANY and OS or KERNEL-OS (if any). # Here we must recognize all the valid KERNEL-OS combinations. maybe_os=`echo $1 | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\2/'` case $maybe_os in nto-qnx* | linux-gnu* | linux-android* | linux-dietlibc | linux-newlib* | \ linux-uclibc* | uclinux-uclibc* | uclinux-gnu* | kfreebsd*-gnu* | \ knetbsd*-gnu* | netbsd*-gnu* | \ kopensolaris*-gnu* | \ storm-chaos* | os2-emx* | rtmk-nova*) os=-$maybe_os basic_machine=`echo $1 | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\1/'` ;; android-linux) os=-linux-android basic_machine=`echo $1 | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\1/'`-unknown ;; *) basic_machine=`echo $1 | sed 's/-[^-]*$//'` if [ $basic_machine != $1 ] then os=`echo $1 | sed 's/.*-/-/'` else os=; fi ;; esac ### Let's recognize common machines as not being operating systems so ### that things like config.sub decstation-3100 work. We also ### recognize some manufacturers as not being operating systems, so we ### can provide default operating systems below. case $os in -sun*os*) # Prevent following clause from handling this invalid input. ;; -dec* | -mips* | -sequent* | -encore* | -pc532* | -sgi* | -sony* | \ -att* | -7300* | -3300* | -delta* | -motorola* | -sun[234]* | \ -unicom* | -ibm* | -next | -hp | -isi* | -apollo | -altos* | \ -convergent* | -ncr* | -news | -32* | -3600* | -3100* | -hitachi* |\ -c[123]* | -convex* | -sun | -crds | -omron* | -dg | -ultra | -tti* | \ -harris | -dolphin | -highlevel | -gould | -cbm | -ns | -masscomp | \ -apple | -axis | -knuth | -cray | -microblaze) os= basic_machine=$1 ;; -bluegene*) os=-cnk ;; -sim | -cisco | -oki | -wec | -winbond) os= basic_machine=$1 ;; -scout) ;; -wrs) os=-vxworks basic_machine=$1 ;; -chorusos*) os=-chorusos basic_machine=$1 ;; -chorusrdb) os=-chorusrdb basic_machine=$1 ;; -hiux*) os=-hiuxwe2 ;; -sco6) os=-sco5v6 basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` ;; -sco5) os=-sco3.2v5 basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` ;; -sco4) os=-sco3.2v4 basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` ;; -sco3.2.[4-9]*) os=`echo $os | sed -e 's/sco3.2./sco3.2v/'` basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` ;; -sco3.2v[4-9]*) # Don't forget version if it is 3.2v4 or newer. basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` ;; -sco5v6*) # Don't forget version if it is 3.2v4 or newer. basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` ;; -sco*) os=-sco3.2v2 basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` ;; -udk*) basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` ;; -isc) os=-isc2.2 basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` ;; -clix*) basic_machine=clipper-intergraph ;; -isc*) basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` ;; -lynx*) os=-lynxos ;; -ptx*) basic_machine=`echo $1 | sed -e 's/86-.*/86-sequent/'` ;; -windowsnt*) os=`echo $os | sed -e 's/windowsnt/winnt/'` ;; -psos*) os=-psos ;; -mint | -mint[0-9]*) basic_machine=m68k-atari os=-mint ;; esac # Decode aliases for certain CPU-COMPANY combinations. case $basic_machine in # Recognize the basic CPU types without company name. # Some are omitted here because they have special meanings below. 1750a | 580 \ | a29k \ | aarch64 | aarch64_be \ | alpha | alphaev[4-8] | alphaev56 | alphaev6[78] | alphapca5[67] \ | alpha64 | alpha64ev[4-8] | alpha64ev56 | alpha64ev6[78] | alpha64pca5[67] \ | am33_2.0 \ | arc | arm | arm[bl]e | arme[lb] | armv[2345] | armv[345][lb] | avr | avr32 \ | be32 | be64 \ | bfin \ | c4x | clipper \ | d10v | d30v | dlx | dsp16xx \ | epiphany \ | fido | fr30 | frv \ | h8300 | h8500 | hppa | hppa1.[01] | hppa2.0 | hppa2.0[nw] | hppa64 \ | hexagon \ | i370 | i860 | i960 | ia64 \ | ip2k | iq2000 \ | le32 | le64 \ | lm32 \ | m32c | m32r | m32rle | m68000 | m68k | m88k \ | maxq | mb | microblaze | mcore | mep | metag \ | mips | mipsbe | mipseb | mipsel | mipsle \ | mips16 \ | mips64 | mips64el \ | mips64octeon | mips64octeonel \ | mips64orion | mips64orionel \ | mips64r5900 | mips64r5900el \ | mips64vr | mips64vrel \ | mips64vr4100 | mips64vr4100el \ | mips64vr4300 | mips64vr4300el \ | mips64vr5000 | mips64vr5000el \ | mips64vr5900 | mips64vr5900el \ | mipsisa32 | mipsisa32el \ | mipsisa32r2 | mipsisa32r2el \ | mipsisa64 | mipsisa64el \ | mipsisa64r2 | mipsisa64r2el \ | mipsisa64sb1 | mipsisa64sb1el \ | mipsisa64sr71k | mipsisa64sr71kel \ | mipstx39 | mipstx39el \ | mn10200 | mn10300 \ | moxie \ | mt \ | msp430 \ | nds32 | nds32le | nds32be \ | nios | nios2 \ | ns16k | ns32k \ | open8 \ | or32 \ | pdp10 | pdp11 | pj | pjl \ | powerpc | powerpc64 | powerpc64le | powerpcle \ | pyramid \ | rl78 | rx \ | score \ | sh | sh[1234] | sh[24]a | sh[24]aeb | sh[23]e | sh[34]eb | sheb | shbe | shle | sh[1234]le | sh3ele \ | sh64 | sh64le \ | sparc | sparc64 | sparc64b | sparc64v | sparc86x | sparclet | sparclite \ | sparcv8 | sparcv9 | sparcv9b | sparcv9v \ | spu \ | tahoe | tic4x | tic54x | tic55x | tic6x | tic80 | tron \ | ubicom32 \ | v850 | v850e | v850e1 | v850e2 | v850es | v850e2v3 \ | we32k \ | x86 | xc16x | xstormy16 | xtensa \ | z8k | z80) basic_machine=$basic_machine-unknown ;; c54x) basic_machine=tic54x-unknown ;; c55x) basic_machine=tic55x-unknown ;; c6x) basic_machine=tic6x-unknown ;; m6811 | m68hc11 | m6812 | m68hc12 | m68hcs12x | picochip) basic_machine=$basic_machine-unknown os=-none ;; m88110 | m680[12346]0 | m683?2 | m68360 | m5200 | v70 | w65 | z8k) ;; ms1) basic_machine=mt-unknown ;; strongarm | thumb | xscale) basic_machine=arm-unknown ;; xgate) basic_machine=$basic_machine-unknown os=-none ;; xscaleeb) basic_machine=armeb-unknown ;; xscaleel) basic_machine=armel-unknown ;; # We use `pc' rather than `unknown' # because (1) that's what they normally are, and # (2) the word "unknown" tends to confuse beginning users. i*86 | x86_64) basic_machine=$basic_machine-pc ;; # Object if more than one company name word. *-*-*) echo Invalid configuration \`$1\': machine \`$basic_machine\' not recognized 1>&2 exit 1 ;; # Recognize the basic CPU types with company name. 580-* \ | a29k-* \ | aarch64-* | aarch64_be-* \ | alpha-* | alphaev[4-8]-* | alphaev56-* | alphaev6[78]-* \ | alpha64-* | alpha64ev[4-8]-* | alpha64ev56-* | alpha64ev6[78]-* \ | alphapca5[67]-* | alpha64pca5[67]-* | arc-* \ | arm-* | armbe-* | armle-* | armeb-* | armv*-* \ | avr-* | avr32-* \ | be32-* | be64-* \ | bfin-* | bs2000-* \ | c[123]* | c30-* | [cjt]90-* | c4x-* \ | clipper-* | craynv-* | cydra-* \ | d10v-* | d30v-* | dlx-* \ | elxsi-* \ | f30[01]-* | f700-* | fido-* | fr30-* | frv-* | fx80-* \ | h8300-* | h8500-* \ | hppa-* | hppa1.[01]-* | hppa2.0-* | hppa2.0[nw]-* | hppa64-* \ | hexagon-* \ | i*86-* | i860-* | i960-* | ia64-* \ | ip2k-* | iq2000-* \ | le32-* | le64-* \ | lm32-* \ | m32c-* | m32r-* | m32rle-* \ | m68000-* | m680[012346]0-* | m68360-* | m683?2-* | m68k-* \ | m88110-* | m88k-* | maxq-* | mcore-* | metag-* | microblaze-* \ | mips-* | mipsbe-* | mipseb-* | mipsel-* | mipsle-* \ | mips16-* \ | mips64-* | mips64el-* \ | mips64octeon-* | mips64octeonel-* \ | mips64orion-* | mips64orionel-* \ | mips64r5900-* | mips64r5900el-* \ | mips64vr-* | mips64vrel-* \ | mips64vr4100-* | mips64vr4100el-* \ | mips64vr4300-* | mips64vr4300el-* \ | mips64vr5000-* | mips64vr5000el-* \ | mips64vr5900-* | mips64vr5900el-* \ | mipsisa32-* | mipsisa32el-* \ | mipsisa32r2-* | mipsisa32r2el-* \ | mipsisa64-* | mipsisa64el-* \ | mipsisa64r2-* | mipsisa64r2el-* \ | mipsisa64sb1-* | mipsisa64sb1el-* \ | mipsisa64sr71k-* | mipsisa64sr71kel-* \ | mipstx39-* | mipstx39el-* \ | mmix-* \ | mt-* \ | msp430-* \ | nds32-* | nds32le-* | nds32be-* \ | nios-* | nios2-* \ | none-* | np1-* | ns16k-* | ns32k-* \ | open8-* \ | orion-* \ | pdp10-* | pdp11-* | pj-* | pjl-* | pn-* | power-* \ | powerpc-* | powerpc64-* | powerpc64le-* | powerpcle-* \ | pyramid-* \ | rl78-* | romp-* | rs6000-* | rx-* \ | sh-* | sh[1234]-* | sh[24]a-* | sh[24]aeb-* | sh[23]e-* | sh[34]eb-* | sheb-* | shbe-* \ | shle-* | sh[1234]le-* | sh3ele-* | sh64-* | sh64le-* \ | sparc-* | sparc64-* | sparc64b-* | sparc64v-* | sparc86x-* | sparclet-* \ | sparclite-* \ | sparcv8-* | sparcv9-* | sparcv9b-* | sparcv9v-* | sv1-* | sx?-* \ | tahoe-* \ | tic30-* | tic4x-* | tic54x-* | tic55x-* | tic6x-* | tic80-* \ | tile*-* \ | tron-* \ | ubicom32-* \ | v850-* | v850e-* | v850e1-* | v850es-* | v850e2-* | v850e2v3-* \ | vax-* \ | we32k-* \ | x86-* | x86_64-* | xc16x-* | xps100-* \ | xstormy16-* | xtensa*-* \ | ymp-* \ | z8k-* | z80-*) ;; # Recognize the basic CPU types without company name, with glob match. xtensa*) basic_machine=$basic_machine-unknown ;; # Recognize the various machine names and aliases which stand # for a CPU type and a company and sometimes even an OS. 386bsd) basic_machine=i386-unknown os=-bsd ;; 3b1 | 7300 | 7300-att | att-7300 | pc7300 | safari | unixpc) basic_machine=m68000-att ;; 3b*) basic_machine=we32k-att ;; a29khif) basic_machine=a29k-amd os=-udi ;; abacus) basic_machine=abacus-unknown ;; adobe68k) basic_machine=m68010-adobe os=-scout ;; alliant | fx80) basic_machine=fx80-alliant ;; altos | altos3068) basic_machine=m68k-altos ;; am29k) basic_machine=a29k-none os=-bsd ;; amd64) basic_machine=x86_64-pc ;; amd64-*) basic_machine=x86_64-`echo $basic_machine | sed 's/^[^-]*-//'` ;; amdahl) basic_machine=580-amdahl os=-sysv ;; amiga | amiga-*) basic_machine=m68k-unknown ;; amigaos | amigados) basic_machine=m68k-unknown os=-amigaos ;; amigaunix | amix) basic_machine=m68k-unknown os=-sysv4 ;; apollo68) basic_machine=m68k-apollo os=-sysv ;; apollo68bsd) basic_machine=m68k-apollo os=-bsd ;; aros) basic_machine=i386-pc os=-aros ;; aux) basic_machine=m68k-apple os=-aux ;; balance) basic_machine=ns32k-sequent os=-dynix ;; blackfin) basic_machine=bfin-unknown os=-linux ;; blackfin-*) basic_machine=bfin-`echo $basic_machine | sed 's/^[^-]*-//'` os=-linux ;; bluegene*) basic_machine=powerpc-ibm os=-cnk ;; c54x-*) basic_machine=tic54x-`echo $basic_machine | sed 's/^[^-]*-//'` ;; c55x-*) basic_machine=tic55x-`echo $basic_machine | sed 's/^[^-]*-//'` ;; c6x-*) basic_machine=tic6x-`echo $basic_machine | sed 's/^[^-]*-//'` ;; c90) basic_machine=c90-cray os=-unicos ;; cegcc) basic_machine=arm-unknown os=-cegcc ;; convex-c1) basic_machine=c1-convex os=-bsd ;; convex-c2) basic_machine=c2-convex os=-bsd ;; convex-c32) basic_machine=c32-convex os=-bsd ;; convex-c34) basic_machine=c34-convex os=-bsd ;; convex-c38) basic_machine=c38-convex os=-bsd ;; cray | j90) basic_machine=j90-cray os=-unicos ;; craynv) basic_machine=craynv-cray os=-unicosmp ;; cr16 | cr16-*) basic_machine=cr16-unknown os=-elf ;; crds | unos) basic_machine=m68k-crds ;; crisv32 | crisv32-* | etraxfs*) basic_machine=crisv32-axis ;; cris | cris-* | etrax*) basic_machine=cris-axis ;; crx) basic_machine=crx-unknown os=-elf ;; da30 | da30-*) basic_machine=m68k-da30 ;; decstation | decstation-3100 | pmax | pmax-* | pmin | dec3100 | decstatn) basic_machine=mips-dec ;; decsystem10* | dec10*) basic_machine=pdp10-dec os=-tops10 ;; decsystem20* | dec20*) basic_machine=pdp10-dec os=-tops20 ;; delta | 3300 | motorola-3300 | motorola-delta \ | 3300-motorola | delta-motorola) basic_machine=m68k-motorola ;; delta88) basic_machine=m88k-motorola os=-sysv3 ;; dicos) basic_machine=i686-pc os=-dicos ;; djgpp) basic_machine=i586-pc os=-msdosdjgpp ;; dpx20 | dpx20-*) basic_machine=rs6000-bull os=-bosx ;; dpx2* | dpx2*-bull) basic_machine=m68k-bull os=-sysv3 ;; ebmon29k) basic_machine=a29k-amd os=-ebmon ;; elxsi) basic_machine=elxsi-elxsi os=-bsd ;; encore | umax | mmax) basic_machine=ns32k-encore ;; es1800 | OSE68k | ose68k | ose | OSE) basic_machine=m68k-ericsson os=-ose ;; fx2800) basic_machine=i860-alliant ;; genix) basic_machine=ns32k-ns ;; gmicro) basic_machine=tron-gmicro os=-sysv ;; go32) basic_machine=i386-pc os=-go32 ;; h3050r* | hiux*) basic_machine=hppa1.1-hitachi os=-hiuxwe2 ;; h8300hms) basic_machine=h8300-hitachi os=-hms ;; h8300xray) basic_machine=h8300-hitachi os=-xray ;; h8500hms) basic_machine=h8500-hitachi os=-hms ;; harris) basic_machine=m88k-harris os=-sysv3 ;; hp300-*) basic_machine=m68k-hp ;; hp300bsd) basic_machine=m68k-hp os=-bsd ;; hp300hpux) basic_machine=m68k-hp os=-hpux ;; hp3k9[0-9][0-9] | hp9[0-9][0-9]) basic_machine=hppa1.0-hp ;; hp9k2[0-9][0-9] | hp9k31[0-9]) basic_machine=m68000-hp ;; hp9k3[2-9][0-9]) basic_machine=m68k-hp ;; hp9k6[0-9][0-9] | hp6[0-9][0-9]) basic_machine=hppa1.0-hp ;; hp9k7[0-79][0-9] | hp7[0-79][0-9]) basic_machine=hppa1.1-hp ;; hp9k78[0-9] | hp78[0-9]) # FIXME: really hppa2.0-hp basic_machine=hppa1.1-hp ;; hp9k8[67]1 | hp8[67]1 | hp9k80[24] | hp80[24] | hp9k8[78]9 | hp8[78]9 | hp9k893 | hp893) # FIXME: really hppa2.0-hp basic_machine=hppa1.1-hp ;; hp9k8[0-9][13679] | hp8[0-9][13679]) basic_machine=hppa1.1-hp ;; hp9k8[0-9][0-9] | hp8[0-9][0-9]) basic_machine=hppa1.0-hp ;; hppa-next) os=-nextstep3 ;; hppaosf) basic_machine=hppa1.1-hp os=-osf ;; hppro) basic_machine=hppa1.1-hp os=-proelf ;; i370-ibm* | ibm*) basic_machine=i370-ibm ;; i*86v32) basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'` os=-sysv32 ;; i*86v4*) basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'` os=-sysv4 ;; i*86v) basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'` os=-sysv ;; i*86sol2) basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'` os=-solaris2 ;; i386mach) basic_machine=i386-mach os=-mach ;; i386-vsta | vsta) basic_machine=i386-unknown os=-vsta ;; iris | iris4d) basic_machine=mips-sgi case $os in -irix*) ;; *) os=-irix4 ;; esac ;; isi68 | isi) basic_machine=m68k-isi os=-sysv ;; m68knommu) basic_machine=m68k-unknown os=-linux ;; m68knommu-*) basic_machine=m68k-`echo $basic_machine | sed 's/^[^-]*-//'` os=-linux ;; m88k-omron*) basic_machine=m88k-omron ;; magnum | m3230) basic_machine=mips-mips os=-sysv ;; merlin) basic_machine=ns32k-utek os=-sysv ;; microblaze) basic_machine=microblaze-xilinx ;; mingw32) basic_machine=i386-pc os=-mingw32 ;; mingw32ce) basic_machine=arm-unknown os=-mingw32ce ;; miniframe) basic_machine=m68000-convergent ;; *mint | -mint[0-9]* | *MiNT | *MiNT[0-9]*) basic_machine=m68k-atari os=-mint ;; mips3*-*) basic_machine=`echo $basic_machine | sed -e 's/mips3/mips64/'` ;; mips3*) basic_machine=`echo $basic_machine | sed -e 's/mips3/mips64/'`-unknown ;; monitor) basic_machine=m68k-rom68k os=-coff ;; morphos) basic_machine=powerpc-unknown os=-morphos ;; msdos) basic_machine=i386-pc os=-msdos ;; ms1-*) basic_machine=`echo $basic_machine | sed -e 's/ms1-/mt-/'` ;; msys) basic_machine=i386-pc os=-msys ;; mvs) basic_machine=i370-ibm os=-mvs ;; nacl) basic_machine=le32-unknown os=-nacl ;; ncr3000) basic_machine=i486-ncr os=-sysv4 ;; netbsd386) basic_machine=i386-unknown os=-netbsd ;; netwinder) basic_machine=armv4l-rebel os=-linux ;; news | news700 | news800 | news900) basic_machine=m68k-sony os=-newsos ;; news1000) basic_machine=m68030-sony os=-newsos ;; news-3600 | risc-news) basic_machine=mips-sony os=-newsos ;; necv70) basic_machine=v70-nec os=-sysv ;; next | m*-next ) basic_machine=m68k-next case $os in -nextstep* ) ;; -ns2*) os=-nextstep2 ;; *) os=-nextstep3 ;; esac ;; nh3000) basic_machine=m68k-harris os=-cxux ;; nh[45]000) basic_machine=m88k-harris os=-cxux ;; nindy960) basic_machine=i960-intel os=-nindy ;; mon960) basic_machine=i960-intel os=-mon960 ;; nonstopux) basic_machine=mips-compaq os=-nonstopux ;; np1) basic_machine=np1-gould ;; neo-tandem) basic_machine=neo-tandem ;; nse-tandem) basic_machine=nse-tandem ;; nsr-tandem) basic_machine=nsr-tandem ;; op50n-* | op60c-*) basic_machine=hppa1.1-oki os=-proelf ;; openrisc | openrisc-*) basic_machine=or32-unknown ;; os400) basic_machine=powerpc-ibm os=-os400 ;; OSE68000 | ose68000) basic_machine=m68000-ericsson os=-ose ;; os68k) basic_machine=m68k-none os=-os68k ;; pa-hitachi) basic_machine=hppa1.1-hitachi os=-hiuxwe2 ;; paragon) basic_machine=i860-intel os=-osf ;; parisc) basic_machine=hppa-unknown os=-linux ;; parisc-*) basic_machine=hppa-`echo $basic_machine | sed 's/^[^-]*-//'` os=-linux ;; pbd) basic_machine=sparc-tti ;; pbb) basic_machine=m68k-tti ;; pc532 | pc532-*) basic_machine=ns32k-pc532 ;; pc98) basic_machine=i386-pc ;; pc98-*) basic_machine=i386-`echo $basic_machine | sed 's/^[^-]*-//'` ;; pentium | p5 | k5 | k6 | nexgen | viac3) basic_machine=i586-pc ;; pentiumpro | p6 | 6x86 | athlon | athlon_*) basic_machine=i686-pc ;; pentiumii | pentium2 | pentiumiii | pentium3) basic_machine=i686-pc ;; pentium4) basic_machine=i786-pc ;; pentium-* | p5-* | k5-* | k6-* | nexgen-* | viac3-*) basic_machine=i586-`echo $basic_machine | sed 's/^[^-]*-//'` ;; pentiumpro-* | p6-* | 6x86-* | athlon-*) basic_machine=i686-`echo $basic_machine | sed 's/^[^-]*-//'` ;; pentiumii-* | pentium2-* | pentiumiii-* | pentium3-*) basic_machine=i686-`echo $basic_machine | sed 's/^[^-]*-//'` ;; pentium4-*) basic_machine=i786-`echo $basic_machine | sed 's/^[^-]*-//'` ;; pn) basic_machine=pn-gould ;; power) basic_machine=power-ibm ;; ppc | ppcbe) basic_machine=powerpc-unknown ;; ppc-* | ppcbe-*) basic_machine=powerpc-`echo $basic_machine | sed 's/^[^-]*-//'` ;; ppcle | powerpclittle | ppc-le | powerpc-little) basic_machine=powerpcle-unknown ;; ppcle-* | powerpclittle-*) basic_machine=powerpcle-`echo $basic_machine | sed 's/^[^-]*-//'` ;; ppc64) basic_machine=powerpc64-unknown ;; ppc64-*) basic_machine=powerpc64-`echo $basic_machine | sed 's/^[^-]*-//'` ;; ppc64le | powerpc64little | ppc64-le | powerpc64-little) basic_machine=powerpc64le-unknown ;; ppc64le-* | powerpc64little-*) basic_machine=powerpc64le-`echo $basic_machine | sed 's/^[^-]*-//'` ;; ps2) basic_machine=i386-ibm ;; pw32) basic_machine=i586-unknown os=-pw32 ;; rdos) basic_machine=i386-pc os=-rdos ;; rom68k) basic_machine=m68k-rom68k os=-coff ;; rm[46]00) basic_machine=mips-siemens ;; rtpc | rtpc-*) basic_machine=romp-ibm ;; s390 | s390-*) basic_machine=s390-ibm ;; s390x | s390x-*) basic_machine=s390x-ibm ;; sa29200) basic_machine=a29k-amd os=-udi ;; sb1) basic_machine=mipsisa64sb1-unknown ;; sb1el) basic_machine=mipsisa64sb1el-unknown ;; sde) basic_machine=mipsisa32-sde os=-elf ;; sei) basic_machine=mips-sei os=-seiux ;; sequent) basic_machine=i386-sequent ;; sh) basic_machine=sh-hitachi os=-hms ;; sh5el) basic_machine=sh5le-unknown ;; sh64) basic_machine=sh64-unknown ;; sparclite-wrs | simso-wrs) basic_machine=sparclite-wrs os=-vxworks ;; sps7) basic_machine=m68k-bull os=-sysv2 ;; spur) basic_machine=spur-unknown ;; st2000) basic_machine=m68k-tandem ;; stratus) basic_machine=i860-stratus os=-sysv4 ;; strongarm-* | thumb-*) basic_machine=arm-`echo $basic_machine | sed 's/^[^-]*-//'` ;; sun2) basic_machine=m68000-sun ;; sun2os3) basic_machine=m68000-sun os=-sunos3 ;; sun2os4) basic_machine=m68000-sun os=-sunos4 ;; sun3os3) basic_machine=m68k-sun os=-sunos3 ;; sun3os4) basic_machine=m68k-sun os=-sunos4 ;; sun4os3) basic_machine=sparc-sun os=-sunos3 ;; sun4os4) basic_machine=sparc-sun os=-sunos4 ;; sun4sol2) basic_machine=sparc-sun os=-solaris2 ;; sun3 | sun3-*) basic_machine=m68k-sun ;; sun4) basic_machine=sparc-sun ;; sun386 | sun386i | roadrunner) basic_machine=i386-sun ;; sv1) basic_machine=sv1-cray os=-unicos ;; symmetry) basic_machine=i386-sequent os=-dynix ;; t3e) basic_machine=alphaev5-cray os=-unicos ;; t90) basic_machine=t90-cray os=-unicos ;; tile*) basic_machine=$basic_machine-unknown os=-linux-gnu ;; tx39) basic_machine=mipstx39-unknown ;; tx39el) basic_machine=mipstx39el-unknown ;; toad1) basic_machine=pdp10-xkl os=-tops20 ;; tower | tower-32) basic_machine=m68k-ncr ;; tpf) basic_machine=s390x-ibm os=-tpf ;; udi29k) basic_machine=a29k-amd os=-udi ;; ultra3) basic_machine=a29k-nyu os=-sym1 ;; v810 | necv810) basic_machine=v810-nec os=-none ;; vaxv) basic_machine=vax-dec os=-sysv ;; vms) basic_machine=vax-dec os=-vms ;; vpp*|vx|vx-*) basic_machine=f301-fujitsu ;; vxworks960) basic_machine=i960-wrs os=-vxworks ;; vxworks68) basic_machine=m68k-wrs os=-vxworks ;; vxworks29k) basic_machine=a29k-wrs os=-vxworks ;; w65*) basic_machine=w65-wdc os=-none ;; w89k-*) basic_machine=hppa1.1-winbond os=-proelf ;; xbox) basic_machine=i686-pc os=-mingw32 ;; xps | xps100) basic_machine=xps100-honeywell ;; xscale-* | xscalee[bl]-*) basic_machine=`echo $basic_machine | sed 's/^xscale/arm/'` ;; ymp) basic_machine=ymp-cray os=-unicos ;; z8k-*-coff) basic_machine=z8k-unknown os=-sim ;; z80-*-coff) basic_machine=z80-unknown os=-sim ;; none) basic_machine=none-none os=-none ;; # Here we handle the default manufacturer of certain CPU types. It is in # some cases the only manufacturer, in others, it is the most popular. w89k) basic_machine=hppa1.1-winbond ;; op50n) basic_machine=hppa1.1-oki ;; op60c) basic_machine=hppa1.1-oki ;; romp) basic_machine=romp-ibm ;; mmix) basic_machine=mmix-knuth ;; rs6000) basic_machine=rs6000-ibm ;; vax) basic_machine=vax-dec ;; pdp10) # there are many clones, so DEC is not a safe bet basic_machine=pdp10-unknown ;; pdp11) basic_machine=pdp11-dec ;; we32k) basic_machine=we32k-att ;; sh[1234] | sh[24]a | sh[24]aeb | sh[34]eb | sh[1234]le | sh[23]ele) basic_machine=sh-unknown ;; sparc | sparcv8 | sparcv9 | sparcv9b | sparcv9v) basic_machine=sparc-sun ;; cydra) basic_machine=cydra-cydrome ;; orion) basic_machine=orion-highlevel ;; orion105) basic_machine=clipper-highlevel ;; mac | mpw | mac-mpw) basic_machine=m68k-apple ;; pmac | pmac-mpw) basic_machine=powerpc-apple ;; *-unknown) # Make sure to match an already-canonicalized machine name. ;; *) echo Invalid configuration \`$1\': machine \`$basic_machine\' not recognized 1>&2 exit 1 ;; esac # Here we canonicalize certain aliases for manufacturers. case $basic_machine in *-digital*) basic_machine=`echo $basic_machine | sed 's/digital.*/dec/'` ;; *-commodore*) basic_machine=`echo $basic_machine | sed 's/commodore.*/cbm/'` ;; *) ;; esac # Decode manufacturer-specific aliases for certain operating systems. if [ x"$os" != x"" ] then case $os in # First match some system type aliases # that might get confused with valid system types. # -solaris* is a basic system type, with this one exception. -auroraux) os=-auroraux ;; -solaris1 | -solaris1.*) os=`echo $os | sed -e 's|solaris1|sunos4|'` ;; -solaris) os=-solaris2 ;; -svr4*) os=-sysv4 ;; -unixware*) os=-sysv4.2uw ;; -gnu/linux*) os=`echo $os | sed -e 's|gnu/linux|linux-gnu|'` ;; # First accept the basic system types. # The portable systems comes first. # Each alternative MUST END IN A *, to match a version number. # -sysv* is not here because it comes later, after sysvr4. -gnu* | -bsd* | -mach* | -minix* | -genix* | -ultrix* | -irix* \ | -*vms* | -sco* | -esix* | -isc* | -aix* | -cnk* | -sunos | -sunos[34]*\ | -hpux* | -unos* | -osf* | -luna* | -dgux* | -auroraux* | -solaris* \ | -sym* | -kopensolaris* \ | -amigaos* | -amigados* | -msdos* | -newsos* | -unicos* | -aof* \ | -aos* | -aros* \ | -nindy* | -vxsim* | -vxworks* | -ebmon* | -hms* | -mvs* \ | -clix* | -riscos* | -uniplus* | -iris* | -rtu* | -xenix* \ | -hiux* | -386bsd* | -knetbsd* | -mirbsd* | -netbsd* \ | -openbsd* | -solidbsd* \ | -ekkobsd* | -kfreebsd* | -freebsd* | -riscix* | -lynxos* \ | -bosx* | -nextstep* | -cxux* | -aout* | -elf* | -oabi* \ | -ptx* | -coff* | -ecoff* | -winnt* | -domain* | -vsta* \ | -udi* | -eabi* | -lites* | -ieee* | -go32* | -aux* \ | -chorusos* | -chorusrdb* | -cegcc* \ | -cygwin* | -msys* | -pe* | -psos* | -moss* | -proelf* | -rtems* \ | -mingw32* | -linux-gnu* | -linux-android* \ | -linux-newlib* | -linux-uclibc* \ | -uxpv* | -beos* | -mpeix* | -udk* \ | -interix* | -uwin* | -mks* | -rhapsody* | -darwin* | -opened* \ | -openstep* | -oskit* | -conix* | -pw32* | -nonstopux* \ | -storm-chaos* | -tops10* | -tenex* | -tops20* | -its* \ | -os2* | -vos* | -palmos* | -uclinux* | -nucleus* \ | -morphos* | -superux* | -rtmk* | -rtmk-nova* | -windiss* \ | -powermax* | -dnix* | -nx6 | -nx7 | -sei* | -dragonfly* \ | -skyos* | -haiku* | -rdos* | -toppers* | -drops* | -es*) # Remember, each alternative MUST END IN *, to match a version number. ;; -qnx*) case $basic_machine in x86-* | i*86-*) ;; *) os=-nto$os ;; esac ;; -nto-qnx*) ;; -nto*) os=`echo $os | sed -e 's|nto|nto-qnx|'` ;; -sim | -es1800* | -hms* | -xray | -os68k* | -none* | -v88r* \ | -windows* | -osx | -abug | -netware* | -os9* | -beos* | -haiku* \ | -macos* | -mpw* | -magic* | -mmixware* | -mon960* | -lnews*) ;; -mac*) os=`echo $os | sed -e 's|mac|macos|'` ;; -linux-dietlibc) os=-linux-dietlibc ;; -linux*) os=`echo $os | sed -e 's|linux|linux-gnu|'` ;; -sunos5*) os=`echo $os | sed -e 's|sunos5|solaris2|'` ;; -sunos6*) os=`echo $os | sed -e 's|sunos6|solaris3|'` ;; -opened*) os=-openedition ;; -os400*) os=-os400 ;; -wince*) os=-wince ;; -osfrose*) os=-osfrose ;; -osf*) os=-osf ;; -utek*) os=-bsd ;; -dynix*) os=-bsd ;; -acis*) os=-aos ;; -atheos*) os=-atheos ;; -syllable*) os=-syllable ;; -386bsd) os=-bsd ;; -ctix* | -uts*) os=-sysv ;; -nova*) os=-rtmk-nova ;; -ns2 ) os=-nextstep2 ;; -nsk*) os=-nsk ;; # Preserve the version number of sinix5. -sinix5.*) os=`echo $os | sed -e 's|sinix|sysv|'` ;; -sinix*) os=-sysv4 ;; -tpf*) os=-tpf ;; -triton*) os=-sysv3 ;; -oss*) os=-sysv3 ;; -svr4) os=-sysv4 ;; -svr3) os=-sysv3 ;; -sysvr4) os=-sysv4 ;; # This must come after -sysvr4. -sysv*) ;; -ose*) os=-ose ;; -es1800*) os=-ose ;; -xenix) os=-xenix ;; -*mint | -mint[0-9]* | -*MiNT | -MiNT[0-9]*) os=-mint ;; -aros*) os=-aros ;; -kaos*) os=-kaos ;; -zvmoe) os=-zvmoe ;; -dicos*) os=-dicos ;; -nacl*) ;; -none) ;; *) # Get rid of the `-' at the beginning of $os. os=`echo $os | sed 's/[^-]*-//'` echo Invalid configuration \`$1\': system \`$os\' not recognized 1>&2 exit 1 ;; esac else # Here we handle the default operating systems that come with various machines. # The value should be what the vendor currently ships out the door with their # machine or put another way, the most popular os provided with the machine. # Note that if you're going to try to match "-MANUFACTURER" here (say, # "-sun"), then you have to tell the case statement up towards the top # that MANUFACTURER isn't an operating system. Otherwise, code above # will signal an error saying that MANUFACTURER isn't an operating # system, and we'll never get to this point. case $basic_machine in score-*) os=-elf ;; spu-*) os=-elf ;; *-acorn) os=-riscix1.2 ;; arm*-rebel) os=-linux ;; arm*-semi) os=-aout ;; c4x-* | tic4x-*) os=-coff ;; tic54x-*) os=-coff ;; tic55x-*) os=-coff ;; tic6x-*) os=-coff ;; # This must come before the *-dec entry. pdp10-*) os=-tops20 ;; pdp11-*) os=-none ;; *-dec | vax-*) os=-ultrix4.2 ;; m68*-apollo) os=-domain ;; i386-sun) os=-sunos4.0.2 ;; m68000-sun) os=-sunos3 ;; m68*-cisco) os=-aout ;; mep-*) os=-elf ;; mips*-cisco) os=-elf ;; mips*-*) os=-elf ;; or32-*) os=-coff ;; *-tti) # must be before sparc entry or we get the wrong os. os=-sysv3 ;; sparc-* | *-sun) os=-sunos4.1.1 ;; *-be) os=-beos ;; *-haiku) os=-haiku ;; *-ibm) os=-aix ;; *-knuth) os=-mmixware ;; *-wec) os=-proelf ;; *-winbond) os=-proelf ;; *-oki) os=-proelf ;; *-hp) os=-hpux ;; *-hitachi) os=-hiux ;; i860-* | *-att | *-ncr | *-altos | *-motorola | *-convergent) os=-sysv ;; *-cbm) os=-amigaos ;; *-dg) os=-dgux ;; *-dolphin) os=-sysv3 ;; m68k-ccur) os=-rtu ;; m88k-omron*) os=-luna ;; *-next ) os=-nextstep ;; *-sequent) os=-ptx ;; *-crds) os=-unos ;; *-ns) os=-genix ;; i370-*) os=-mvs ;; *-next) os=-nextstep3 ;; *-gould) os=-sysv ;; *-highlevel) os=-bsd ;; *-encore) os=-bsd ;; *-sgi) os=-irix ;; *-siemens) os=-sysv4 ;; *-masscomp) os=-rtu ;; f30[01]-fujitsu | f700-fujitsu) os=-uxpv ;; *-rom68k) os=-coff ;; *-*bug) os=-coff ;; *-apple) os=-macos ;; *-atari*) os=-mint ;; *) os=-none ;; esac fi # Here we handle the case where we know the os, and the CPU type, but not the # manufacturer. We pick the logical manufacturer. vendor=unknown case $basic_machine in *-unknown) case $os in -riscix*) vendor=acorn ;; -sunos*) vendor=sun ;; -cnk*|-aix*) vendor=ibm ;; -beos*) vendor=be ;; -hpux*) vendor=hp ;; -mpeix*) vendor=hp ;; -hiux*) vendor=hitachi ;; -unos*) vendor=crds ;; -dgux*) vendor=dg ;; -luna*) vendor=omron ;; -genix*) vendor=ns ;; -mvs* | -opened*) vendor=ibm ;; -os400*) vendor=ibm ;; -ptx*) vendor=sequent ;; -tpf*) vendor=ibm ;; -vxsim* | -vxworks* | -windiss*) vendor=wrs ;; -aux*) vendor=apple ;; -hms*) vendor=hitachi ;; -mpw* | -macos*) vendor=apple ;; -*mint | -mint[0-9]* | -*MiNT | -MiNT[0-9]*) vendor=atari ;; -vos*) vendor=stratus ;; esac basic_machine=`echo $basic_machine | sed "s/unknown/$vendor/"` ;; esac echo $basic_machine$os exit # Local variables: # eval: (add-hook 'write-file-hooks 'time-stamp) # time-stamp-start: "timestamp='" # time-stamp-format: "%:y-%02m-%02d" # time-stamp-end: "'" # End: yaz-4.2.30/config/depcomp0000755000175000017500000004755611713710362012170 00000000000000#! /bin/sh # depcomp - compile a program generating dependencies as side-effects scriptversion=2011-12-04.11; # UTC # Copyright (C) 1999, 2000, 2003, 2004, 2005, 2006, 2007, 2009, 2010, # 2011 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 2, or (at your option) # any later version. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # You should have received a copy of the GNU General Public License # along with this program. If not, see . # As a special exception to the GNU General Public License, if you # distribute this file as part of a program that contains a # configuration script generated by Autoconf, you may include it under # the same distribution terms that you use for the rest of that program. # Originally written by Alexandre Oliva . case $1 in '') echo "$0: No command. Try \`$0 --help' for more information." 1>&2 exit 1; ;; -h | --h*) cat <<\EOF Usage: depcomp [--help] [--version] PROGRAM [ARGS] Run PROGRAMS ARGS to compile a file, generating dependencies as side-effects. Environment variables: depmode Dependency tracking mode. source Source file read by `PROGRAMS ARGS'. object Object file output by `PROGRAMS ARGS'. DEPDIR directory where to store dependencies. depfile Dependency file to output. tmpdepfile Temporary file to use when outputting dependencies. libtool Whether libtool is used (yes/no). Report bugs to . EOF exit $? ;; -v | --v*) echo "depcomp $scriptversion" exit $? ;; esac if test -z "$depmode" || test -z "$source" || test -z "$object"; then echo "depcomp: Variables source, object and depmode must be set" 1>&2 exit 1 fi # Dependencies for sub/bar.o or sub/bar.obj go into sub/.deps/bar.Po. depfile=${depfile-`echo "$object" | sed 's|[^\\/]*$|'${DEPDIR-.deps}'/&|;s|\.\([^.]*\)$|.P\1|;s|Pobj$|Po|'`} tmpdepfile=${tmpdepfile-`echo "$depfile" | sed 's/\.\([^.]*\)$/.T\1/'`} rm -f "$tmpdepfile" # Some modes work just like other modes, but use different flags. We # parameterize here, but still list the modes in the big case below, # to make depend.m4 easier to write. Note that we *cannot* use a case # here, because this file can only contain one case statement. if test "$depmode" = hp; then # HP compiler uses -M and no extra arg. gccflag=-M depmode=gcc fi if test "$depmode" = dashXmstdout; then # This is just like dashmstdout with a different argument. dashmflag=-xM depmode=dashmstdout fi cygpath_u="cygpath -u -f -" if test "$depmode" = msvcmsys; then # This is just like msvisualcpp but w/o cygpath translation. # Just convert the backslash-escaped backslashes to single forward # slashes to satisfy depend.m4 cygpath_u='sed s,\\\\,/,g' depmode=msvisualcpp fi if test "$depmode" = msvc7msys; then # This is just like msvc7 but w/o cygpath translation. # Just convert the backslash-escaped backslashes to single forward # slashes to satisfy depend.m4 cygpath_u='sed s,\\\\,/,g' depmode=msvc7 fi case "$depmode" in gcc3) ## gcc 3 implements dependency tracking that does exactly what ## we want. Yay! Note: for some reason libtool 1.4 doesn't like ## it if -MD -MP comes after the -MF stuff. Hmm. ## Unfortunately, FreeBSD c89 acceptance of flags depends upon ## the command line argument order; so add the flags where they ## appear in depend2.am. Note that the slowdown incurred here ## affects only configure: in makefiles, %FASTDEP% shortcuts this. for arg do case $arg in -c) set fnord "$@" -MT "$object" -MD -MP -MF "$tmpdepfile" "$arg" ;; *) set fnord "$@" "$arg" ;; esac shift # fnord shift # $arg done "$@" stat=$? if test $stat -eq 0; then : else rm -f "$tmpdepfile" exit $stat fi mv "$tmpdepfile" "$depfile" ;; gcc) ## There are various ways to get dependency output from gcc. Here's ## why we pick this rather obscure method: ## - Don't want to use -MD because we'd like the dependencies to end ## up in a subdir. Having to rename by hand is ugly. ## (We might end up doing this anyway to support other compilers.) ## - The DEPENDENCIES_OUTPUT environment variable makes gcc act like ## -MM, not -M (despite what the docs say). ## - Using -M directly means running the compiler twice (even worse ## than renaming). if test -z "$gccflag"; then gccflag=-MD, fi "$@" -Wp,"$gccflag$tmpdepfile" stat=$? if test $stat -eq 0; then : else rm -f "$tmpdepfile" exit $stat fi rm -f "$depfile" echo "$object : \\" > "$depfile" alpha=ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz ## The second -e expression handles DOS-style file names with drive letters. sed -e 's/^[^:]*: / /' \ -e 's/^['$alpha']:\/[^:]*: / /' < "$tmpdepfile" >> "$depfile" ## This next piece of magic avoids the `deleted header file' problem. ## The problem is that when a header file which appears in a .P file ## is deleted, the dependency causes make to die (because there is ## typically no way to rebuild the header). We avoid this by adding ## dummy dependencies for each header file. Too bad gcc doesn't do ## this for us directly. tr ' ' ' ' < "$tmpdepfile" | ## Some versions of gcc put a space before the `:'. On the theory ## that the space means something, we add a space to the output as ## well. hp depmode also adds that space, but also prefixes the VPATH ## to the object. Take care to not repeat it in the output. ## Some versions of the HPUX 10.20 sed can't process this invocation ## correctly. Breaking it into two sed invocations is a workaround. sed -e 's/^\\$//' -e '/^$/d' -e "s|.*$object$||" -e '/:$/d' \ | sed -e 's/$/ :/' >> "$depfile" rm -f "$tmpdepfile" ;; hp) # This case exists only to let depend.m4 do its work. It works by # looking at the text of this script. This case will never be run, # since it is checked for above. exit 1 ;; sgi) if test "$libtool" = yes; then "$@" "-Wp,-MDupdate,$tmpdepfile" else "$@" -MDupdate "$tmpdepfile" fi stat=$? if test $stat -eq 0; then : else rm -f "$tmpdepfile" exit $stat fi rm -f "$depfile" if test -f "$tmpdepfile"; then # yes, the sourcefile depend on other files echo "$object : \\" > "$depfile" # Clip off the initial element (the dependent). Don't try to be # clever and replace this with sed code, as IRIX sed won't handle # lines with more than a fixed number of characters (4096 in # IRIX 6.2 sed, 8192 in IRIX 6.5). We also remove comment lines; # the IRIX cc adds comments like `#:fec' to the end of the # dependency line. tr ' ' ' ' < "$tmpdepfile" \ | sed -e 's/^.*\.o://' -e 's/#.*$//' -e '/^$/ d' | \ tr ' ' ' ' >> "$depfile" echo >> "$depfile" # The second pass generates a dummy entry for each header file. tr ' ' ' ' < "$tmpdepfile" \ | sed -e 's/^.*\.o://' -e 's/#.*$//' -e '/^$/ d' -e 's/$/:/' \ >> "$depfile" else # The sourcefile does not contain any dependencies, so just # store a dummy comment line, to avoid errors with the Makefile # "include basename.Plo" scheme. echo "#dummy" > "$depfile" fi rm -f "$tmpdepfile" ;; aix) # The C for AIX Compiler uses -M and outputs the dependencies # in a .u file. In older versions, this file always lives in the # current directory. Also, the AIX compiler puts `$object:' at the # start of each line; $object doesn't have directory information. # Version 6 uses the directory in both cases. dir=`echo "$object" | sed -e 's|/[^/]*$|/|'` test "x$dir" = "x$object" && dir= base=`echo "$object" | sed -e 's|^.*/||' -e 's/\.o$//' -e 's/\.lo$//'` if test "$libtool" = yes; then tmpdepfile1=$dir$base.u tmpdepfile2=$base.u tmpdepfile3=$dir.libs/$base.u "$@" -Wc,-M else tmpdepfile1=$dir$base.u tmpdepfile2=$dir$base.u tmpdepfile3=$dir$base.u "$@" -M fi stat=$? if test $stat -eq 0; then : else rm -f "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" exit $stat fi for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" do test -f "$tmpdepfile" && break done if test -f "$tmpdepfile"; then # Each line is of the form `foo.o: dependent.h'. # Do two passes, one to just change these to # `$object: dependent.h' and one to simply `dependent.h:'. sed -e "s,^.*\.[a-z]*:,$object:," < "$tmpdepfile" > "$depfile" # That's a tab and a space in the []. sed -e 's,^.*\.[a-z]*:[ ]*,,' -e 's,$,:,' < "$tmpdepfile" >> "$depfile" else # The sourcefile does not contain any dependencies, so just # store a dummy comment line, to avoid errors with the Makefile # "include basename.Plo" scheme. echo "#dummy" > "$depfile" fi rm -f "$tmpdepfile" ;; icc) # Intel's C compiler understands `-MD -MF file'. However on # icc -MD -MF foo.d -c -o sub/foo.o sub/foo.c # ICC 7.0 will fill foo.d with something like # foo.o: sub/foo.c # foo.o: sub/foo.h # which is wrong. We want: # sub/foo.o: sub/foo.c # sub/foo.o: sub/foo.h # sub/foo.c: # sub/foo.h: # ICC 7.1 will output # foo.o: sub/foo.c sub/foo.h # and will wrap long lines using \ : # foo.o: sub/foo.c ... \ # sub/foo.h ... \ # ... "$@" -MD -MF "$tmpdepfile" stat=$? if test $stat -eq 0; then : else rm -f "$tmpdepfile" exit $stat fi rm -f "$depfile" # Each line is of the form `foo.o: dependent.h', # or `foo.o: dep1.h dep2.h \', or ` dep3.h dep4.h \'. # Do two passes, one to just change these to # `$object: dependent.h' and one to simply `dependent.h:'. sed "s,^[^:]*:,$object :," < "$tmpdepfile" > "$depfile" # Some versions of the HPUX 10.20 sed can't process this invocation # correctly. Breaking it into two sed invocations is a workaround. sed 's,^[^:]*: \(.*\)$,\1,;s/^\\$//;/^$/d;/:$/d' < "$tmpdepfile" | sed -e 's/$/ :/' >> "$depfile" rm -f "$tmpdepfile" ;; hp2) # The "hp" stanza above does not work with aCC (C++) and HP's ia64 # compilers, which have integrated preprocessors. The correct option # to use with these is +Maked; it writes dependencies to a file named # 'foo.d', which lands next to the object file, wherever that # happens to be. # Much of this is similar to the tru64 case; see comments there. dir=`echo "$object" | sed -e 's|/[^/]*$|/|'` test "x$dir" = "x$object" && dir= base=`echo "$object" | sed -e 's|^.*/||' -e 's/\.o$//' -e 's/\.lo$//'` if test "$libtool" = yes; then tmpdepfile1=$dir$base.d tmpdepfile2=$dir.libs/$base.d "$@" -Wc,+Maked else tmpdepfile1=$dir$base.d tmpdepfile2=$dir$base.d "$@" +Maked fi stat=$? if test $stat -eq 0; then : else rm -f "$tmpdepfile1" "$tmpdepfile2" exit $stat fi for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2" do test -f "$tmpdepfile" && break done if test -f "$tmpdepfile"; then sed -e "s,^.*\.[a-z]*:,$object:," "$tmpdepfile" > "$depfile" # Add `dependent.h:' lines. sed -ne '2,${ s/^ *// s/ \\*$// s/$/:/ p }' "$tmpdepfile" >> "$depfile" else echo "#dummy" > "$depfile" fi rm -f "$tmpdepfile" "$tmpdepfile2" ;; tru64) # The Tru64 compiler uses -MD to generate dependencies as a side # effect. `cc -MD -o foo.o ...' puts the dependencies into `foo.o.d'. # At least on Alpha/Redhat 6.1, Compaq CCC V6.2-504 seems to put # dependencies in `foo.d' instead, so we check for that too. # Subdirectories are respected. dir=`echo "$object" | sed -e 's|/[^/]*$|/|'` test "x$dir" = "x$object" && dir= base=`echo "$object" | sed -e 's|^.*/||' -e 's/\.o$//' -e 's/\.lo$//'` if test "$libtool" = yes; then # With Tru64 cc, shared objects can also be used to make a # static library. This mechanism is used in libtool 1.4 series to # handle both shared and static libraries in a single compilation. # With libtool 1.4, dependencies were output in $dir.libs/$base.lo.d. # # With libtool 1.5 this exception was removed, and libtool now # generates 2 separate objects for the 2 libraries. These two # compilations output dependencies in $dir.libs/$base.o.d and # in $dir$base.o.d. We have to check for both files, because # one of the two compilations can be disabled. We should prefer # $dir$base.o.d over $dir.libs/$base.o.d because the latter is # automatically cleaned when .libs/ is deleted, while ignoring # the former would cause a distcleancheck panic. tmpdepfile1=$dir.libs/$base.lo.d # libtool 1.4 tmpdepfile2=$dir$base.o.d # libtool 1.5 tmpdepfile3=$dir.libs/$base.o.d # libtool 1.5 tmpdepfile4=$dir.libs/$base.d # Compaq CCC V6.2-504 "$@" -Wc,-MD else tmpdepfile1=$dir$base.o.d tmpdepfile2=$dir$base.d tmpdepfile3=$dir$base.d tmpdepfile4=$dir$base.d "$@" -MD fi stat=$? if test $stat -eq 0; then : else rm -f "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" "$tmpdepfile4" exit $stat fi for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" "$tmpdepfile4" do test -f "$tmpdepfile" && break done if test -f "$tmpdepfile"; then sed -e "s,^.*\.[a-z]*:,$object:," < "$tmpdepfile" > "$depfile" # That's a tab and a space in the []. sed -e 's,^.*\.[a-z]*:[ ]*,,' -e 's,$,:,' < "$tmpdepfile" >> "$depfile" else echo "#dummy" > "$depfile" fi rm -f "$tmpdepfile" ;; msvc7) if test "$libtool" = yes; then showIncludes=-Wc,-showIncludes else showIncludes=-showIncludes fi "$@" $showIncludes > "$tmpdepfile" stat=$? grep -v '^Note: including file: ' "$tmpdepfile" if test "$stat" = 0; then : else rm -f "$tmpdepfile" exit $stat fi rm -f "$depfile" echo "$object : \\" > "$depfile" # The first sed program below extracts the file names and escapes # backslashes for cygpath. The second sed program outputs the file # name when reading, but also accumulates all include files in the # hold buffer in order to output them again at the end. This only # works with sed implementations that can handle large buffers. sed < "$tmpdepfile" -n ' /^Note: including file: *\(.*\)/ { s//\1/ s/\\/\\\\/g p }' | $cygpath_u | sort -u | sed -n ' s/ /\\ /g s/\(.*\)/ \1 \\/p s/.\(.*\) \\/\1:/ H $ { s/.*/ / G p }' >> "$depfile" rm -f "$tmpdepfile" ;; msvc7msys) # This case exists only to let depend.m4 do its work. It works by # looking at the text of this script. This case will never be run, # since it is checked for above. exit 1 ;; #nosideeffect) # This comment above is used by automake to tell side-effect # dependency tracking mechanisms from slower ones. dashmstdout) # Important note: in order to support this mode, a compiler *must* # always write the preprocessed file to stdout, regardless of -o. "$@" || exit $? # Remove the call to Libtool. if test "$libtool" = yes; then while test "X$1" != 'X--mode=compile'; do shift done shift fi # Remove `-o $object'. IFS=" " for arg do case $arg in -o) shift ;; $object) shift ;; *) set fnord "$@" "$arg" shift # fnord shift # $arg ;; esac done test -z "$dashmflag" && dashmflag=-M # Require at least two characters before searching for `:' # in the target name. This is to cope with DOS-style filenames: # a dependency such as `c:/foo/bar' could be seen as target `c' otherwise. "$@" $dashmflag | sed 's:^[ ]*[^: ][^:][^:]*\:[ ]*:'"$object"'\: :' > "$tmpdepfile" rm -f "$depfile" cat < "$tmpdepfile" > "$depfile" tr ' ' ' ' < "$tmpdepfile" | \ ## Some versions of the HPUX 10.20 sed can't process this invocation ## correctly. Breaking it into two sed invocations is a workaround. sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' | sed -e 's/$/ :/' >> "$depfile" rm -f "$tmpdepfile" ;; dashXmstdout) # This case only exists to satisfy depend.m4. It is never actually # run, as this mode is specially recognized in the preamble. exit 1 ;; makedepend) "$@" || exit $? # Remove any Libtool call if test "$libtool" = yes; then while test "X$1" != 'X--mode=compile'; do shift done shift fi # X makedepend shift cleared=no eat=no for arg do case $cleared in no) set ""; shift cleared=yes ;; esac if test $eat = yes; then eat=no continue fi case "$arg" in -D*|-I*) set fnord "$@" "$arg"; shift ;; # Strip any option that makedepend may not understand. Remove # the object too, otherwise makedepend will parse it as a source file. -arch) eat=yes ;; -*|$object) ;; *) set fnord "$@" "$arg"; shift ;; esac done obj_suffix=`echo "$object" | sed 's/^.*\././'` touch "$tmpdepfile" ${MAKEDEPEND-makedepend} -o"$obj_suffix" -f"$tmpdepfile" "$@" rm -f "$depfile" # makedepend may prepend the VPATH from the source file name to the object. # No need to regex-escape $object, excess matching of '.' is harmless. sed "s|^.*\($object *:\)|\1|" "$tmpdepfile" > "$depfile" sed '1,2d' "$tmpdepfile" | tr ' ' ' ' | \ ## Some versions of the HPUX 10.20 sed can't process this invocation ## correctly. Breaking it into two sed invocations is a workaround. sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' | sed -e 's/$/ :/' >> "$depfile" rm -f "$tmpdepfile" "$tmpdepfile".bak ;; cpp) # Important note: in order to support this mode, a compiler *must* # always write the preprocessed file to stdout. "$@" || exit $? # Remove the call to Libtool. if test "$libtool" = yes; then while test "X$1" != 'X--mode=compile'; do shift done shift fi # Remove `-o $object'. IFS=" " for arg do case $arg in -o) shift ;; $object) shift ;; *) set fnord "$@" "$arg" shift # fnord shift # $arg ;; esac done "$@" -E | sed -n -e '/^# [0-9][0-9]* "\([^"]*\)".*/ s:: \1 \\:p' \ -e '/^#line [0-9][0-9]* "\([^"]*\)".*/ s:: \1 \\:p' | sed '$ s: \\$::' > "$tmpdepfile" rm -f "$depfile" echo "$object : \\" > "$depfile" cat < "$tmpdepfile" >> "$depfile" sed < "$tmpdepfile" '/^$/d;s/^ //;s/ \\$//;s/$/ :/' >> "$depfile" rm -f "$tmpdepfile" ;; msvisualcpp) # Important note: in order to support this mode, a compiler *must* # always write the preprocessed file to stdout. "$@" || exit $? # Remove the call to Libtool. if test "$libtool" = yes; then while test "X$1" != 'X--mode=compile'; do shift done shift fi IFS=" " for arg do case "$arg" in -o) shift ;; $object) shift ;; "-Gm"|"/Gm"|"-Gi"|"/Gi"|"-ZI"|"/ZI") set fnord "$@" shift shift ;; *) set fnord "$@" "$arg" shift shift ;; esac done "$@" -E 2>/dev/null | sed -n '/^#line [0-9][0-9]* "\([^"]*\)"/ s::\1:p' | $cygpath_u | sort -u > "$tmpdepfile" rm -f "$depfile" echo "$object : \\" > "$depfile" sed < "$tmpdepfile" -n -e 's% %\\ %g' -e '/^\(.*\)$/ s:: \1 \\:p' >> "$depfile" echo " " >> "$depfile" sed < "$tmpdepfile" -n -e 's% %\\ %g' -e '/^\(.*\)$/ s::\1\::p' >> "$depfile" rm -f "$tmpdepfile" ;; msvcmsys) # This case exists only to let depend.m4 do its work. It works by # looking at the text of this script. This case will never be run, # since it is checked for above. exit 1 ;; none) exec "$@" ;; *) echo "Unknown depmode $depmode" 1>&2 exit 1 ;; esac exit 0 # Local Variables: # mode: shell-script # sh-indentation: 2 # eval: (add-hook 'write-file-hooks 'time-stamp) # time-stamp-start: "scriptversion=" # time-stamp-format: "%:y-%02m-%02d.%02H" # time-stamp-time-zone: "UTC" # time-stamp-end: "; # UTC" # End: yaz-4.2.30/Makefile.am0000644000175000017500000000135511733047144011370 00000000000000## This file is part of the YAZ toolkit. ## Copyright (C) 1995-2012 Index Data AUTOMAKE_OPTIONS = foreign ACLOCAL_AMFLAGS = -I m4 SUBDIRS = src include util test client ztest zoom doc etc aclocaldir=$(datadir)/aclocal aclocal_DATA = m4/yaz.m4 pkgconfigdir = $(libdir)/pkgconfig pkgconfig_DATA = yaz.pc SPEC_FILE=$(PACKAGE).spec EXTRA_DIST=$(SPEC_FILE) IDMETA README LICENSE NEWS \ yaz-config.in yaz.pc.in m4/yaz.m4 m4/yaz_libxml2.m4 buildconf.sh \ Doxyfile.in m4/acx_pthread.m4 m4/ac_check_icu.m4 dist-hook: if test -x /usr/bin/git -a -d .git; then git log >ChangeLog ; cp ChangeLog $(distdir); fi test -d $(distdir)/win || mkdir $(distdir)/win -cp $(srcdir)/win/* $(distdir)/win .PHONY:debian debian: dpkg-buildpackage -rfakeroot yaz-4.2.30/configure.ac0000644000175000017500000003116711733047144011626 00000000000000dnl This file is part of the YAZ toolkit. dnl Copyright (C) 1995-2012 Index Data AC_PREREQ([2.60]) AC_INIT([yaz], m4_esyscmd([. ./IDMETA; echo $VERSION|tr -d '\n']), [yaz-help@indexdata.dk]) AC_CONFIG_HEADERS(include/config.h) AC_CONFIG_SRCDIR([configure.ac]) AC_CONFIG_AUX_DIR([config]) AM_INIT_AUTOMAKE([1.9]) dnl AC_SUBST([READLINE_LIBS]) AC_SUBST([YAZ_CONF_CFLAGS]) dnl ------ Checking programs AC_PROG_CC AC_PROG_CPP AC_CHECK_PROGS([YACC], 'bison -y') test -z "$YACC" && AC_MSG_WARN([GNU bison not found]) AC_CHECK_PROGS([TCLSH], [tclsh tclsh8.5 tclsh8.4 tclsh8.3 tclsh8.2], [tclsh]) AC_PROG_INSTALL AM_PROG_LIBTOOL AC_PATH_PROG([pkgconfigpath],[pkg-config],[NONE]) dnl YAZ_DOC dnl dnl AC_CHECK_HEADERS([dirent.h fnmatch.h wchar.h locale.h langinfo.h pwd.h unistd.h sys/select.h sys/socket.h sys/stat.h sys/time.h sys/times.h sys/types.h sys/un.h sys/wait.h sys/prctl.h netdb.h arpa/inet.h netinet/tcp.h netinet/in_systm.h],[],[],[]) AC_CHECK_HEADERS([net/if.h netinet/in.h netinet/if_ether.h],[],[],[ #if HAVE_SYS_TYPES_H #include #endif #if HAVE_SYS_SOCKET_H #include #endif #if HAVE_NET_IF_H #include #endif #if HAVE_NETINET_IN_H #include #endif ]) AC_HEADER_STDC if test "$ac_cv_header_stdc" = "no"; then AC_MSG_WARN([Your system doesn not seem to support ANSI C]) fi dnl ----- Types AC_CHECK_TYPES([long long]) dnl dnl ----- Sockets checkBoth=0 AC_CHECK_FUNC([connect]) if test "$ac_cv_func_connect" = "no"; then AC_CHECK_LIB([socket],[main], LIBS="$LIBS -lsocket", checkBoth=1) fi if test "$checkBoth" = "1"; then oldLibs=$LIBS LIBS="$LIBS -lsocket -lnsl" AC_CHECK_FUNC([accept], , [LIBS=$oldLibs]) fi AC_CHECK_FUNC([gethostbyname], ,[AC_CHECK_LIB(nsl, main, [LIBS="$LIBS -lnsl"])]) dnl dnl ------ OpenSSL AC_SUBST([SSL_CFLAGS]) AC_SUBST([SSL_LIBS]) openssl=no sslver=no AC_ARG_WITH([openssl], [ --with-openssl[=PREFIX] OpenSSL library in PREFIX], [openssl=$withval]) SSL_CFLAGS="" SSL_LIBPATH="" if test "$openssl" != "no"; then if test "$openssl" != "yes" -a "$openssl" != "default"; then if test -x $openssl/bin/pkg-config; then if $openssl/bin/pkg-config --exists openssl; then SSL_CFLAGS=`$openssl/bin/pkg-config --cflags openssl` SSL_LIBS="`$openssl/bin/pkg-config --libs openssl`" sslver=`$openssl/bin/pkg-config --modversion openssl` fi fi if test "$sslver" = "no"; then SSL_CFLAGS="-I$openssl/include -I$openssl/include/openssl" SSL_LIBPATH="-L$openssl/lib" fi else if test "$pkgconfigpath" != "NONE"; then if $pkgconfigpath --exists openssl; then SSL_CFLAGS=`$pkgconfigpath --cflags openssl` SSL_LIBS="`$pkgconfigpath --libs openssl`" sslver=`$pkgconfigpath --modversion openssl` fi fi if test "$sslver" = "no"; then SSL_CFLAGS="-I/usr/include/openssl" fi fi if test "$sslver" = "no"; then xLIBS="$LIBS"; xCPPFLAGS="$CPPFLAGS"; CPPFLAGS="$CPPFLAGS ${SSL_CFLAGS} ${SSL_LIBPATH}" SSL_LIBS="${SSL_LIBPATH}" AC_CHECK_LIB([crypto],[main]) if test "$ac_cv_lib_crypto_main" = "yes"; then SSL_LIBS="${SSL_LIBS} -lcrypto" fi AC_CHECK_LIB([ssl],[SSL_new]) if test "$ac_cv_lib_ssl_SSL_new" = "yes"; then AC_CHECK_HEADER([openssl/ssl.h],[sslver=yes]) SSL_LIBS="${SSL_LIBS} -lssl" fi if test "$sslver" != "yes"; then SSL_LIBS="" fi LIBS="$xLIBS" CPPFLAGS="$xCPPFLAGS" fi AC_MSG_CHECKING([for SSL]) if test "$sslver" != "no"; then AC_DEFINE([HAVE_OPENSSL_SSL_H],[1],[Define to 1 if OpenSSL is present]) AC_MSG_RESULT([$sslver]) else SSL_CFLAGS="" AC_MSG_RESULT([None]) if test "$openssl" != "default"; then AC_MSG_ERROR([OpenSSL development libraries missing]) fi fi fi dnl ------ GNU TLS gnutls=default AC_ARG_WITH([gnutls], [ --with-gnutls[=PREFIX] GNU TLS library in PREFIX], [gnutls=$withval]) if test "$gnutls" != "no" -a "$sslver" = "no"; then gnutlsver=no if test "$gnutls" != "yes" -a "$gnutls" != "default"; then if test -x $gnutls/bin/pkg-config; then if $gnutls/bin/pkg-config --exists gnutls; then SSL_CFLAGS=`$gnutls/bin/pkg-config --cflags gnutls` SSL_LIBS="`$gnutls/bin/pkg-config --libs gnutls`" gnutlsver=`$gnutls/bin/pkg-config --modversion gnutls` fi fi else if test "$pkgconfigpath" != "NONE"; then if $pkgconfigpath --exists gnutls; then SSL_CFLAGS=`$pkgconfigpath --cflags gnutls` SSL_LIBS="`$pkgconfigpath --libs gnutls`" gnutlsver=`$pkgconfigpath --modversion gnutls` fi fi fi AC_MSG_CHECKING([for GNU TLS]) if test "$gnutlsver" != "no"; then AC_DEFINE([HAVE_GNUTLS_H],[1],[Define to 1 if GNUTLS is present]) AC_MSG_RESULT([$gnutlsver]) else SSL_CFLAGS="" AC_MSG_RESULT([None]) if test "$gnutls" != "default"; then AC_MSG_ERROR([GNU TLS development libraries missing]) fi fi fi dnl dnl ------ GNU Readline READLINE_SHARED_LIBADD="" AC_CHECK_LIB([ncurses],[tgetent],[READLINE_SHARED_LIBADD="-lncurses"], AC_CHECK_LIB([termcap],[tgetent],[READLINE_SHARED_LIBADD="-ltermcap"]) ) READLINE_LIBS="" AC_CHECK_LIB([readline],[readline],[READLINE_LIBS="$READLINE_LIBS -lreadline $READLINE_SHARED_LIBADD"],,$READLINE_SHARED_LIBADD) AC_CHECK_LIB([history],[add_history],[READLINE_LIBS="$READLINE_LIBS -lhistory"]) if test "$ac_cv_lib_readline_readline" = "yes"; then AC_CHECK_HEADERS([readline/readline.h readline/history.h]) xLIBS=$LIBS LIBS="$LIBS $READLINE_LIBS" AC_TRY_LINK([ #include #include ],[ rl_attempted_completion_over = 0; ],AC_DEFINE([HAVE_READLINE_COMPLETION_OVER],1,[Define to 1 if rl_attempted_completion_over is defined])) AC_TRY_LINK([ #include #include ],[ rl_completion_matches (0, 0); ],[AC_DEFINE([HAVE_READLINE_RL_COMPLETION_MATCHES],1,[Define to 1 if rl_completion_matches is defined])]) LIBS=$xLIBS fi dnl ------ iconv AC_ARG_WITH([iconv],[ --with-iconv[=PREFIX] iconv library in PREFIX]) if test "$with_iconv" != "no"; then AC_MSG_CHECKING([for iconv]) oldLIBS="$LIBS" oldCPPFLAGS="${CPPFLAGS}" if test "$with_iconv" != "yes" -a "$with_iconv" != ""; then LIBS="$LIBS -L${with_iconv}/lib" CPPFLAGS="${CPPFLAGS} -I${with_iconv}/include" fi AC_TRY_LINK([ #include ],[ iconv_t t = iconv_open("", ""); ],[ AC_DEFINE([HAVE_ICONV_H],1,[Define to 1 if iconv.h is present]) AC_MSG_RESULT([yes]) ],[ LIBS="$LIBS -liconv" AC_TRY_LINK([ #include ],[ iconv_t t = iconv_open("", ""); ],[ AC_DEFINE([HAVE_ICONV_H],1) AC_MSG_RESULT([yes]) ],[ LIBS="$oldLIBS" CPPFLAGS="$oldCPPFLAGS" AC_MSG_RESULT([no]) ]) ]) fi dnl ------ various functions AC_CHECK_FUNCS([getaddrinfo vsnprintf gettimeofday poll strerror_r localtime_r usleep fopen64]) case $host in *-*-darwin*) trypoll="no"; ;; *) trypoll="yes"; ;; esac if test "$ac_cv_func_poll" = "yes" -a "$trypoll" = "yes"; then AC_CHECK_HEADERS([sys/poll.h]) fi dnl ------ socklen_t dnl We check for socklen_t by making prototypes with the dnl various types. First socklen_t, then size_t, finally int. dnl If the prototype succeeds, we are probably safe. dnl That works if accept is not preprocessor defined (such sa AIX) AC_MSG_CHECKING([for socklen_t]) AC_CACHE_VAL(ac_cv_check_socklen_t,[ac_cv_check_socklen_t='' AC_TRY_COMPILE([ #include #include #ifdef __cplusplus extern "C" { #endif #define try 1 #ifdef AIX #if AIX >= 51 #define try 0 #endif #endif #if try extern int accept(int, struct sockaddr *, socklen_t *); #endif #ifdef __cplusplus } #endif ],,[ac_cv_check_socklen_t=socklen_t],[ AC_TRY_COMPILE([ #include #include #ifdef __cplusplus extern "C" { #endif #define try 1 #ifdef AIX #if AIX >= 42 #define try 0 #endif #endif #if try extern int accept(int, struct sockaddr *, size_t t *); #endif #ifdef __cplusplus } #endif ],,[ac_cv_check_socklen_t=size_t],[ac_cv_check_socklen_t=int]) ]) ]) AC_MSG_RESULT([$ac_cv_check_socklen_t]) AC_DEFINE_UNQUOTED([YAZ_SOCKLEN_T],[$ac_cv_check_socklen_t],[socklen_t type]) dnl dnl ------ tcpd AC_ARG_ENABLE([tcpd],[ --enable-tcpd[=PREFIX] enable TCP wrapper for server if available]) if test "$enable_tcpd" -a "$enable_tcpd" != "no"; then oldLibs=$LIBS oldCPPFLAGS=$CPPFLAGS if test "$enable_tcpd" != "yes"; then LIBS="$LIBS -L$enable_tcpd/lib" CPPFLAGS="$CPPFLAGS -I$enable_tcpd/include" fi AC_MSG_CHECKING([for working tcpd.h]) LIBS="$LIBS -lwrap" AC_TRY_LINK([#include #include int allow_severity = LOG_INFO; int deny_severity = LOG_WARNING;], [struct request_info request_info; int i; i = hosts_access(&request_info);], tcpd_ok=1, tcpd_ok=0) LIBS=$oldLibs if test "$tcpd_ok" = "0"; then AC_MSG_RESULT([no]) AC_MSG_ERROR([tcpd development libraries missing]) CPPFLAGS=$oldCPPFLAGS else TCPD_LIBS="-lwrap" AC_MSG_RESULT([yes]) AC_DEFINE([HAVE_TCPD_H],1,[Define to 1 if tcp wrap library is present]) fi fi AC_SUBST([TCPD_LIBS]) dnl AC_SUBST([YAZ_CONFIG_CFLAGS]) dnl dnl ------ POSIX Threads HAVETHREADS=0 AC_ARG_ENABLE([threads],[ --disable-threads disable POSIX threads],[enable_threads=$enableval],[enable_threads=yes]) if test "$enable_threads" = "yes" -a "$HAVETHREADS" = "0"; then ACX_PTHREAD([ OCFLAGS=$CFLAGS CFLAGS="$CFLAGS $PTHREAD_CFLAGS" dnl unfortunately empty thread lib spec is problematic because dnl 'yaz-config --cflags' is not always passed to linker in dnl applications using YAZ (such as Zebra). if test "x$PTHREAD_LIBS" = "x"; then OLIBS=$LIBS for lib in -lpthread -lpthreads -lc_r; do LIBS="$lib $OLIBS" AC_TRY_LINK([ #include ], [ pthread_t id; pthread_join(id, 0); ], [ PTHREAD_LIBS=$lib; break ] ) done LIBS=$OLIBS fi LIBS="$LIBS $PTHREAD_LIBS" AC_DEFINE(YAZ_POSIX_THREADS,1,[Define to 1 if POSIX threads is present]) YAZ_CONFIG_CFLAGS="$YAZ_CONFIG_CFLAGS -DYAZ_POSIX_THREADS=1" ]) fi dnl ----- libXSLT/libEXLT/libXML2 AC_SUBST([XML2_CFLAGS]) xml_enabled=false YAZ_LIBXML2([ AC_DEFINE(YAZ_HAVE_XML2,1,[Define to 1 if Libxml2 is present]) YAZ_CONFIG_CFLAGS="$YAZ_CONFIG_CFLAGS -DYAZ_HAVE_XML2=1" xml_enabled=true ]) if test "$xml_enabled" = "true"; then YAZ_LIBXSLT([ AC_DEFINE(YAZ_HAVE_XSLT,1,[Define to 1 if Libxslt is present]) YAZ_CONFIG_CFLAGS="$YAZ_CONFIG_CFLAGS -DYAZ_HAVE_XSLT=1" ]) YAZ_LIBEXSLT([ AC_DEFINE(YAZ_HAVE_EXSLT,1,[Define to 1 if EXSLT is present]) YAZ_CONFIG_CFLAGS="$YAZ_CONFIG_CFLAGS -DYAZ_HAVE_EXSLT=1" ]) fi YAZ_CONFIG_CFLAGS="$YAZ_CONFIG_CFLAGS $XML2_CFLAGS" if test "$XML2_LIBS"; then LIBS="$XML2_LIBS $LIBS" fi dnl dnl AC_CHECK_ICU([3.4],[ if test "$xml_enabled" = "true"; then ICU_CPPFLAGS="$ICU_CPPFLAGS -D YAZ_HAVE_ICU=1" else ICU_CPPFLAGS="" AC_MSG_WARN([ICU support disabled because XML support is unavailable]) fi ]) dnl ------ versioning dnl WIN_FILEVERSION=`echo $PACKAGE_VERSION | $AWK 'BEGIN { FS = "."; } { m = $4; printf("%d,%d,%d,%d", $1, $2, $3 == "" ? "0" : $3, $4 == "" ? "1" : $4);}'` AC_SUBST([WIN_FILEVERSION]) VERSION_HEX=`echo $PACKAGE_VERSION | $AWK 'BEGIN { FS = "."; } { printf("%x", ($1 * 256 + $2) * 256 + $3);}'` AC_SUBST([VERSION_HEX]) if test -d ${srcdir}/.git; then VERSION_SHA1=`git show --pretty=format:%H|head -1` else VERSION_SHA1=`head -1 ${srcdir}/ChangeLog|awk '{print $2}'` fi AC_SUBST([VERSION_SHA1]) dnl dnl ------ Makefiles dnl AC_OUTPUT([ Makefile src/Makefile test/Makefile util/Makefile include/Makefile include/yaz/Makefile client/Makefile ztest/Makefile zoom/Makefile doc/Makefile doc/local.ent doc/common/Makefile doc/common/print.dsl etc/Makefile yaz-config yaz.pc Doxyfile win/version.nsi include/yaz/yaz-version.h ],[ sed s%echo_source=yes%echo_source=no%g < yaz-config > util/yaz-config && chmod +x yaz-config util/yaz-config ] ) echo \ "------------------------------------------------------------------------ Configuration: YAZ Package: ${PACKAGE} YAZ Version: ${VERSION} Bugreport: ${PACKAGE_BUGREPORT} Source code location: ${srcdir} C Preprocessor: ${CPP} C Preprocessor flags: ${CPPFLAGS} C Compiler: ${CC} C Compiler flags: ${CFLAGS} Linker flags: ${LDFLAGS} Linked libs: ${LIBS} Host System Type: ${host} Install path: ${prefix} Automake: ${AUTOMAKE} Archiver: ${AR} Ranlib: ${RANLIB} ------------------------------------------------------------------------" dnl Local Variables: dnl mode:shell-script dnl sh-indentation: 2 dnl sh-basic-offset: 4 dnl End: yaz-4.2.30/Doxyfile.in0000644000175000017500000015154611733047144011457 00000000000000# Doxyfile 1.5.3 # This file describes the settings to be used by the documentation system # doxygen (www.doxygen.org) for a project # # All text after a hash (#) is considered a comment and will be ignored # The format is: # TAG = value [value, ...] # For lists items can also be appended using: # TAG += value [value, ...] # Values that contain spaces should be placed between quotes (" ") #--------------------------------------------------------------------------- # Project related configuration options #--------------------------------------------------------------------------- # This tag specifies the encoding used for all characters in the config file that # follow. The default is UTF-8 which is also the encoding used for all text before # the first occurrence of this tag. Doxygen uses libiconv (or the iconv built into # libc) for the transcoding. See http://www.gnu.org/software/libiconv for the list of # possible encodings. DOXYFILE_ENCODING = UTF-8 # The PROJECT_NAME tag is a single word (or a sequence of words surrounded # by quotes) that should identify the project. PROJECT_NAME = YAZ # The PROJECT_NUMBER tag can be used to enter a project or revision number. # This could be handy for archiving the generated documentation or # if some version control system is used. PROJECT_NUMBER = @VERSION@ # The OUTPUT_DIRECTORY tag is used to specify the (relative or absolute) # base path where the generated documentation will be put. # If a relative path is entered, it will be relative to the location # where doxygen was started. If left blank the current directory will be used. OUTPUT_DIRECTORY = dox # If the CREATE_SUBDIRS tag is set to YES, then doxygen will create # 4096 sub-directories (in 2 levels) under the output directory of each output # format and will distribute the generated files over these directories. # Enabling this option can be useful when feeding doxygen a huge amount of # source files, where putting all generated files in the same directory would # otherwise cause performance problems for the file system. CREATE_SUBDIRS = NO # The OUTPUT_LANGUAGE tag is used to specify the language in which all # documentation generated by doxygen is written. Doxygen will use this # information to generate all constant output in the proper language. # The default language is English, other supported languages are: # Afrikaans, Arabic, Brazilian, Catalan, Chinese, Chinese-Traditional, # Croatian, Czech, Danish, Dutch, Finnish, French, German, Greek, Hungarian, # Italian, Japanese, Japanese-en (Japanese with English messages), Korean, # Korean-en, Lithuanian, Norwegian, Polish, Portuguese, Romanian, Russian, # Serbian, Slovak, Slovene, Spanish, Swedish, and Ukrainian. OUTPUT_LANGUAGE = English # If the BRIEF_MEMBER_DESC tag is set to YES (the default) Doxygen will # include brief member descriptions after the members that are listed in # the file and class documentation (similar to JavaDoc). # Set to NO to disable this. BRIEF_MEMBER_DESC = YES # If the REPEAT_BRIEF tag is set to YES (the default) Doxygen will prepend # the brief description of a member or function before the detailed description. # Note: if both HIDE_UNDOC_MEMBERS and BRIEF_MEMBER_DESC are set to NO, the # brief descriptions will be completely suppressed. REPEAT_BRIEF = YES # This tag implements a quasi-intelligent brief description abbreviator # that is used to form the text in various listings. Each string # in this list, if found as the leading text of the brief description, will be # stripped from the text and the result after processing the whole list, is # used as the annotated text. Otherwise, the brief description is used as-is. # If left blank, the following values are used ("$name" is automatically # replaced with the name of the entity): "The $name class" "The $name widget" # "The $name file" "is" "provides" "specifies" "contains" # "represents" "a" "an" "the" ABBREVIATE_BRIEF = # If the ALWAYS_DETAILED_SEC and REPEAT_BRIEF tags are both set to YES then # Doxygen will generate a detailed section even if there is only a brief # description. ALWAYS_DETAILED_SEC = NO # If the INLINE_INHERITED_MEMB tag is set to YES, doxygen will show all # inherited members of a class in the documentation of that class as if those # members were ordinary class members. Constructors, destructors and assignment # operators of the base classes will not be shown. INLINE_INHERITED_MEMB = NO # If the FULL_PATH_NAMES tag is set to YES then Doxygen will prepend the full # path before files name in the file list and in the header files. If set # to NO the shortest path that makes the file name unique will be used. FULL_PATH_NAMES = NO # If the FULL_PATH_NAMES tag is set to YES then the STRIP_FROM_PATH tag # can be used to strip a user-defined part of the path. Stripping is # only done if one of the specified strings matches the left-hand part of # the path. The tag can be used to show relative paths in the file list. # If left blank the directory from which doxygen is run is used as the # path to strip. STRIP_FROM_PATH = # The STRIP_FROM_INC_PATH tag can be used to strip a user-defined part of # the path mentioned in the documentation of a class, which tells # the reader which header file to include in order to use a class. # If left blank only the name of the header file containing the class # definition is used. Otherwise one should specify the include paths that # are normally passed to the compiler using the -I flag. STRIP_FROM_INC_PATH = # If the SHORT_NAMES tag is set to YES, doxygen will generate much shorter # (but less readable) file names. This can be useful is your file systems # doesn't support long names like on DOS, Mac, or CD-ROM. SHORT_NAMES = NO # If the JAVADOC_AUTOBRIEF tag is set to YES then Doxygen # will interpret the first line (until the first dot) of a JavaDoc-style # comment as the brief description. If set to NO, the JavaDoc # comments will behave just like regular Qt-style comments # (thus requiring an explicit @brief command for a brief description.) JAVADOC_AUTOBRIEF = NO # If the QT_AUTOBRIEF tag is set to YES then Doxygen will # interpret the first line (until the first dot) of a Qt-style # comment as the brief description. If set to NO, the comments # will behave just like regular Qt-style comments (thus requiring # an explicit \brief command for a brief description.) QT_AUTOBRIEF = NO # The MULTILINE_CPP_IS_BRIEF tag can be set to YES to make Doxygen # treat a multi-line C++ special comment block (i.e. a block of //! or /// # comments) as a brief description. This used to be the default behaviour. # The new default is to treat a multi-line C++ comment block as a detailed # description. Set this tag to YES if you prefer the old behaviour instead. MULTILINE_CPP_IS_BRIEF = NO # If the INHERIT_DOCS tag is set to YES (the default) then an undocumented # member inherits the documentation from any documented member that it # re-implements. INHERIT_DOCS = YES # If the SEPARATE_MEMBER_PAGES tag is set to YES, then doxygen will produce # a new page for each member. If set to NO, the documentation of a member will # be part of the file/class/namespace that contains it. SEPARATE_MEMBER_PAGES = NO # The TAB_SIZE tag can be used to set the number of spaces in a tab. # Doxygen uses this value to replace tabs by spaces in code fragments. TAB_SIZE = 8 # This tag can be used to specify a number of aliases that acts # as commands in the documentation. An alias has the form "name=value". # For example adding "sideeffect=\par Side Effects:\n" will allow you to # put the command \sideeffect (or @sideeffect) in the documentation, which # will result in a user-defined paragraph with heading "Side Effects:". # You can put \n's in the value part of an alias to insert newlines. ALIASES = # Set the OPTIMIZE_OUTPUT_FOR_C tag to YES if your project consists of C # sources only. Doxygen will then generate output that is more tailored for C. # For instance, some of the names that are used will be different. The list # of all members will be omitted, etc. OPTIMIZE_OUTPUT_FOR_C = YES # Set the OPTIMIZE_OUTPUT_JAVA tag to YES if your project consists of Java # sources only. Doxygen will then generate output that is more tailored for Java. # For instance, namespaces will be presented as packages, qualified scopes # will look different, etc. OPTIMIZE_OUTPUT_JAVA = NO # If you use STL classes (i.e. std::string, std::vector, etc.) but do not want to # include (a tag file for) the STL sources as input, then you should # set this tag to YES in order to let doxygen match functions declarations and # definitions whose arguments contain STL classes (e.g. func(std::string); v.s. # func(std::string) {}). This also make the inheritance and collaboration # diagrams that involve STL classes more complete and accurate. BUILTIN_STL_SUPPORT = NO # If you use Microsoft's C++/CLI language, you should set this option to YES to # enable parsing support. CPP_CLI_SUPPORT = NO # If member grouping is used in the documentation and the DISTRIBUTE_GROUP_DOC # tag is set to YES, then doxygen will reuse the documentation of the first # member in the group (if any) for the other members of the group. By default # all members of a group must be documented explicitly. DISTRIBUTE_GROUP_DOC = NO # Set the SUBGROUPING tag to YES (the default) to allow class member groups of # the same type (for instance a group of public functions) to be put as a # subgroup of that type (e.g. under the Public Functions section). Set it to # NO to prevent subgrouping. Alternatively, this can be done per class using # the \nosubgrouping command. SUBGROUPING = YES #--------------------------------------------------------------------------- # Build related configuration options #--------------------------------------------------------------------------- # If the EXTRACT_ALL tag is set to YES doxygen will assume all entities in # documentation are documented, even if no documentation was available. # Private class members and static file members will be hidden unless # the EXTRACT_PRIVATE and EXTRACT_STATIC tags are set to YES EXTRACT_ALL = YES # If the EXTRACT_PRIVATE tag is set to YES all private members of a class # will be included in the documentation. EXTRACT_PRIVATE = YES # If the EXTRACT_STATIC tag is set to YES all static members of a file # will be included in the documentation. EXTRACT_STATIC = YES # If the EXTRACT_LOCAL_CLASSES tag is set to YES classes (and structs) # defined locally in source files will be included in the documentation. # If set to NO only classes defined in header files are included. EXTRACT_LOCAL_CLASSES = YES # This flag is only useful for Objective-C code. When set to YES local # methods, which are defined in the implementation section but not in # the interface are included in the documentation. # If set to NO (the default) only methods in the interface are included. EXTRACT_LOCAL_METHODS = NO # If this flag is set to YES, the members of anonymous namespaces will be extracted # and appear in the documentation as a namespace called 'anonymous_namespace{file}', # where file will be replaced with the base name of the file that contains the anonymous # namespace. By default anonymous namespace are hidden. EXTRACT_ANON_NSPACES = NO # If the HIDE_UNDOC_MEMBERS tag is set to YES, Doxygen will hide all # undocumented members of documented classes, files or namespaces. # If set to NO (the default) these members will be included in the # various overviews, but no documentation section is generated. # This option has no effect if EXTRACT_ALL is enabled. HIDE_UNDOC_MEMBERS = NO # If the HIDE_UNDOC_CLASSES tag is set to YES, Doxygen will hide all # undocumented classes that are normally visible in the class hierarchy. # If set to NO (the default) these classes will be included in the various # overviews. This option has no effect if EXTRACT_ALL is enabled. HIDE_UNDOC_CLASSES = NO # If the HIDE_FRIEND_COMPOUNDS tag is set to YES, Doxygen will hide all # friend (class|struct|union) declarations. # If set to NO (the default) these declarations will be included in the # documentation. HIDE_FRIEND_COMPOUNDS = NO # If the HIDE_IN_BODY_DOCS tag is set to YES, Doxygen will hide any # documentation blocks found inside the body of a function. # If set to NO (the default) these blocks will be appended to the # function's detailed documentation block. HIDE_IN_BODY_DOCS = NO # The INTERNAL_DOCS tag determines if documentation # that is typed after a \internal command is included. If the tag is set # to NO (the default) then the documentation will be excluded. # Set it to YES to include the internal documentation. INTERNAL_DOCS = NO # If the CASE_SENSE_NAMES tag is set to NO then Doxygen will only generate # file names in lower-case letters. If set to YES upper-case letters are also # allowed. This is useful if you have classes or files whose names only differ # in case and if your file system supports case sensitive file names. Windows # and Mac users are advised to set this option to NO. CASE_SENSE_NAMES = YES # If the HIDE_SCOPE_NAMES tag is set to NO (the default) then Doxygen # will show members with their full class and namespace scopes in the # documentation. If set to YES the scope will be hidden. HIDE_SCOPE_NAMES = NO # If the SHOW_INCLUDE_FILES tag is set to YES (the default) then Doxygen # will put a list of the files that are included by a file in the documentation # of that file. SHOW_INCLUDE_FILES = YES # If the INLINE_INFO tag is set to YES (the default) then a tag [inline] # is inserted in the documentation for inline members. INLINE_INFO = YES # If the SORT_MEMBER_DOCS tag is set to YES (the default) then doxygen # will sort the (detailed) documentation of file and class members # alphabetically by member name. If set to NO the members will appear in # declaration order. SORT_MEMBER_DOCS = YES # If the SORT_BRIEF_DOCS tag is set to YES then doxygen will sort the # brief documentation of file, namespace and class members alphabetically # by member name. If set to NO (the default) the members will appear in # declaration order. SORT_BRIEF_DOCS = NO # If the SORT_BY_SCOPE_NAME tag is set to YES, the class list will be # sorted by fully-qualified names, including namespaces. If set to # NO (the default), the class list will be sorted only by class name, # not including the namespace part. # Note: This option is not very useful if HIDE_SCOPE_NAMES is set to YES. # Note: This option applies only to the class list, not to the # alphabetical list. SORT_BY_SCOPE_NAME = NO # The GENERATE_TODOLIST tag can be used to enable (YES) or # disable (NO) the todo list. This list is created by putting \todo # commands in the documentation. GENERATE_TODOLIST = YES # The GENERATE_TESTLIST tag can be used to enable (YES) or # disable (NO) the test list. This list is created by putting \test # commands in the documentation. GENERATE_TESTLIST = YES # The GENERATE_BUGLIST tag can be used to enable (YES) or # disable (NO) the bug list. This list is created by putting \bug # commands in the documentation. GENERATE_BUGLIST = YES # The GENERATE_DEPRECATEDLIST tag can be used to enable (YES) or # disable (NO) the deprecated list. This list is created by putting # \deprecated commands in the documentation. GENERATE_DEPRECATEDLIST= YES # The ENABLED_SECTIONS tag can be used to enable conditional # documentation sections, marked by \if sectionname ... \endif. ENABLED_SECTIONS = # The MAX_INITIALIZER_LINES tag determines the maximum number of lines # the initial value of a variable or define consists of for it to appear in # the documentation. If the initializer consists of more lines than specified # here it will be hidden. Use a value of 0 to hide initializers completely. # The appearance of the initializer of individual variables and defines in the # documentation can be controlled using \showinitializer or \hideinitializer # command in the documentation regardless of this setting. MAX_INITIALIZER_LINES = 30 # Set the SHOW_USED_FILES tag to NO to disable the list of files generated # at the bottom of the documentation of classes and structs. If set to YES the # list will mention the files that were used to generate the documentation. SHOW_USED_FILES = YES # If the sources in your project are distributed over multiple directories # then setting the SHOW_DIRECTORIES tag to YES will show the directory hierarchy # in the documentation. The default is NO. SHOW_DIRECTORIES = NO # The FILE_VERSION_FILTER tag can be used to specify a program or script that # doxygen should invoke to get the current version for each file (typically from the # version control system). Doxygen will invoke the program by executing (via # popen()) the command , where is the value of # the FILE_VERSION_FILTER tag, and is the name of an input file # provided by doxygen. Whatever the program writes to standard output # is used as the file version. See the manual for examples. FILE_VERSION_FILTER = #--------------------------------------------------------------------------- # configuration options related to warning and progress messages #--------------------------------------------------------------------------- # The QUIET tag can be used to turn on/off the messages that are generated # by doxygen. Possible values are YES and NO. If left blank NO is used. QUIET = NO # The WARNINGS tag can be used to turn on/off the warning messages that are # generated by doxygen. Possible values are YES and NO. If left blank # NO is used. WARNINGS = YES # If WARN_IF_UNDOCUMENTED is set to YES, then doxygen will generate warnings # for undocumented members. If EXTRACT_ALL is set to YES then this flag will # automatically be disabled. WARN_IF_UNDOCUMENTED = YES # If WARN_IF_DOC_ERROR is set to YES, doxygen will generate warnings for # potential errors in the documentation, such as not documenting some # parameters in a documented function, or documenting parameters that # don't exist or using markup commands wrongly. WARN_IF_DOC_ERROR = YES # This WARN_NO_PARAMDOC option can be abled to get warnings for # functions that are documented, but have no documentation for their parameters # or return value. If set to NO (the default) doxygen will only warn about # wrong or incomplete parameter documentation, but not about the absence of # documentation. WARN_NO_PARAMDOC = NO # The WARN_FORMAT tag determines the format of the warning messages that # doxygen can produce. The string should contain the $file, $line, and $text # tags, which will be replaced by the file and line number from which the # warning originated and the warning text. Optionally the format may contain # $version, which will be replaced by the version of the file (if it could # be obtained via FILE_VERSION_FILTER) WARN_FORMAT = "$file:$line: $text " # The WARN_LOGFILE tag can be used to specify a file to which warning # and error messages should be written. If left blank the output is written # to stderr. WARN_LOGFILE = #--------------------------------------------------------------------------- # configuration options related to the input files #--------------------------------------------------------------------------- # The INPUT tag can be used to specify the files and/or directories that contain # documented source files. You may enter file names like "myfile.cpp" or # directories like "/usr/src/myproject". Separate the files or directories # with spaces. INPUT = src ztest include # This tag can be used to specify the character encoding of the source files that # doxygen parses. Internally doxygen uses the UTF-8 encoding, which is also the default # input encoding. Doxygen uses libiconv (or the iconv built into libc) for the transcoding. # See http://www.gnu.org/software/libiconv for the list of possible encodings. INPUT_ENCODING = UTF-8 # If the value of the INPUT tag contains directories, you can use the # FILE_PATTERNS tag to specify one or more wildcard pattern (like *.cpp # and *.h) to filter out the source-files in the directories. If left # blank the following patterns are tested: # *.c *.cc *.cxx *.cpp *.c++ *.java *.ii *.ixx *.ipp *.i++ *.inl *.h *.hh *.hxx # *.hpp *.h++ *.idl *.odl *.cs *.php *.php3 *.inc *.m *.mm *.py FILE_PATTERNS = # The RECURSIVE tag can be used to turn specify whether or not subdirectories # should be searched for input files as well. Possible values are YES and NO. # If left blank NO is used. RECURSIVE = YES # The EXCLUDE tag can be used to specify files and/or directories that should # excluded from the INPUT source files. This way you can easily exclude a # subdirectory from a directory tree whose root is specified with the INPUT tag. EXCLUDE = # The EXCLUDE_SYMLINKS tag can be used select whether or not files or # directories that are symbolic links (a Unix filesystem feature) are excluded # from the input. EXCLUDE_SYMLINKS = NO # If the value of the INPUT tag contains directories, you can use the # EXCLUDE_PATTERNS tag to specify one or more wildcard patterns to exclude # certain files from those directories. Note that the wildcards are matched # against the file with absolute path, so to exclude all test directories # for example use the pattern */test/* EXCLUDE_PATTERNS = # The EXCLUDE_SYMBOLS tag can be used to specify one or more symbol names # (namespaces, classes, functions, etc.) that should be excluded from the output. # The symbol name can be a fully qualified name, a word, or if the wildcard * is used, # a substring. Examples: ANamespace, AClass, AClass::ANamespace, ANamespace::*Test EXCLUDE_SYMBOLS = # The EXAMPLE_PATH tag can be used to specify one or more files or # directories that contain example code fragments that are included (see # the \include command). EXAMPLE_PATH = # If the value of the EXAMPLE_PATH tag contains directories, you can use the # EXAMPLE_PATTERNS tag to specify one or more wildcard pattern (like *.cpp # and *.h) to filter out the source-files in the directories. If left # blank all files are included. EXAMPLE_PATTERNS = # If the EXAMPLE_RECURSIVE tag is set to YES then subdirectories will be # searched for input files to be used with the \include or \dontinclude # commands irrespective of the value of the RECURSIVE tag. # Possible values are YES and NO. If left blank NO is used. EXAMPLE_RECURSIVE = NO # The IMAGE_PATH tag can be used to specify one or more files or # directories that contain image that are included in the documentation (see # the \image command). IMAGE_PATH = # The INPUT_FILTER tag can be used to specify a program that doxygen should # invoke to filter for each input file. Doxygen will invoke the filter program # by executing (via popen()) the command , where # is the value of the INPUT_FILTER tag, and is the name of an # input file. Doxygen will then use the output that the filter program writes # to standard output. If FILTER_PATTERNS is specified, this tag will be # ignored. INPUT_FILTER = # The FILTER_PATTERNS tag can be used to specify filters on a per file pattern # basis. Doxygen will compare the file name with each pattern and apply the # filter if there is a match. The filters are a list of the form: # pattern=filter (like *.cpp=my_cpp_filter). See INPUT_FILTER for further # info on how filters are used. If FILTER_PATTERNS is empty, INPUT_FILTER # is applied to all files. FILTER_PATTERNS = # If the FILTER_SOURCE_FILES tag is set to YES, the input filter (if set using # INPUT_FILTER) will be used to filter the input files when producing source # files to browse (i.e. when SOURCE_BROWSER is set to YES). FILTER_SOURCE_FILES = NO #--------------------------------------------------------------------------- # configuration options related to source browsing #--------------------------------------------------------------------------- # If the SOURCE_BROWSER tag is set to YES then a list of source files will # be generated. Documented entities will be cross-referenced with these sources. # Note: To get rid of all source code in the generated output, make sure also # VERBATIM_HEADERS is set to NO. If you have enabled CALL_GRAPH or CALLER_GRAPH # then you must also enable this option. If you don't then doxygen will produce # a warning and turn it on anyway SOURCE_BROWSER = YES # Setting the INLINE_SOURCES tag to YES will include the body # of functions and classes directly in the documentation. INLINE_SOURCES = NO # Setting the STRIP_CODE_COMMENTS tag to YES (the default) will instruct # doxygen to hide any special comment blocks from generated source code # fragments. Normal C and C++ comments will always remain visible. STRIP_CODE_COMMENTS = YES # If the REFERENCED_BY_RELATION tag is set to YES (the default) # then for each documented function all documented # functions referencing it will be listed. REFERENCED_BY_RELATION = YES # If the REFERENCES_RELATION tag is set to YES (the default) # then for each documented function all documented entities # called/used by that function will be listed. REFERENCES_RELATION = YES # If the REFERENCES_LINK_SOURCE tag is set to YES (the default) # and SOURCE_BROWSER tag is set to YES, then the hyperlinks from # functions in REFERENCES_RELATION and REFERENCED_BY_RELATION lists will # link to the source code. Otherwise they will link to the documentstion. REFERENCES_LINK_SOURCE = YES # If the USE_HTAGS tag is set to YES then the references to source code # will point to the HTML generated by the htags(1) tool instead of doxygen # built-in source browser. The htags tool is part of GNU's global source # tagging system (see http://www.gnu.org/software/global/global.html). You # will need version 4.8.6 or higher. USE_HTAGS = NO # If the VERBATIM_HEADERS tag is set to YES (the default) then Doxygen # will generate a verbatim copy of the header file for each class for # which an include is specified. Set to NO to disable this. VERBATIM_HEADERS = YES #--------------------------------------------------------------------------- # configuration options related to the alphabetical class index #--------------------------------------------------------------------------- # If the ALPHABETICAL_INDEX tag is set to YES, an alphabetical index # of all compounds will be generated. Enable this if the project # contains a lot of classes, structs, unions or interfaces. ALPHABETICAL_INDEX = NO # If the alphabetical index is enabled (see ALPHABETICAL_INDEX) then # the COLS_IN_ALPHA_INDEX tag can be used to specify the number of columns # in which this list will be split (can be a number in the range [1..20]) COLS_IN_ALPHA_INDEX = 5 # In case all classes in a project start with a common prefix, all # classes will be put under the same header in the alphabetical index. # The IGNORE_PREFIX tag can be used to specify one or more prefixes that # should be ignored while generating the index headers. IGNORE_PREFIX = #--------------------------------------------------------------------------- # configuration options related to the HTML output #--------------------------------------------------------------------------- # If the GENERATE_HTML tag is set to YES (the default) Doxygen will # generate HTML output. GENERATE_HTML = YES # The HTML_OUTPUT tag is used to specify where the HTML docs will be put. # If a relative path is entered the value of OUTPUT_DIRECTORY will be # put in front of it. If left blank `html' will be used as the default path. HTML_OUTPUT = html # The HTML_FILE_EXTENSION tag can be used to specify the file extension for # each generated HTML page (for example: .htm,.php,.asp). If it is left blank # doxygen will generate files with .html extension. HTML_FILE_EXTENSION = .html # The HTML_HEADER tag can be used to specify a personal HTML header for # each generated HTML page. If it is left blank doxygen will generate a # standard header. HTML_HEADER = # The HTML_FOOTER tag can be used to specify a personal HTML footer for # each generated HTML page. If it is left blank doxygen will generate a # standard footer. HTML_FOOTER = # The HTML_STYLESHEET tag can be used to specify a user-defined cascading # style sheet that is used by each HTML page. It can be used to # fine-tune the look of the HTML output. If the tag is left blank doxygen # will generate a default style sheet. Note that doxygen will try to copy # the style sheet file to the HTML output directory, so don't put your own # stylesheet in the HTML output directory as well, or it will be erased! HTML_STYLESHEET = # If the HTML_ALIGN_MEMBERS tag is set to YES, the members of classes, # files or namespaces will be aligned in HTML using tables. If set to # NO a bullet list will be used. HTML_ALIGN_MEMBERS = YES # If the GENERATE_HTMLHELP tag is set to YES, additional index files # will be generated that can be used as input for tools like the # Microsoft HTML help workshop to generate a compressed HTML help file (.chm) # of the generated HTML documentation. GENERATE_HTMLHELP = NO # If the HTML_DYNAMIC_SECTIONS tag is set to YES then the generated HTML # documentation will contain sections that can be hidden and shown after the # page has loaded. For this to work a browser that supports # JavaScript and DHTML is required (for instance Mozilla 1.0+, Firefox # Netscape 6.0+, Internet explorer 5.0+, Konqueror, or Safari). HTML_DYNAMIC_SECTIONS = NO # If the GENERATE_HTMLHELP tag is set to YES, the CHM_FILE tag can # be used to specify the file name of the resulting .chm file. You # can add a path in front of the file if the result should not be # written to the html output directory. CHM_FILE = # If the GENERATE_HTMLHELP tag is set to YES, the HHC_LOCATION tag can # be used to specify the location (absolute path including file name) of # the HTML help compiler (hhc.exe). If non-empty doxygen will try to run # the HTML help compiler on the generated index.hhp. HHC_LOCATION = # If the GENERATE_HTMLHELP tag is set to YES, the GENERATE_CHI flag # controls if a separate .chi index file is generated (YES) or that # it should be included in the master .chm file (NO). GENERATE_CHI = NO # If the GENERATE_HTMLHELP tag is set to YES, the BINARY_TOC flag # controls whether a binary table of contents is generated (YES) or a # normal table of contents (NO) in the .chm file. BINARY_TOC = NO # The TOC_EXPAND flag can be set to YES to add extra items for group members # to the contents of the HTML help documentation and to the tree view. TOC_EXPAND = NO # The DISABLE_INDEX tag can be used to turn on/off the condensed index at # top of each HTML page. The value NO (the default) enables the index and # the value YES disables it. DISABLE_INDEX = NO # This tag can be used to set the number of enum values (range [1..20]) # that doxygen will group on one line in the generated HTML documentation. ENUM_VALUES_PER_LINE = 4 # If the GENERATE_TREEVIEW tag is set to YES, a side panel will be # generated containing a tree-like index structure (just like the one that # is generated for HTML Help). For this to work a browser that supports # JavaScript, DHTML, CSS and frames is required (for instance Mozilla 1.0+, # Netscape 6.0+, Internet explorer 5.0+, or Konqueror). Windows users are # probably better off using the HTML help feature. GENERATE_TREEVIEW = NO # If the treeview is enabled (see GENERATE_TREEVIEW) then this tag can be # used to set the initial width (in pixels) of the frame in which the tree # is shown. TREEVIEW_WIDTH = 250 #--------------------------------------------------------------------------- # configuration options related to the LaTeX output #--------------------------------------------------------------------------- # If the GENERATE_LATEX tag is set to YES (the default) Doxygen will # generate Latex output. GENERATE_LATEX = YES # The LATEX_OUTPUT tag is used to specify where the LaTeX docs will be put. # If a relative path is entered the value of OUTPUT_DIRECTORY will be # put in front of it. If left blank `latex' will be used as the default path. LATEX_OUTPUT = latex # The LATEX_CMD_NAME tag can be used to specify the LaTeX command name to be # invoked. If left blank `latex' will be used as the default command name. LATEX_CMD_NAME = latex # The MAKEINDEX_CMD_NAME tag can be used to specify the command name to # generate index for LaTeX. If left blank `makeindex' will be used as the # default command name. MAKEINDEX_CMD_NAME = makeindex # If the COMPACT_LATEX tag is set to YES Doxygen generates more compact # LaTeX documents. This may be useful for small projects and may help to # save some trees in general. COMPACT_LATEX = NO # The PAPER_TYPE tag can be used to set the paper type that is used # by the printer. Possible values are: a4, a4wide, letter, legal and # executive. If left blank a4wide will be used. PAPER_TYPE = a4wide # The EXTRA_PACKAGES tag can be to specify one or more names of LaTeX # packages that should be included in the LaTeX output. EXTRA_PACKAGES = # The LATEX_HEADER tag can be used to specify a personal LaTeX header for # the generated latex document. The header should contain everything until # the first chapter. If it is left blank doxygen will generate a # standard header. Notice: only use this tag if you know what you are doing! LATEX_HEADER = # If the PDF_HYPERLINKS tag is set to YES, the LaTeX that is generated # is prepared for conversion to pdf (using ps2pdf). The pdf file will # contain links (just like the HTML output) instead of page references # This makes the output suitable for online browsing using a pdf viewer. PDF_HYPERLINKS = NO # If the USE_PDFLATEX tag is set to YES, pdflatex will be used instead of # plain latex in the generated Makefile. Set this option to YES to get a # higher quality PDF documentation. USE_PDFLATEX = NO # If the LATEX_BATCHMODE tag is set to YES, doxygen will add the \\batchmode. # command to the generated LaTeX files. This will instruct LaTeX to keep # running if errors occur, instead of asking the user for help. # This option is also used when generating formulas in HTML. LATEX_BATCHMODE = NO # If LATEX_HIDE_INDICES is set to YES then doxygen will not # include the index chapters (such as File Index, Compound Index, etc.) # in the output. LATEX_HIDE_INDICES = NO #--------------------------------------------------------------------------- # configuration options related to the RTF output #--------------------------------------------------------------------------- # If the GENERATE_RTF tag is set to YES Doxygen will generate RTF output # The RTF output is optimized for Word 97 and may not look very pretty with # other RTF readers or editors. GENERATE_RTF = NO # The RTF_OUTPUT tag is used to specify where the RTF docs will be put. # If a relative path is entered the value of OUTPUT_DIRECTORY will be # put in front of it. If left blank `rtf' will be used as the default path. RTF_OUTPUT = rtf # If the COMPACT_RTF tag is set to YES Doxygen generates more compact # RTF documents. This may be useful for small projects and may help to # save some trees in general. COMPACT_RTF = NO # If the RTF_HYPERLINKS tag is set to YES, the RTF that is generated # will contain hyperlink fields. The RTF file will # contain links (just like the HTML output) instead of page references. # This makes the output suitable for online browsing using WORD or other # programs which support those fields. # Note: wordpad (write) and others do not support links. RTF_HYPERLINKS = NO # Load stylesheet definitions from file. Syntax is similar to doxygen's # config file, i.e. a series of assignments. You only have to provide # replacements, missing definitions are set to their default value. RTF_STYLESHEET_FILE = # Set optional variables used in the generation of an rtf document. # Syntax is similar to doxygen's config file. RTF_EXTENSIONS_FILE = #--------------------------------------------------------------------------- # configuration options related to the man page output #--------------------------------------------------------------------------- # If the GENERATE_MAN tag is set to YES (the default) Doxygen will # generate man pages GENERATE_MAN = NO # The MAN_OUTPUT tag is used to specify where the man pages will be put. # If a relative path is entered the value of OUTPUT_DIRECTORY will be # put in front of it. If left blank `man' will be used as the default path. MAN_OUTPUT = man # The MAN_EXTENSION tag determines the extension that is added to # the generated man pages (default is the subroutine's section .3) MAN_EXTENSION = .3 # If the MAN_LINKS tag is set to YES and Doxygen generates man output, # then it will generate one additional man file for each entity # documented in the real man page(s). These additional files # only source the real man page, but without them the man command # would be unable to find the correct page. The default is NO. MAN_LINKS = NO #--------------------------------------------------------------------------- # configuration options related to the XML output #--------------------------------------------------------------------------- # If the GENERATE_XML tag is set to YES Doxygen will # generate an XML file that captures the structure of # the code including all documentation. GENERATE_XML = NO # The XML_OUTPUT tag is used to specify where the XML pages will be put. # If a relative path is entered the value of OUTPUT_DIRECTORY will be # put in front of it. If left blank `xml' will be used as the default path. XML_OUTPUT = xml # The XML_SCHEMA tag can be used to specify an XML schema, # which can be used by a validating XML parser to check the # syntax of the XML files. XML_SCHEMA = # The XML_DTD tag can be used to specify an XML DTD, # which can be used by a validating XML parser to check the # syntax of the XML files. XML_DTD = # If the XML_PROGRAMLISTING tag is set to YES Doxygen will # dump the program listings (including syntax highlighting # and cross-referencing information) to the XML output. Note that # enabling this will significantly increase the size of the XML output. XML_PROGRAMLISTING = YES #--------------------------------------------------------------------------- # configuration options for the AutoGen Definitions output #--------------------------------------------------------------------------- # If the GENERATE_AUTOGEN_DEF tag is set to YES Doxygen will # generate an AutoGen Definitions (see autogen.sf.net) file # that captures the structure of the code including all # documentation. Note that this feature is still experimental # and incomplete at the moment. GENERATE_AUTOGEN_DEF = NO #--------------------------------------------------------------------------- # configuration options related to the Perl module output #--------------------------------------------------------------------------- # If the GENERATE_PERLMOD tag is set to YES Doxygen will # generate a Perl module file that captures the structure of # the code including all documentation. Note that this # feature is still experimental and incomplete at the # moment. GENERATE_PERLMOD = NO # If the PERLMOD_LATEX tag is set to YES Doxygen will generate # the necessary Makefile rules, Perl scripts and LaTeX code to be able # to generate PDF and DVI output from the Perl module output. PERLMOD_LATEX = NO # If the PERLMOD_PRETTY tag is set to YES the Perl module output will be # nicely formatted so it can be parsed by a human reader. This is useful # if you want to understand what is going on. On the other hand, if this # tag is set to NO the size of the Perl module output will be much smaller # and Perl will parse it just the same. PERLMOD_PRETTY = YES # The names of the make variables in the generated doxyrules.make file # are prefixed with the string contained in PERLMOD_MAKEVAR_PREFIX. # This is useful so different doxyrules.make files included by the same # Makefile don't overwrite each other's variables. PERLMOD_MAKEVAR_PREFIX = #--------------------------------------------------------------------------- # Configuration options related to the preprocessor #--------------------------------------------------------------------------- # If the ENABLE_PREPROCESSING tag is set to YES (the default) Doxygen will # evaluate all C-preprocessor directives found in the sources and include # files. ENABLE_PREPROCESSING = YES # If the MACRO_EXPANSION tag is set to YES Doxygen will expand all macro # names in the source code. If set to NO (the default) only conditional # compilation will be performed. Macro expansion can be done in a controlled # way by setting EXPAND_ONLY_PREDEF to YES. MACRO_EXPANSION = YES # If the EXPAND_ONLY_PREDEF and MACRO_EXPANSION tags are both set to YES # then the macro expansion is limited to the macros specified with the # PREDEFINED and EXPAND_AS_DEFINED tags. EXPAND_ONLY_PREDEF = YES # If the SEARCH_INCLUDES tag is set to YES (the default) the includes files # in the INCLUDE_PATH (see below) will be search if a #include is found. SEARCH_INCLUDES = YES # The INCLUDE_PATH tag can be used to specify one or more directories that # contain include files that are not input files but should be processed by # the preprocessor. INCLUDE_PATH = # You can use the INCLUDE_FILE_PATTERNS tag to specify one or more wildcard # patterns (like *.h and *.hpp) to filter out the header-files in the # directories. If left blank, the patterns specified with FILE_PATTERNS will # be used. INCLUDE_FILE_PATTERNS = # The PREDEFINED tag can be used to specify one or more macro names that # are defined before the preprocessor is started (similar to the -D option of # gcc). The argument of the tag is a list of macros of the form: name # or name=definition (no spaces). If the definition and the = are # omitted =1 is assumed. To prevent a macro definition from being # undefined via #undef or recursively expanded use the := operator # instead of the = operator. PREDEFINED = "YAZ_BEGIN_CDECL= " \ "YAZ_END_CDECL= " \ "YAZ_EXPORT= " \ "YAZ_HAVE_XML2=1 " \ "YAZ_HAVE_XSLT=1 " \ "HAVE_GETADDRINFO=1 " # If the MACRO_EXPANSION and EXPAND_ONLY_PREDEF tags are set to YES then # this tag can be used to specify a list of macro names that should be expanded. # The macro definition that is found in the sources will be used. # Use the PREDEFINED tag if you want to use a different macro definition. EXPAND_AS_DEFINED = YAZ_BEGIN_CDECL \ YAZ_END_CDECL \ YAZ_EXPORT # If the SKIP_FUNCTION_MACROS tag is set to YES (the default) then # doxygen's preprocessor will remove all function-like macros that are alone # on a line, have an all uppercase name, and do not end with a semicolon. Such # function macros are typically used for boiler-plate code, and will confuse # the parser if not removed. SKIP_FUNCTION_MACROS = YES #--------------------------------------------------------------------------- # Configuration::additions related to external references #--------------------------------------------------------------------------- # The TAGFILES option can be used to specify one or more tagfiles. # Optionally an initial location of the external documentation # can be added for each tagfile. The format of a tag file without # this location is as follows: # TAGFILES = file1 file2 ... # Adding location for the tag files is done as follows: # TAGFILES = file1=loc1 "file2 = loc2" ... # where "loc1" and "loc2" can be relative or absolute paths or # URLs. If a location is present for each tag, the installdox tool # does not have to be run to correct the links. # Note that each tag file must have a unique name # (where the name does NOT include the path) # If a tag file is not located in the directory in which doxygen # is run, you must also specify the path to the tagfile here. TAGFILES = # When a file name is specified after GENERATE_TAGFILE, doxygen will create # a tag file that is based on the input files it reads. GENERATE_TAGFILE = # If the ALLEXTERNALS tag is set to YES all external classes will be listed # in the class index. If set to NO only the inherited external classes # will be listed. ALLEXTERNALS = NO # If the EXTERNAL_GROUPS tag is set to YES all external groups will be listed # in the modules index. If set to NO, only the current project's groups will # be listed. EXTERNAL_GROUPS = YES # The PERL_PATH should be the absolute path and name of the perl script # interpreter (i.e. the result of `which perl'). PERL_PATH = /usr/bin/perl #--------------------------------------------------------------------------- # Configuration options related to the dot tool #--------------------------------------------------------------------------- # If the CLASS_DIAGRAMS tag is set to YES (the default) Doxygen will # generate a inheritance diagram (in HTML, RTF and LaTeX) for classes with base # or super classes. Setting the tag to NO turns the diagrams off. Note that # this option is superseded by the HAVE_DOT option below. This is only a # fallback. It is recommended to install and use dot, since it yields more # powerful graphs. CLASS_DIAGRAMS = YES # You can define message sequence charts within doxygen comments using the \msc # command. Doxygen will then run the mscgen tool (see http://www.mcternan.me.uk/mscgen/) to # produce the chart and insert it in the documentation. The MSCGEN_PATH tag allows you to # specify the directory where the mscgen tool resides. If left empty the tool is assumed to # be found in the default search path. MSCGEN_PATH = # If set to YES, the inheritance and collaboration graphs will hide # inheritance and usage relations if the target is undocumented # or is not a class. HIDE_UNDOC_RELATIONS = YES # If you set the HAVE_DOT tag to YES then doxygen will assume the dot tool is # available from the path. This tool is part of Graphviz, a graph visualization # toolkit from AT&T and Lucent Bell Labs. The other options in this section # have no effect if this option is set to NO (the default) HAVE_DOT = NO # If the CLASS_GRAPH and HAVE_DOT tags are set to YES then doxygen # will generate a graph for each documented class showing the direct and # indirect inheritance relations. Setting this tag to YES will force the # the CLASS_DIAGRAMS tag to NO. CLASS_GRAPH = YES # If the COLLABORATION_GRAPH and HAVE_DOT tags are set to YES then doxygen # will generate a graph for each documented class showing the direct and # indirect implementation dependencies (inheritance, containment, and # class references variables) of the class with other documented classes. COLLABORATION_GRAPH = YES # If the GROUP_GRAPHS and HAVE_DOT tags are set to YES then doxygen # will generate a graph for groups, showing the direct groups dependencies GROUP_GRAPHS = YES # If the UML_LOOK tag is set to YES doxygen will generate inheritance and # collaboration diagrams in a style similar to the OMG's Unified Modeling # Language. UML_LOOK = NO # If set to YES, the inheritance and collaboration graphs will show the # relations between templates and their instances. TEMPLATE_RELATIONS = NO # If the ENABLE_PREPROCESSING, SEARCH_INCLUDES, INCLUDE_GRAPH, and HAVE_DOT # tags are set to YES then doxygen will generate a graph for each documented # file showing the direct and indirect include dependencies of the file with # other documented files. INCLUDE_GRAPH = YES # If the ENABLE_PREPROCESSING, SEARCH_INCLUDES, INCLUDED_BY_GRAPH, and # HAVE_DOT tags are set to YES then doxygen will generate a graph for each # documented header file showing the documented files that directly or # indirectly include this file. INCLUDED_BY_GRAPH = YES # If the CALL_GRAPH, SOURCE_BROWSER and HAVE_DOT tags are set to YES then doxygen will # generate a call dependency graph for every global function or class method. # Note that enabling this option will significantly increase the time of a run. # So in most cases it will be better to enable call graphs for selected # functions only using the \callgraph command. CALL_GRAPH = NO # If the CALLER_GRAPH, SOURCE_BROWSER and HAVE_DOT tags are set to YES then doxygen will # generate a caller dependency graph for every global function or class method. # Note that enabling this option will significantly increase the time of a run. # So in most cases it will be better to enable caller graphs for selected # functions only using the \callergraph command. CALLER_GRAPH = NO # If the GRAPHICAL_HIERARCHY and HAVE_DOT tags are set to YES then doxygen # will graphical hierarchy of all classes instead of a textual one. GRAPHICAL_HIERARCHY = YES # If the DIRECTORY_GRAPH, SHOW_DIRECTORIES and HAVE_DOT tags are set to YES # then doxygen will show the dependencies a directory has on other directories # in a graphical way. The dependency relations are determined by the #include # relations between the files in the directories. DIRECTORY_GRAPH = YES # The DOT_IMAGE_FORMAT tag can be used to set the image format of the images # generated by dot. Possible values are png, jpg, or gif # If left blank png will be used. DOT_IMAGE_FORMAT = png # The tag DOT_PATH can be used to specify the path where the dot tool can be # found. If left blank, it is assumed the dot tool can be found in the path. DOT_PATH = # The DOTFILE_DIRS tag can be used to specify one or more directories that # contain dot files that are included in the documentation (see the # \dotfile command). DOTFILE_DIRS = # The MAX_DOT_GRAPH_MAX_NODES tag can be used to set the maximum number of # nodes that will be shown in the graph. If the number of nodes in a graph # becomes larger than this value, doxygen will truncate the graph, which is # visualized by representing a node as a red box. Note that doxygen if the number # of direct children of the root node in a graph is already larger than # MAX_DOT_GRAPH_NOTES then the graph will not be shown at all. Also note # that the size of a graph can be further restricted by MAX_DOT_GRAPH_DEPTH. DOT_GRAPH_MAX_NODES = 50 # The MAX_DOT_GRAPH_DEPTH tag can be used to set the maximum depth of the # graphs generated by dot. A depth value of 3 means that only nodes reachable # from the root by following a path via at most 3 edges will be shown. Nodes # that lay further from the root node will be omitted. Note that setting this # option to 1 or 2 may greatly reduce the computation time needed for large # code bases. Also note that the size of a graph can be further restricted by # DOT_GRAPH_MAX_NODES. Using a depth of 0 means no depth restriction. MAX_DOT_GRAPH_DEPTH = 0 # Set the DOT_TRANSPARENT tag to YES to generate images with a transparent # background. This is disabled by default, which results in a white background. # Warning: Depending on the platform used, enabling this option may lead to # badly anti-aliased labels on the edges of a graph (i.e. they become hard to # read). DOT_TRANSPARENT = NO # Set the DOT_MULTI_TARGETS tag to YES allow dot to generate multiple output # files in one run (i.e. multiple -o and -T options on the command line). This # makes dot run faster, but since only newer versions of dot (>1.8.10) # support this, this feature is disabled by default. DOT_MULTI_TARGETS = NO # If the GENERATE_LEGEND tag is set to YES (the default) Doxygen will # generate a legend page explaining the meaning of the various boxes and # arrows in the dot generated graphs. GENERATE_LEGEND = YES # If the DOT_CLEANUP tag is set to YES (the default) Doxygen will # remove the intermediate dot files that are used to generate # the various graphs. DOT_CLEANUP = YES #--------------------------------------------------------------------------- # Configuration::additions related to the search engine #--------------------------------------------------------------------------- # The SEARCHENGINE tag specifies whether or not a search engine should be # used. If set to NO the values of all tags below this one will be ignored. SEARCHENGINE = NO yaz-4.2.30/ztest/0000755000175000017500000000000011741237740010563 500000000000000yaz-4.2.30/ztest/Makefile.am0000644000175000017500000000061011733047144012532 00000000000000## This file is part of the YAZ toolkit. ## Copyright (C) 1995-2012 Index Data bin_PROGRAMS=yaz-ztest noinst_PROGRAMS=gfs-example yaz_ztest_SOURCES=ztest.c read-grs.c read-marc.c dummy-opac.c ztest.h gfs_example_SOURCES=gfs-example.c EXTRA_DIST=dummy-words dummy-grs ztest.pem config1.xml LDADD=../src/libyaz_server.la ../src/libyaz.la AM_CPPFLAGS=-I$(top_srcdir)/include $(XML2_CFLAGS) yaz-4.2.30/ztest/dummy-opac.c0000644000175000017500000000551011733047144012721 00000000000000/* This file is part of the YAZ toolkit. * Copyright (C) 1995-2012 Index Data * See the file LICENSE for details. */ /** \file * \brief Little toy-thing to genearate an OPAC record with some values */ #if HAVE_CONFIG_H #include #endif #include #include #include #include "ztest.h" Z_OPACRecord *dummy_opac(int num, ODR odr, const char *marc_input) { Z_OPACRecord *rec; int i; rec = (Z_OPACRecord *) odr_malloc(odr, sizeof(*rec)); rec->bibliographicRecord = z_ext_record_usmarc(odr, marc_input, strlen(marc_input)); rec->num_holdingsData = 1; rec->holdingsData = (Z_HoldingsRecord **) odr_malloc(odr, sizeof(*rec->holdingsData)); for (i = 0; i < rec->num_holdingsData; i++) { Z_HoldingsRecord *hr = (Z_HoldingsRecord *) odr_malloc(odr, sizeof(*hr)); Z_HoldingsAndCircData *hc = (Z_HoldingsAndCircData *) odr_malloc(odr, sizeof(*hc)); rec->holdingsData[i] = hr; hr->which = Z_HoldingsRecord_holdingsAndCirc; hr->u.holdingsAndCirc = hc; hc->typeOfRecord = "u"; hc->encodingLevel = "u"; hc->format = 0; /* OPT */ hc->receiptAcqStatus = "0"; hc->generalRetention = 0; /* OPT */ hc->completeness = 0; /* OPT */ hc->dateOfReport = "000000"; hc->nucCode = "s-FM/GC"; hc->localLocation = "Main or Science/Business Reading Rms - STORED OFFSITE"; hc->shelvingLocation = 0; /* OPT */ hc->callNumber = "MLCM 89/00602 (N)"; hc->shelvingData = "FT MEADE"; hc->copyNumber = "Copy 1"; hc->publicNote = 0; /* OPT */ hc->reproductionNote = 0; /* OPT */ hc->termsUseRepro = 0; /* OPT */ hc->enumAndChron = 0; /* OPT */ hc->num_volumes = 0; hc->volumes = 0; hc->num_circulationData = 1; hc->circulationData = (Z_CircRecord **) odr_malloc(odr, sizeof(*hc->circulationData)); hc->circulationData[0] = (Z_CircRecord *) odr_malloc(odr, sizeof(**hc->circulationData)); hc->circulationData[0]->availableNow = odr_booldup(odr, 1); hc->circulationData[0]->availablityDate = 0; hc->circulationData[0]->availableThru = 0; hc->circulationData[0]->restrictions = 0; hc->circulationData[0]->itemId = "1226176"; hc->circulationData[0]->renewable = odr_booldup(odr, 0); hc->circulationData[0]->onHold = odr_booldup(odr, 0); hc->circulationData[0]->enumAndChron = 0; hc->circulationData[0]->midspine = 0; hc->circulationData[0]->temporaryLocation = 0; } return rec; } /* * Local variables: * c-basic-offset: 4 * c-file-style: "Stroustrup" * indent-tabs-mode: nil * End: * vim: shiftwidth=4 tabstop=8 expandtab */ yaz-4.2.30/ztest/ztest.h0000644000175000017500000000400311733047144012020 00000000000000/* This file is part of the YAZ toolkit. * Copyright (C) 1995-2012 Index Data. * All rights reserved. * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions are met: * * * Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * * Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in the * documentation and/or other materials provided with the distribution. * * Neither the name of Index Data nor the names of its contributors * may be used to endorse or promote products derived from this * software without specific prior written permission. * * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND ANY * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE * DISCLAIMED. IN NO EVENT SHALL THE REGENTS AND CONTRIBUTORS BE LIABLE FOR ANY * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ /** * \file * \brief Internal header for yaz-ztest */ #include Z_GenericRecord *dummy_grs_record(int num, ODR o); char *dummy_marc_record(int num, ODR odr); char *dummy_xml_record(int num, ODR odr); Z_OPACRecord *dummy_opac(int num, ODR odr, const char *marc_input); /* * Local variables: * c-basic-offset: 4 * c-file-style: "Stroustrup" * indent-tabs-mode: nil * End: * vim: shiftwidth=4 tabstop=8 expandtab */ yaz-4.2.30/ztest/read-marc.c0000644000175000017500000031236111733047144012506 00000000000000/* This file is part of the YAZ toolkit. * Copyright (C) 1995-2012 Index Data * See the file LICENSE for details. */ /** \file * \brief Little toy-thing to read MARC records from a fixed array. */ #if HAVE_CONFIG_H #include #endif #include #include #include #include "ztest.h" #define NO_MARC_RECORDS 24 char *marc_records[NO_MARC_RECORDS] = { "\x30\x30\x33\x36\x36\x6E\x61\x6D\x20\x20\x32\x32\x30\x30\x31\x36" "\x39\x38\x61\x20\x34\x35\x30\x30\x30\x30\x31\x30\x30\x31\x33\x30" "\x30\x30\x30\x30\x30\x30\x33\x30\x30\x30\x34\x30\x30\x30\x31\x33" "\x30\x30\x35\x30\x30\x31\x37\x30\x30\x30\x31\x37\x30\x30\x38\x30" "\x30\x34\x31\x30\x30\x30\x33\x34\x30\x31\x30\x30\x30\x31\x37\x30" "\x30\x31\x37\x39\x30\x34\x30\x30\x30\x31\x33\x30\x30\x30\x37\x35" "\x30\x35\x30\x30\x30\x31\x32\x30\x30\x30\x38\x38\x31\x30\x30\x30" "\x30\x31\x37\x30\x30\x31\x30\x30\x32\x34\x35\x30\x30\x33\x30\x30" "\x30\x31\x31\x37\x32\x36\x30\x30\x30\x31\x32\x30\x30\x31\x34\x37" "\x32\x36\x33\x30\x30\x30\x39\x30\x30\x31\x35\x39\x33\x30\x30\x30" "\x30\x31\x31\x30\x30\x31\x36\x38\x1E\x20\x20\x20\x31\x31\x32\x32" "\x34\x34\x36\x36\x20\x1E\x44\x4C\x43\x1E\x30\x30\x30\x30\x30\x30" "\x30\x30\x30\x30\x30\x30\x30\x30\x2E\x30\x1E\x39\x31\x30\x37\x31" "\x30\x63\x31\x39\x39\x31\x30\x37\x30\x31\x6E\x6A\x75\x20\x20\x20" "\x20\x20\x20\x20\x20\x20\x20\x20\x30\x30\x30\x31\x30\x20\x65\x6E" "\x67\x20\x20\x1E\x20\x20\x1F\x61\x44\x4C\x43\x1F\x63\x44\x4C\x43" "\x1E\x30\x30\x1F\x61\x31\x32\x33\x2D\x78\x79\x7A\x1E\x31\x30\x1F" "\x61\x4A\x61\x63\x6B\x20\x43\x6F\x6C\x6C\x69\x6E\x73\x1E\x31\x30" "\x1F\x61\x48\x6F\x77\x20\x74\x6F\x20\x70\x72\x6F\x67\x72\x61\x6D" "\x20\x61\x20\x63\x6F\x6D\x70\x75\x74\x65\x72\x1E\x31\x20\x1F\x61" "\x50\x65\x6E\x67\x75\x69\x6E\x1E\x20\x20\x1F\x61\x38\x37\x31\x30" "\x1E\x20\x20\x1F\x61\x70\x2E\x20\x63\x6D\x2E\x1E\x20\x20\x1F\x61" "\x20\x20\x20\x31\x31\x32\x32\x34\x34\x36\x36\x20\x1E\x1D" , "\x30\x30\x33\x36\x36\x6E\x61\x6D\x20\x20\x32\x32\x30\x30\x31\x36" "\x39\x38\x61\x20\x34\x35\x30\x30\x30\x30\x31\x30\x30\x31\x33\x30" "\x30\x30\x30\x30\x30\x30\x33\x30\x30\x30\x34\x30\x30\x30\x31\x33" "\x30\x30\x35\x30\x30\x31\x37\x30\x30\x30\x31\x37\x30\x30\x38\x30" "\x30\x34\x31\x30\x30\x30\x33\x34\x30\x31\x30\x30\x30\x31\x37\x30" "\x30\x31\x37\x39\x30\x34\x30\x30\x30\x31\x33\x30\x30\x30\x37\x35" "\x30\x35\x30\x30\x30\x31\x32\x30\x30\x30\x38\x38\x31\x30\x30\x30" "\x30\x31\x37\x30\x30\x31\x30\x30\x32\x34\x35\x30\x30\x33\x30\x30" "\x30\x31\x31\x37\x32\x36\x30\x30\x30\x31\x32\x30\x30\x31\x34\x37" "\x32\x36\x33\x30\x30\x30\x39\x30\x30\x31\x35\x39\x33\x30\x30\x30" "\x30\x31\x31\x30\x30\x31\x36\x38\x1E\x20\x20\x20\x31\x31\x32\x32" "\x34\x34\x36\x37\x20\x1E\x44\x4C\x43\x1E\x30\x30\x30\x30\x30\x30" "\x30\x30\x30\x30\x30\x30\x30\x30\x2E\x30\x1E\x39\x31\x30\x37\x31" "\x30\x63\x31\x39\x39\x31\x30\x37\x30\x31\x6E\x6A\x75\x20\x20\x20" "\x20\x20\x20\x20\x20\x20\x20\x20\x30\x30\x30\x31\x30\x20\x65\x6E" "\x67\x20\x20\x1E\x20\x20\x1F\x61\x44\x4C\x43\x1F\x63\x44\x4C\x43" "\x1E\x30\x30\x1F\x61\x31\x32\x33\x2D\x78\x79\x7A\x1E\x31\x30\x1F" "\x61\x4A\x61\x63\x6B\x20\x43\x6F\x6C\x6C\x69\x6E\x73\x1E\x31\x30" "\x1F\x61\x48\x6F\x77\x20\x74\x6F\x20\x70\x72\x6F\x67\x72\x61\x6D" "\x20\x61\x20\x63\x6F\x6D\x70\x75\x74\x65\x72\x1E\x31\x20\x1F\x61" "\x50\x65\x6E\x67\x75\x69\x6E\x1E\x20\x20\x1F\x61\x38\x37\x31\x30" "\x1E\x20\x20\x1F\x61\x70\x2E\x20\x63\x6D\x2E\x1E\x20\x20\x1F\x61" "\x20\x20\x20\x31\x31\x32\x32\x34\x34\x36\x37\x20\x1E\x1D" , "\x30\x31\x33\x36\x39\x63\x61\x6D\x20\x20\x32\x32\x30\x30\x32\x36" "\x35\x20\x69\x20\x34\x35\x30\x30\x30\x30\x31\x30\x30\x31\x38\x30" "\x30\x30\x30\x30\x30\x30\x33\x30\x30\x30\x34\x30\x30\x30\x31\x38" "\x30\x30\x35\x30\x30\x31\x37\x30\x30\x30\x32\x32\x30\x30\x38\x30" "\x30\x34\x31\x30\x30\x30\x33\x39\x30\x31\x30\x30\x30\x32\x32\x30" "\x31\x30\x38\x31\x30\x34\x30\x30\x30\x31\x38\x30\x30\x30\x38\x30" "\x30\x35\x30\x30\x30\x32\x32\x30\x30\x30\x39\x38\x30\x38\x32\x30" "\x30\x32\x31\x30\x30\x31\x32\x30\x31\x31\x31\x30\x31\x32\x31\x30" "\x30\x31\x34\x31\x32\x34\x35\x30\x33\x34\x37\x30\x30\x32\x36\x32" "\x32\x36\x30\x30\x30\x35\x34\x30\x30\x36\x30\x39\x33\x30\x30\x30" "\x30\x33\x30\x30\x30\x36\x36\x33\x35\x30\x34\x30\x30\x35\x31\x30" "\x30\x36\x39\x33\x36\x35\x30\x30\x30\x35\x36\x30\x30\x37\x34\x34" "\x36\x35\x30\x30\x30\x33\x39\x30\x30\x38\x30\x30\x36\x35\x30\x30" "\x30\x36\x32\x30\x30\x38\x33\x39\x37\x30\x30\x30\x30\x32\x33\x30" "\x30\x39\x30\x31\x37\x30\x30\x30\x30\x32\x30\x30\x30\x39\x32\x34" "\x37\x31\x30\x30\x30\x37\x31\x30\x30\x39\x34\x34\x37\x31\x30\x30" "\x30\x36\x36\x30\x31\x30\x31\x35\x1E\x20\x20\x20\x37\x33\x30\x39" "\x30\x39\x32\x34\x20\x2F\x2F\x72\x38\x32\x1E\x44\x4C\x43\x1E\x31" "\x39\x38\x32\x30\x35\x32\x34\x30\x30\x30\x30\x30\x30\x2E\x30\x1E" "\x37\x36\x30\x36\x30\x39\x73\x31\x39\x37\x34\x20\x20\x20\x20\x6E" "\x79\x75\x61\x20\x20\x20\x20\x20\x62\x20\x20\x20\x20\x31\x30\x31" "\x31\x30\x20\x65\x6E\x67\x20\x20\x1E\x20\x20\x1F\x61\x44\x4C\x43" "\x1F\x63\x44\x4C\x43\x1F\x64\x44\x4C\x43\x1E\x30\x30\x1F\x61\x52" "\x43\x37\x31\x2E\x33\x1F\x62\x2E\x57\x36\x37\x20\x31\x39\x37\x31" "\x1E\x30\x30\x1F\x61\x36\x31\x36\x2E\x30\x37\x2F\x35\x37\x35\x2F" "\x30\x32\x38\x35\x34\x1E\x32\x30\x1F\x61\x57\x6F\x72\x6B\x73\x68" "\x6F\x70\x20\x6F\x6E\x20\x43\x6F\x6D\x70\x75\x74\x65\x72\x20\x50" "\x72\x6F\x63\x65\x73\x73\x69\x6E\x67\x20\x6F\x66\x20\x44\x79\x6E" "\x61\x6D\x69\x63\x20\x49\x6D\x61\x67\x65\x73\x20\x66\x72\x6F\x6D" "\x20\x61\x6E\x20\x41\x6E\x67\x65\x72\x20\x53\x63\x69\x6E\x74\x69" "\x6C\x6C\x61\x74\x69\x6F\x6E\x20\x43\x61\x6D\x65\x72\x61\x2C\x1F" "\x63\x57\x61\x73\x68\x69\x6E\x67\x74\x6F\x6E\x20\x55\x6E\x69\x76" "\x65\x72\x73\x69\x74\x79\x2C\x1F\x64\x31\x39\x37\x31\x2E\x1E\x31" "\x30\x1F\x61\x43\x6F\x6D\x70\x75\x74\x65\x72\x20\x70\x72\x6F\x63" "\x65\x73\x73\x69\x6E\x67\x20\x6F\x66\x20\x64\x79\x6E\x61\x6D\x69" "\x63\x20\x69\x6D\x61\x67\x65\x73\x20\x66\x72\x6F\x6D\x20\x61\x6E" "\x20\x41\x6E\x67\x65\x72\x20\x73\x63\x69\x6E\x74\x69\x6C\x6C\x61" "\x74\x69\x6F\x6E\x20\x63\x61\x6D\x65\x72\x61\x20\x3A\x1F\x62\x74" "\x68\x65\x20\x70\x72\x6F\x63\x65\x65\x64\x69\x6E\x67\x73\x20\x6F" "\x66\x20\x61\x20\x77\x6F\x72\x6B\x73\x68\x6F\x70\x20\x2F\x1F\x63" "\x63\x6F\x73\x70\x6F\x6E\x73\x6F\x72\x65\x64\x20\x62\x79\x20\x74" "\x68\x65\x20\x42\x69\x6F\x6D\x65\x64\x69\x63\x61\x6C\x20\x43\x6F" "\x6D\x70\x75\x74\x65\x72\x20\x4C\x61\x62\x6F\x72\x61\x74\x6F\x72" "\x79\x20\x61\x6E\x64\x20\x74\x68\x65\x20\x4E\x75\x63\x6C\x65\x61" "\x72\x20\x4D\x65\x64\x69\x63\x69\x6E\x65\x20\x44\x69\x76\x69\x73" "\x69\x6F\x6E\x2C\x20\x44\x65\x70\x61\x72\x74\x6D\x65\x6E\x74\x20" "\x6F\x66\x20\x52\x61\x64\x69\x6F\x6C\x6F\x67\x79\x2C\x20\x53\x63" "\x68\x6F\x6F\x6C\x20\x6F\x66\x20\x4D\x65\x64\x69\x63\x69\x6E\x65" "\x2C\x20\x57\x61\x73\x68\x69\x6E\x67\x74\x6F\x6E\x20\x55\x6E\x69" "\x76\x65\x72\x73\x69\x74\x79\x2C\x20\x53\x74\x2E\x20\x4C\x6F\x75" "\x69\x73\x2C\x20\x4A\x61\x6E\x75\x61\x72\x79\x20\x31\x38\x2D\x32" "\x32\x2C\x20\x31\x39\x37\x31\x20\x3B\x20\x65\x64\x69\x74\x65\x64" "\x20\x62\x79\x20\x4B\x65\x6E\x6E\x65\x74\x68\x20\x42\x2E\x20\x4C" "\x61\x72\x73\x6F\x6E\x2C\x20\x4A\x65\x72\x6F\x6D\x65\x20\x52\x2E" "\x20\x43\x6F\x78\x2C\x20\x4A\x72\x2E\x1E\x30\x20\x1F\x61\x4E\x65" "\x77\x20\x59\x6F\x72\x6B\x20\x3A\x1F\x62\x53\x6F\x63\x69\x65\x74" "\x79\x20\x6F\x66\x20\x4E\x75\x63\x6C\x65\x61\x72\x20\x4D\x65\x64" "\x69\x63\x69\x6E\x65\x2C\x1F\x63\x5B\x63\x31\x39\x37\x34\x5D\x1E" "\x20\x20\x1F\x61\x78\x69\x76\x2C\x20\x70\x2E\x20\x3A\x1F\x62\x69" "\x6C\x6C\x2E\x20\x3B\x1F\x63\x32\x34\x20\x63\x6D\x2E\x1E\x20\x20" "\x1F\x61\x49\x6E\x63\x6C\x75\x64\x65\x73\x20\x62\x69\x62\x6C\x69" "\x6F\x67\x72\x61\x70\x68\x69\x63\x61\x6C\x20\x72\x65\x66\x65\x72" "\x65\x6E\x63\x65\x73\x20\x61\x6E\x64\x20\x69\x6E\x64\x65\x78\x2E" "\x1E\x20\x30\x1F\x61\x52\x61\x64\x69\x6F\x69\x73\x6F\x74\x6F\x70" "\x65\x20\x73\x63\x61\x6E\x6E\x69\x6E\x67\x1F\x78\x44\x61\x74\x61" "\x20\x70\x72\x6F\x63\x65\x73\x73\x69\x6E\x67\x1F\x78\x43\x6F\x6E" "\x67\x72\x65\x73\x73\x65\x73\x2E\x1E\x20\x30\x1F\x61\x53\x63\x69" "\x6E\x74\x69\x6C\x6C\x61\x74\x69\x6F\x6E\x20\x63\x61\x6D\x65\x72" "\x61\x73\x1F\x78\x43\x6F\x6E\x67\x72\x65\x73\x73\x65\x73\x2E\x1E" "\x20\x30\x1F\x61\x49\x6D\x61\x67\x69\x6E\x67\x20\x73\x79\x73\x74" "\x65\x6D\x73\x20\x69\x6E\x20\x6D\x65\x64\x69\x63\x69\x6E\x65\x1F" "\x78\x44\x61\x74\x61\x20\x70\x72\x6F\x63\x65\x73\x73\x69\x6E\x67" "\x1F\x78\x43\x6F\x6E\x67\x72\x65\x73\x73\x65\x73\x2E\x1E\x31\x30" "\x1F\x61\x4C\x61\x72\x73\x6F\x6E\x2C\x20\x4B\x65\x6E\x6E\x65\x74" "\x68\x20\x42\x2E\x1E\x31\x30\x1F\x61\x43\x6F\x78\x2C\x20\x4A\x65" "\x72\x6F\x6D\x65\x20\x52\x2E\x20\x1E\x32\x30\x1F\x61\x57\x61\x73" "\x68\x69\x6E\x67\x74\x6F\x6E\x20\x55\x6E\x69\x76\x65\x72\x73\x69" "\x74\x79\x2C\x20\x53\x74\x2E\x20\x4C\x6F\x75\x69\x73\x2E\x1F\x62" "\x42\x69\x6F\x6D\x65\x64\x69\x63\x61\x6C\x20\x43\x6F\x6D\x70\x75" "\x74\x65\x72\x20\x4C\x61\x62\x6F\x72\x61\x74\x6F\x72\x79\x2E\x1E" "\x32\x30\x1F\x61\x57\x61\x73\x68\x69\x6E\x67\x74\x6F\x6E\x20\x55" "\x6E\x69\x76\x65\x72\x73\x69\x74\x79\x2C\x20\x53\x74\x2E\x20\x4C" "\x6F\x75\x69\x73\x2E\x1F\x62\x4E\x75\x63\x6C\x65\x61\x72\x20\x4D" "\x65\x64\x69\x63\x69\x6E\x65\x20\x44\x69\x76\x69\x73\x69\x6F\x6E" "\x2E\x1E\x20\x20\x1F\x61\x20\x20\x20\x37\x33\x30\x39\x30\x39\x32" "\x34\x20\x2F\x2F\x72\x38\x32\x1E\x1D" , "\x30\x30\x39\x34\x32\x63\x61\x6D\x20\x20\x32\x32\x30\x30\x32\x35" "\x33\x31\x61\x20\x34\x35\x30\x30\x30\x30\x31\x30\x30\x31\x39\x30" "\x30\x30\x30\x30\x30\x30\x33\x30\x30\x30\x34\x30\x30\x30\x31\x39" "\x30\x30\x35\x30\x30\x31\x37\x30\x30\x30\x32\x33\x30\x30\x38\x30" "\x30\x34\x31\x30\x30\x30\x34\x30\x30\x31\x30\x30\x30\x32\x33\x30" "\x30\x36\x36\x35\x30\x34\x30\x30\x30\x31\x38\x30\x30\x30\x38\x31" "\x30\x34\x31\x30\x30\x31\x34\x30\x30\x30\x39\x39\x30\x35\x30\x30" "\x30\x31\x36\x30\x30\x31\x31\x33\x30\x38\x32\x30\x30\x31\x36\x30" "\x30\x31\x32\x39\x32\x34\x35\x30\x30\x37\x33\x30\x30\x31\x34\x35" "\x32\x36\x30\x30\x30\x37\x30\x30\x30\x32\x31\x38\x33\x30\x30\x30" "\x30\x35\x30\x30\x30\x32\x38\x38\x35\x30\x30\x30\x30\x34\x38\x30" "\x30\x33\x33\x38\x35\x30\x30\x30\x30\x39\x36\x30\x30\x33\x38\x36" "\x36\x33\x30\x30\x30\x33\x39\x30\x30\x34\x38\x32\x36\x33\x30\x30" "\x30\x33\x39\x30\x30\x35\x32\x31\x37\x30\x30\x30\x30\x33\x38\x30" "\x30\x35\x36\x30\x37\x30\x30\x30\x30\x33\x33\x30\x30\x35\x39\x38" "\x37\x31\x30\x30\x30\x33\x34\x30\x30\x36\x33\x31\x1E\x20\x20\x20" "\x37\x33\x32\x30\x39\x36\x32\x32\x20\x2F\x2F\x72\x38\x32\x33\x1E" "\x44\x4C\x43\x1E\x31\x39\x38\x32\x30\x33\x32\x35\x30\x30\x30\x30" "\x30\x30\x2E\x30\x1E\x37\x38\x30\x33\x30\x36\x6D\x31\x39\x30\x30" "\x39\x39\x39\x39\x6F\x68\x75\x20\x20\x20\x20\x20\x20\x20\x20\x20" "\x20\x20\x30\x30\x30\x30\x30\x20\x67\x72\x63\x20\x20\x1E\x20\x20" "\x1F\x61\x44\x4C\x43\x1F\x63\x44\x4C\x43\x1F\x64\x44\x4C\x43\x1E" "\x30\x20\x1F\x61\x67\x72\x63\x68\x65\x62\x65\x6E\x67\x1E\x30\x30" "\x1F\x61\x42\x53\x34\x32\x31\x1F\x62\x2E\x43\x36\x34\x1E\x30\x30" "\x1F\x61\x32\x32\x30\x2E\x34\x2F\x34\x1F\x32\x31\x39\x1E\x30\x34" "\x1F\x61\x54\x68\x65\x20\x43\x6F\x6D\x70\x75\x74\x65\x72\x20\x42" "\x69\x62\x6C\x65\x20\x2F\x1F\x63\x4A\x2E\x20\x41\x72\x74\x68\x75" "\x72\x20\x42\x61\x69\x72\x64\x2C\x20\x44\x61\x76\x69\x64\x20\x4E" "\x6F\x65\x6C\x20\x46\x72\x65\x65\x64\x6D\x61\x6E\x2C\x20\x65\x64" "\x69\x74\x6F\x72\x73\x2E\x1E\x30\x20\x1F\x61\x5B\x57\x6F\x6F\x73" "\x74\x65\x72\x2C\x20\x4F\x68\x69\x6F\x5D\x20\x3A\x1F\x62\x42\x69" "\x62\x6C\x69\x63\x61\x6C\x20\x52\x65\x73\x65\x61\x72\x63\x68\x20" "\x41\x73\x73\x6F\x63\x69\x61\x74\x65\x73\x2C\x1F\x63\x3C\x31\x39" "\x37\x33\x2D\x63\x31\x39\x38\x30\x20\x20\x20\x3E\x1E\x20\x20\x1F" "\x61\x76\x2E\x20\x3C\x32\x2D\x34\x2C\x20\x37\x2D\x31\x30\x2C\x20" "\x31\x33\x2C\x20\x31\x35\x2D\x31\x38\x2C\x20\x32\x30\x2D\x32\x34" "\x20\x20\x20\x3E\x20\x3B\x1F\x63\x32\x38\x20\x63\x6D\x2E\x1E\x20" "\x20\x1F\x61\x48\x65\x62\x72\x65\x77\x20\x61\x6E\x64\x20\x47\x72" "\x65\x65\x6B\x3B\x20\x69\x6E\x74\x72\x6F\x64\x75\x63\x74\x69\x6F" "\x6E\x73\x20\x69\x6E\x20\x45\x6E\x67\x6C\x69\x73\x68\x2E\x1E\x20" "\x20\x1F\x61\x56\x6F\x6C\x73\x2E\x20\x32\x2C\x20\x38\x3A\x20\x4D" "\x69\x73\x73\x6F\x75\x6C\x61\x2C\x20\x4D\x6F\x6E\x74\x2E\x20\x3A" "\x20\x50\x75\x62\x6C\x69\x73\x68\x65\x64\x20\x62\x79\x20\x53\x63" "\x68\x6F\x6C\x61\x72\x73\x20\x50\x72\x65\x73\x73\x20\x66\x6F\x72" "\x20\x42\x69\x62\x6C\x69\x63\x61\x6C\x20\x52\x65\x73\x65\x61\x72" "\x63\x68\x20\x41\x73\x73\x6F\x63\x69\x61\x74\x65\x73\x2E\x1E\x20" "\x30\x1F\x61\x42\x69\x62\x6C\x65\x2E\x20\x4F\x2E\x54\x2E\x1F\x78" "\x43\x6F\x6E\x63\x6F\x72\x64\x61\x6E\x63\x65\x73\x2C\x20\x48\x65" "\x62\x72\x65\x77\x2E\x1E\x30\x30\x1F\x61\x42\x69\x62\x6C\x65\x2E" "\x1F\x70\x4E\x2E\x54\x2E\x1F\x78\x43\x6F\x6E\x63\x6F\x72\x64\x61" "\x6E\x63\x65\x73\x2C\x20\x47\x72\x65\x65\x6B\x2E\x1E\x31\x30\x1F" "\x61\x42\x61\x69\x72\x64\x2C\x20\x4A\x2E\x20\x41\x72\x74\x68\x75" "\x72\x1F\x71\x28\x4A\x6F\x73\x65\x70\x68\x20\x41\x72\x74\x68\x75" "\x72\x29\x1E\x31\x30\x1F\x61\x46\x72\x65\x65\x64\x6D\x61\x6E\x2C" "\x20\x44\x61\x76\x69\x64\x20\x4E\x6F\x65\x6C\x2C\x1F\x64\x31\x39" "\x32\x32\x2D\x1E\x32\x30\x1F\x61\x42\x69\x62\x6C\x69\x63\x61\x6C" "\x20\x52\x65\x73\x65\x61\x72\x63\x68\x20\x41\x73\x73\x6F\x63\x69" "\x61\x74\x65\x73\x2E\x1E\x20\x20\x1F\x61\x20\x20\x20\x37\x33\x32" "\x30\x39\x36\x32\x32\x20\x2F\x2F\x72\x38\x32\x33\x1E\x1D" , "\x30\x31\x30\x33\x33\x63\x61\x6D\x20\x20\x32\x32\x30\x30\x32\x35" "\x33\x20\x69\x20\x34\x35\x30\x30\x30\x30\x31\x30\x30\x32\x31\x30" "\x30\x30\x30\x30\x30\x30\x33\x30\x30\x30\x34\x30\x30\x30\x32\x31" "\x30\x30\x35\x30\x30\x31\x37\x30\x30\x30\x32\x35\x30\x30\x38\x30" "\x30\x34\x31\x30\x30\x30\x34\x32\x30\x31\x30\x30\x30\x32\x35\x30" "\x30\x37\x35\x34\x30\x34\x30\x30\x30\x31\x38\x30\x30\x30\x38\x33" "\x30\x34\x33\x30\x30\x31\x32\x30\x30\x31\x30\x31\x30\x35\x30\x30" "\x30\x32\x32\x30\x30\x31\x31\x33\x31\x30\x30\x30\x30\x31\x39\x30" "\x30\x31\x33\x35\x32\x34\x35\x30\x31\x30\x35\x30\x30\x31\x35\x34" "\x32\x36\x30\x30\x30\x37\x33\x30\x30\x32\x35\x39\x33\x30\x30\x30" "\x30\x33\x38\x30\x30\x33\x33\x32\x34\x39\x30\x30\x30\x36\x38\x30" "\x30\x33\x37\x30\x35\x30\x30\x30\x30\x33\x35\x30\x30\x34\x33\x38" "\x35\x30\x34\x30\x30\x32\x34\x30\x30\x34\x37\x33\x36\x35\x30\x30" "\x30\x33\x34\x30\x30\x34\x39\x37\x36\x35\x31\x30\x30\x34\x36\x30" "\x30\x35\x33\x31\x37\x30\x30\x30\x30\x33\x39\x30\x30\x35\x37\x37" "\x38\x31\x30\x30\x31\x33\x38\x30\x30\x36\x31\x36\x1E\x20\x20\x20" "\x37\x36\x33\x35\x37\x38\x39\x35\x20\x2F\x4D\x41\x50\x2F\x72\x38" "\x32\x1E\x44\x4C\x43\x1E\x31\x39\x38\x32\x30\x38\x30\x36\x30\x30" "\x30\x30\x30\x30\x2E\x30\x1E\x37\x36\x30\x34\x30\x37\x73\x31\x39" "\x37\x34\x20\x20\x20\x20\x77\x61\x75\x61\x20\x20\x20\x20\x20\x62" "\x20\x20\x20\x20\x30\x30\x30\x31\x30\x20\x65\x6E\x67\x20\x20\x1E" "\x20\x20\x1F\x61\x44\x4C\x43\x1F\x63\x44\x4C\x43\x1F\x64\x44\x4C" "\x43\x1E\x20\x20\x1F\x61\x6E\x2D\x75\x73\x2D\x77\x61\x1E\x30\x30" "\x1F\x61\x47\x31\x34\x36\x37\x2E\x50\x38\x1F\x62\x4D\x33\x20\x31" "\x39\x37\x34\x1E\x31\x30\x1F\x61\x4D\x61\x69\x72\x73\x2C\x20\x4A" "\x6F\x68\x6E\x20\x57\x2E\x1E\x31\x34\x1F\x61\x54\x68\x65\x20\x50" "\x75\x67\x65\x74\x20\x53\x6F\x75\x6E\x64\x20\x52\x65\x67\x69\x6F" "\x6E\x20\x3A\x1F\x62\x61\x20\x70\x6F\x72\x74\x66\x6F\x6C\x69\x6F" "\x20\x6F\x66\x20\x74\x68\x65\x6D\x61\x74\x69\x63\x20\x63\x6F\x6D" "\x70\x75\x74\x65\x72\x20\x6D\x61\x70\x73\x20\x2F\x1F\x63\x4A\x6F" "\x68\x6E\x20\x57\x2E\x20\x4D\x61\x69\x72\x73\x2C\x20\x45\x75\x67" "\x65\x6E\x65\x20\x41\x2E\x20\x48\x6F\x65\x72\x61\x75\x66\x2E\x1E" "\x30\x20\x1F\x61\x5B\x42\x65\x6C\x6C\x69\x6E\x67\x68\x61\x6D\x2C" "\x20\x57\x61\x73\x68\x2E\x5D\x20\x3A\x1F\x62\x43\x65\x6E\x74\x65" "\x72\x20\x66\x6F\x72\x20\x50\x61\x63\x69\x66\x69\x63\x20\x4E\x6F" "\x72\x74\x68\x77\x65\x73\x74\x20\x53\x74\x75\x64\x69\x65\x73\x2C" "\x1F\x63\x63\x31\x39\x37\x34\x2E\x1E\x20\x20\x1F\x61\x69\x69\x69" "\x2C\x20\x34\x31\x20\x70\x2E\x20\x3A\x1F\x62\x69\x6C\x6C\x2E\x20" "\x3B\x1F\x63\x32\x35\x20\x78\x20\x33\x36\x20\x63\x6D\x2E\x1E\x31" "\x20\x1F\x61\x4F\x63\x63\x61\x73\x69\x6F\x6E\x61\x6C\x20\x70\x61" "\x70\x65\x72\x20\x2D\x20\x43\x65\x6E\x74\x65\x72\x20\x66\x6F\x72" "\x20\x50\x61\x63\x69\x66\x69\x63\x20\x4E\x6F\x72\x74\x68\x77\x65" "\x73\x74\x20\x53\x74\x75\x64\x69\x65\x73\x20\x3B\x20\x6E\x6F\x2E" "\x20\x33\x1E\x20\x20\x1F\x61\x53\x63\x61\x6C\x65\x20\x6F\x66\x20" "\x6D\x61\x70\x73\x20\x63\x61\x2E\x20\x31\x3A\x31\x2C\x30\x30\x30" "\x2C\x30\x30\x30\x2E\x1E\x20\x20\x1F\x61\x42\x69\x62\x6C\x69\x6F" "\x67\x72\x61\x70\x68\x79\x3A\x20\x70\x2E\x20\x34\x2E\x1E\x20\x30" "\x1F\x61\x43\x61\x72\x74\x6F\x67\x72\x61\x70\x68\x79\x1F\x78\x44" "\x61\x74\x61\x20\x70\x72\x6F\x63\x65\x73\x73\x69\x6E\x67\x2E\x1E" "\x20\x30\x1F\x61\x50\x75\x67\x65\x74\x20\x53\x6F\x75\x6E\x64\x20" "\x72\x65\x67\x69\x6F\x6E\x20\x28\x57\x61\x73\x68\x2E\x29\x1F\x78" "\x43\x65\x6E\x73\x75\x73\x1F\x78\x4D\x61\x70\x73\x2E\x1E\x31\x30" "\x1F\x61\x48\x6F\x65\x72\x61\x75\x66\x2C\x20\x45\x75\x67\x65\x6E" "\x65\x20\x41\x2E\x2C\x1F\x65\x6A\x6F\x69\x6E\x74\x20\x61\x75\x74" "\x68\x6F\x72\x2E\x1E\x31\x20\x1F\x61\x57\x61\x73\x68\x69\x6E\x67" "\x74\x6F\x6E\x20\x28\x53\x74\x61\x74\x65\x29\x2E\x1F\x62\x57\x65" "\x73\x74\x65\x72\x6E\x20\x57\x61\x73\x68\x69\x6E\x67\x74\x6F\x6E" "\x20\x53\x74\x61\x74\x65\x20\x43\x6F\x6C\x6C\x65\x67\x65\x2C\x20" "\x42\x65\x6C\x6C\x69\x6E\x67\x68\x61\x6D\x2E\x1F\x62\x43\x65\x6E" "\x74\x65\x72\x20\x66\x6F\x72\x20\x50\x61\x63\x69\x66\x69\x63\x20" "\x4E\x6F\x72\x74\x68\x77\x65\x73\x74\x20\x53\x74\x75\x64\x69\x65" "\x73\x2E\x1F\x74\x4F\x63\x63\x61\x73\x69\x6F\x6E\x61\x6C\x20\x70" "\x61\x70\x65\x72\x20\x3B\x1F\x76\x6E\x6F\x2E\x20\x33\x2E\x1E\x20" "\x20\x1F\x61\x20\x20\x20\x37\x36\x33\x35\x37\x38\x39\x35\x20\x2F" "\x4D\x41\x50\x2F\x72\x38\x32\x1E\x1D" , "\x30\x31\x30\x30\x30\x70\x61\x6D\x20\x20\x32\x32\x30\x30\x32\x32" "\x39\x20\x69\x20\x34\x35\x30\x30\x30\x30\x31\x30\x30\x31\x33\x30" "\x30\x30\x30\x30\x30\x30\x33\x30\x30\x30\x34\x30\x30\x30\x31\x33" "\x30\x30\x35\x30\x30\x31\x37\x30\x30\x30\x31\x37\x30\x30\x38\x30" "\x30\x34\x31\x30\x30\x30\x33\x34\x30\x31\x30\x30\x30\x31\x37\x30" "\x30\x37\x35\x33\x30\x32\x30\x30\x30\x31\x35\x30\x30\x30\x37\x35" "\x30\x34\x30\x30\x30\x31\x38\x30\x30\x30\x39\x30\x30\x35\x30\x30" "\x30\x31\x38\x30\x30\x31\x30\x38\x30\x38\x32\x30\x30\x31\x35\x30" "\x30\x31\x32\x36\x32\x34\x35\x30\x33\x30\x34\x30\x30\x31\x34\x31" "\x32\x36\x30\x30\x30\x34\x38\x30\x30\x34\x34\x35\x33\x30\x30\x30" "\x30\x33\x33\x30\x30\x34\x39\x33\x35\x30\x34\x30\x30\x35\x31\x30" "\x30\x35\x32\x36\x36\x35\x30\x30\x30\x32\x38\x30\x30\x35\x37\x37" "\x37\x30\x30\x30\x30\x32\x39\x30\x30\x36\x30\x35\x37\x31\x30\x30" "\x30\x34\x38\x30\x30\x36\x33\x34\x37\x31\x30\x30\x30\x37\x31\x30" "\x30\x36\x38\x32\x1E\x20\x20\x20\x37\x37\x30\x30\x30\x33\x34\x38" "\x20\x1E\x44\x4C\x43\x1E\x31\x39\x37\x37\x30\x37\x30\x37\x30\x30" "\x30\x30\x30\x30\x2E\x30\x1E\x37\x37\x30\x31\x31\x32\x73\x31\x39" "\x37\x37\x20\x20\x20\x20\x6D\x64\x75\x61\x20\x20\x20\x20\x20\x62" "\x20\x20\x20\x20\x31\x30\x31\x31\x30\x20\x65\x6E\x67\x20\x20\x1E" "\x20\x20\x1F\x61\x30\x38\x33\x39\x31\x30\x38\x38\x32\x36\x1E\x20" "\x20\x1F\x61\x44\x4C\x43\x1F\x63\x44\x4C\x43\x1F\x64\x44\x4C\x43" "\x1E\x30\x30\x1F\x61\x52\x43\x37\x38\x2E\x37\x2E\x54\x36\x1F\x62" "\x52\x34\x1E\x30\x30\x1F\x61\x36\x31\x36\x2E\x30\x37\x2F\x35\x37" "\x32\x1E\x30\x30\x1F\x61\x52\x65\x63\x6F\x6E\x73\x74\x72\x75\x63" "\x74\x69\x6F\x6E\x20\x74\x6F\x6D\x6F\x67\x72\x61\x70\x68\x79\x20" "\x69\x6E\x20\x64\x69\x61\x67\x6E\x6F\x73\x74\x69\x63\x20\x72\x61" "\x64\x69\x6F\x6C\x6F\x67\x79\x20\x61\x6E\x64\x20\x6E\x75\x63\x6C" "\x65\x61\x72\x20\x6D\x65\x64\x69\x63\x69\x6E\x65\x20\x3A\x1F\x62" "\x70\x72\x6F\x63\x65\x65\x64\x69\x6E\x67\x73\x20\x6F\x66\x20\x74" "\x68\x65\x20\x77\x6F\x72\x6B\x73\x68\x6F\x70\x20\x2E\x2E\x2E\x20" "\x2F\x1F\x63\x65\x64\x69\x74\x65\x64\x20\x62\x79\x20\x4D\x69\x63" "\x68\x65\x6C\x20\x4D\x2E\x20\x54\x65\x72\x2D\x50\x6F\x67\x6F\x73" "\x73\x69\x61\x6E\x20\x2E\x2E\x2E\x20\x5B\x65\x74\x20\x61\x6C\x2E" "\x5D\x20\x3B\x20\x63\x6F\x2D\x73\x70\x6F\x6E\x73\x6F\x72\x73\x2C" "\x20\x74\x68\x65\x20\x45\x64\x77\x61\x72\x64\x20\x4D\x61\x6C\x6C" "\x69\x6E\x63\x6B\x72\x6F\x64\x74\x20\x49\x6E\x73\x74\x69\x74\x75" "\x74\x65\x20\x6F\x66\x20\x52\x61\x64\x69\x6F\x6C\x6F\x67\x79\x20" "\x61\x6E\x64\x20\x42\x69\x6F\x6D\x65\x64\x69\x63\x61\x6C\x20\x43" "\x6F\x6D\x70\x75\x74\x65\x72\x20\x4C\x61\x62\x6F\x72\x61\x74\x6F" "\x72\x79\x2C\x20\x57\x61\x73\x68\x69\x6E\x67\x74\x6F\x6E\x20\x55" "\x6E\x69\x76\x65\x72\x73\x69\x74\x79\x20\x53\x63\x68\x6F\x6F\x6C" "\x20\x6F\x66\x20\x4D\x65\x64\x69\x63\x69\x6E\x65\x20\x2E\x2E\x2E" "\x2E\x1E\x30\x20\x1F\x61\x42\x61\x6C\x74\x69\x6D\x6F\x72\x65\x20" "\x3A\x1F\x62\x55\x6E\x69\x76\x65\x72\x73\x69\x74\x79\x20\x50\x61" "\x72\x6B\x20\x50\x72\x65\x73\x73\x2C\x1F\x63\x63\x31\x39\x37\x37" "\x2E\x1E\x20\x20\x1F\x61\x78\x76\x2C\x20\x35\x37\x33\x20\x70\x2E" "\x20\x3A\x1F\x62\x69\x6C\x6C\x2E\x20\x3B\x1F\x63\x32\x34\x20\x63" "\x6D\x2E\x1E\x20\x20\x1F\x61\x49\x6E\x63\x6C\x75\x64\x65\x73\x20" "\x62\x69\x62\x6C\x69\x6F\x67\x72\x61\x70\x68\x69\x63\x61\x6C\x20" "\x72\x65\x66\x65\x72\x65\x6E\x63\x65\x73\x20\x61\x6E\x64\x20\x69" "\x6E\x64\x65\x78\x2E\x1E\x20\x30\x1F\x61\x54\x6F\x6D\x6F\x67\x72" "\x61\x70\x68\x79\x1F\x78\x43\x6F\x6E\x67\x72\x65\x73\x73\x65\x73" "\x2E\x1E\x32\x30\x1F\x61\x54\x65\x72\x2D\x50\x6F\x67\x6F\x73\x73" "\x69\x61\x6E\x2C\x20\x4D\x69\x63\x68\x65\x6C\x20\x4D\x2E\x1E\x32" "\x30\x1F\x61\x45\x64\x77\x61\x72\x64\x20\x4D\x61\x6C\x6C\x69\x6E" "\x63\x6B\x72\x6F\x64\x74\x20\x49\x6E\x73\x74\x69\x74\x75\x74\x65" "\x20\x6F\x66\x20\x52\x61\x64\x69\x6F\x6C\x6F\x67\x79\x2E\x1E\x32" "\x30\x1F\x61\x57\x61\x73\x68\x69\x6E\x67\x74\x6F\x6E\x20\x55\x6E" "\x69\x76\x65\x72\x73\x69\x74\x79\x2C\x20\x53\x74\x2E\x20\x4C\x6F" "\x75\x69\x73\x2E\x1F\x62\x42\x69\x6F\x6D\x65\x64\x69\x63\x61\x6C" "\x20\x43\x6F\x6D\x70\x75\x74\x65\x72\x20\x4C\x61\x62\x6F\x72\x61" "\x74\x6F\x72\x79\x2E\x1E\x20\x20\x1F\x61\x20\x20\x20\x37\x37\x30" "\x30\x30\x33\x34\x38\x20\x1E\x1D" , "\x30\x31\x34\x39\x33\x70\x61\x6D\x20\x20\x32\x32\x30\x30\x32\x37" "\x37\x20\x69\x20\x34\x35\x30\x30\x30\x30\x31\x30\x30\x31\x33\x30" "\x30\x30\x30\x30\x30\x30\x33\x30\x30\x30\x34\x30\x30\x30\x31\x33" "\x30\x30\x35\x30\x30\x31\x37\x30\x30\x30\x31\x37\x30\x30\x38\x30" "\x30\x34\x31\x30\x30\x30\x33\x34\x30\x31\x30\x30\x30\x31\x37\x30" "\x31\x31\x39\x38\x30\x34\x30\x30\x30\x31\x38\x30\x30\x30\x37\x35" "\x30\x34\x33\x30\x30\x31\x32\x30\x30\x30\x39\x33\x30\x35\x30\x30" "\x30\x33\x34\x30\x30\x31\x30\x35\x30\x38\x32\x30\x30\x32\x38\x30" "\x30\x31\x33\x39\x30\x38\x36\x30\x30\x31\x38\x30\x30\x31\x36\x37" "\x31\x31\x31\x30\x30\x39\x35\x30\x30\x31\x38\x35\x32\x34\x35\x30" "\x34\x34\x38\x30\x30\x32\x38\x30\x32\x36\x30\x30\x31\x33\x38\x30" "\x30\x37\x32\x38\x33\x30\x30\x30\x30\x33\x34\x30\x30\x38\x36\x36" "\x34\x39\x30\x30\x30\x33\x36\x30\x30\x39\x30\x30\x36\x35\x30\x30" "\x30\x35\x39\x30\x30\x39\x33\x36\x37\x30\x30\x30\x30\x33\x31\x30" "\x30\x39\x39\x35\x37\x30\x30\x30\x30\x32\x31\x30\x31\x30\x32\x36" "\x37\x30\x30\x30\x30\x32\x30\x30\x31\x30\x34\x37\x37\x31\x30\x30" "\x30\x35\x30\x30\x31\x30\x36\x37\x38\x31\x30\x30\x30\x38\x31\x30" "\x31\x31\x31\x37\x1E\x20\x20\x20\x37\x37\x30\x30\x34\x37\x37\x33" "\x20\x1E\x44\x4C\x43\x1E\x31\x39\x37\x37\x30\x38\x32\x32\x30\x30" "\x30\x30\x30\x30\x2E\x30\x1E\x37\x37\x30\x33\x32\x31\x73\x31\x39" "\x37\x37\x20\x20\x20\x20\x64\x63\x75\x61\x20\x20\x20\x20\x20\x20" "\x20\x20\x20\x20\x31\x30\x30\x30\x30\x20\x65\x6E\x67\x20\x20\x1E" "\x20\x20\x1F\x61\x44\x4C\x43\x1F\x63\x44\x4C\x43\x1F\x64\x44\x4C" "\x43\x1E\x20\x20\x1F\x61\x6E\x2D\x75\x73\x2D\x2D\x2D\x1E\x30\x30" "\x1F\x61\x51\x43\x31\x30\x30\x1F\x62\x2E\x55\x35\x37\x20\x6E\x6F" "\x2E\x20\x35\x30\x30\x2D\x38\x1F\x61\x54\x41\x31\x36\x35\x30\x1E" "\x30\x30\x1F\x61\x36\x30\x32\x2F\x2E\x31\x20\x73\x1F\x61\x36\x32" "\x31\x2E\x33\x38\x31\x2E\x39\x2F\x35\x39\x38\x1E\x20\x20\x1F\x61" "\x43\x31\x33\x2E\x31\x30\x3A\x35\x30\x30\x2D\x38\x2E\x1E\x32\x30" "\x1F\x61\x57\x6F\x72\x6B\x73\x68\x6F\x70\x20\x6F\x6E\x20\x53\x74" "\x61\x6E\x64\x61\x72\x64\x73\x20\x66\x6F\x72\x20\x49\x6D\x61\x67" "\x65\x20\x50\x61\x74\x74\x65\x72\x6E\x20\x52\x65\x63\x6F\x67\x6E" "\x69\x74\x69\x6F\x6E\x2C\x1F\x63\x4E\x61\x74\x69\x6F\x6E\x61\x6C" "\x20\x42\x75\x72\x65\x61\x75\x20\x6F\x66\x20\x53\x74\x61\x6E\x64" "\x61\x72\x64\x73\x2C\x1F\x64\x31\x39\x37\x36\x2E\x1E\x31\x30\x1F" "\x61\x43\x6F\x6D\x70\x75\x74\x65\x72\x20\x73\x63\x69\x65\x6E\x63" "\x65\x20\x26\x20\x74\x65\x63\x68\x6E\x6F\x6C\x6F\x67\x79\x20\x3A" "\x1F\x62\x70\x72\x6F\x63\x65\x65\x64\x69\x6E\x67\x73\x20\x6F\x66" "\x20\x61\x20\x77\x6F\x72\x6B\x73\x68\x6F\x70\x20\x68\x65\x6C\x64" "\x20\x61\x74\x20\x74\x68\x65\x20\x4E\x61\x74\x69\x6F\x6E\x61\x6C" "\x20\x42\x75\x72\x65\x61\x75\x20\x6F\x66\x20\x53\x74\x61\x6E\x64" "\x61\x72\x64\x73\x2C\x20\x47\x61\x69\x74\x68\x65\x72\x73\x62\x75" "\x72\x67\x2C\x20\x4D\x44\x2C\x20\x4A\x75\x6E\x65\x20\x33\x2D\x34" "\x2C\x20\x31\x39\x37\x36\x20\x2F\x1F\x63\x57\x6F\x72\x6B\x73\x68" "\x6F\x70\x20\x6F\x6E\x20\x53\x74\x61\x6E\x64\x61\x72\x64\x73\x20" "\x66\x6F\x72\x20\x49\x6D\x61\x67\x65\x20\x50\x61\x74\x74\x65\x72" "\x6E\x20\x52\x65\x63\x6F\x67\x6E\x69\x74\x69\x6F\x6E\x20\x3B\x20" "\x4A\x6F\x68\x6E\x20\x4D\x2E\x20\x45\x76\x61\x6E\x73\x2C\x20\x4A" "\x72\x2E\x2C\x20\x52\x75\x73\x73\x65\x6C\x6C\x20\x4B\x69\x72\x73" "\x63\x68\x2C\x20\x61\x6E\x64\x20\x52\x6F\x67\x65\x72\x20\x4E\x2E" "\x20\x4E\x61\x67\x65\x6C\x2C\x20\x65\x64\x69\x74\x6F\x72\x5B\x73" "\x5D\x20\x3B\x20\x73\x70\x6F\x6E\x73\x6F\x72\x65\x64\x20\x62\x79" "\x20\x4E\x61\x74\x69\x6F\x6E\x61\x6C\x20\x42\x75\x72\x65\x61\x75" "\x20\x6F\x66\x20\x53\x74\x61\x6E\x64\x61\x72\x64\x73\x2C\x20\x45" "\x6C\x65\x63\x74\x72\x6F\x6E\x69\x63\x20\x49\x6E\x64\x75\x73\x74" "\x72\x69\x65\x73\x20\x41\x73\x73\x6F\x63\x69\x61\x74\x69\x6F\x6E" "\x2C\x20\x49\x6E\x73\x74\x69\x74\x75\x74\x65\x20\x6F\x66\x20\x45" "\x6C\x65\x63\x74\x72\x69\x63\x61\x6C\x20\x61\x6E\x64\x20\x45\x6C" "\x65\x63\x74\x72\x6F\x6E\x69\x63\x20\x45\x6E\x67\x69\x6E\x65\x65" "\x72\x73\x2C\x20\x69\x6E\x20\x63\x6F\x6F\x70\x65\x72\x61\x74\x69" "\x6F\x6E\x20\x77\x69\x74\x68\x20\x41\x73\x73\x6F\x63\x69\x61\x74" "\x69\x6F\x6E\x20\x66\x6F\x72\x20\x43\x6F\x6D\x70\x75\x74\x69\x6E" "\x67\x20\x4D\x61\x63\x68\x69\x6E\x65\x72\x79\x2E\x1E\x30\x20\x1F" "\x61\x5B\x57\x61\x73\x68\x69\x6E\x67\x74\x6F\x6E\x5D\x20\x3A\x1F" "\x62\x55\x2E\x53\x2E\x20\x44\x65\x70\x74\x2E\x20\x6F\x66\x20\x43" "\x6F\x6D\x6D\x65\x72\x63\x65\x2C\x20\x4E\x61\x74\x69\x6F\x6E\x61" "\x6C\x20\x42\x75\x72\x65\x61\x75\x20\x6F\x66\x20\x53\x74\x61\x6E" "\x64\x61\x72\x64\x73\x20\x3A\x20\x66\x6F\x72\x20\x73\x61\x6C\x65" "\x20\x62\x79\x20\x74\x68\x65\x20\x53\x75\x70\x74\x2E\x20\x6F\x66" "\x20\x44\x6F\x63\x73\x2E\x2C\x20\x55\x2E\x53\x2E\x20\x47\x6F\x76" "\x74\x2E\x20\x50\x72\x69\x6E\x74\x2E\x20\x4F\x66\x66\x2E\x2C\x1F" "\x63\x31\x39\x37\x37\x2E\x1E\x20\x20\x1F\x61\x76\x69\x69\x2C\x20" "\x31\x31\x32\x20\x70\x2E\x20\x3A\x1F\x62\x69\x6C\x6C\x2E\x20\x3B" "\x1F\x63\x32\x36\x20\x63\x6D\x2E\x1E\x31\x20\x1F\x61\x4E\x42\x53" "\x20\x73\x70\x65\x63\x69\x61\x6C\x20\x70\x75\x62\x6C\x69\x63\x61" "\x74\x69\x6F\x6E\x20\x3B\x20\x35\x30\x30\x2D\x38\x1E\x20\x30\x1F" "\x61\x4F\x70\x74\x69\x63\x61\x6C\x20\x70\x61\x74\x74\x65\x72\x6E" "\x20\x72\x65\x63\x6F\x67\x6E\x69\x74\x69\x6F\x6E\x1F\x78\x53\x74" "\x61\x6E\x64\x61\x72\x64\x73\x1F\x7A\x55\x6E\x69\x74\x65\x64\x20" "\x53\x74\x61\x74\x65\x73\x2E\x1E\x31\x30\x1F\x61\x45\x76\x61\x6E" "\x73\x2C\x20\x4A\x6F\x68\x6E\x20\x4D\x61\x72\x74\x69\x6E\x2C\x1F" "\x64\x31\x39\x34\x32\x2D\x1E\x31\x30\x1F\x61\x4B\x69\x72\x73\x63" "\x68\x2C\x20\x52\x75\x73\x73\x65\x6C\x6C\x2E\x1E\x31\x30\x1F\x61" "\x4E\x61\x67\x65\x6C\x2C\x20\x52\x6F\x67\x65\x72\x20\x4E\x2E\x1E" "\x31\x30\x1F\x61\x55\x6E\x69\x74\x65\x64\x20\x53\x74\x61\x74\x65" "\x73\x2E\x1F\x62\x4E\x61\x74\x69\x6F\x6E\x61\x6C\x20\x42\x75\x72" "\x65\x61\x75\x20\x6F\x66\x20\x53\x74\x61\x6E\x64\x61\x72\x64\x73" "\x2E\x1E\x31\x20\x1F\x61\x55\x6E\x69\x74\x65\x64\x20\x53\x74\x61" "\x74\x65\x73\x2E\x1F\x62\x4E\x61\x74\x69\x6F\x6E\x61\x6C\x20\x42" "\x75\x72\x65\x61\x75\x20\x6F\x66\x20\x53\x74\x61\x6E\x64\x61\x72" "\x64\x73\x2E\x1F\x74\x53\x70\x65\x63\x69\x61\x6C\x20\x70\x75\x62" "\x6C\x69\x63\x61\x74\x69\x6F\x6E\x20\x3B\x1F\x76\x35\x30\x30\x2D" "\x38\x2E\x1E\x20\x20\x1F\x61\x20\x20\x20\x37\x37\x30\x30\x34\x37" "\x37\x33\x20\x1E\x1D" , "\x30\x30\x38\x37\x38\x63\x61\x6D\x20\x20\x32\x32\x30\x30\x32\x32" "\x39\x20\x69\x20\x34\x35\x30\x30\x30\x30\x31\x30\x30\x31\x33\x30" "\x30\x30\x30\x30\x30\x30\x33\x30\x30\x30\x34\x30\x30\x30\x31\x33" "\x30\x30\x35\x30\x30\x31\x37\x30\x30\x30\x31\x37\x30\x30\x38\x30" "\x30\x34\x31\x30\x30\x30\x33\x34\x30\x31\x30\x30\x30\x31\x37\x30" "\x30\x36\x33\x31\x30\x34\x30\x30\x30\x31\x38\x30\x30\x30\x37\x35" "\x30\x35\x30\x30\x30\x33\x38\x30\x30\x30\x39\x33\x30\x38\x32\x30" "\x30\x32\x32\x30\x30\x31\x33\x31\x30\x38\x36\x30\x30\x31\x37\x30" "\x30\x31\x35\x33\x31\x30\x30\x30\x30\x31\x39\x30\x30\x31\x37\x30" "\x32\x34\x35\x30\x30\x38\x37\x30\x30\x31\x38\x39\x32\x36\x30\x30" "\x31\x33\x38\x30\x30\x32\x37\x36\x33\x30\x30\x30\x30\x32\x34\x30" "\x30\x34\x31\x34\x34\x34\x30\x30\x30\x33\x34\x30\x30\x34\x33\x38" "\x34\x39\x30\x30\x30\x33\x36\x30\x30\x34\x37\x32\x36\x35\x30\x30" "\x30\x34\x32\x30\x30\x35\x30\x38\x38\x31\x30\x30\x30\x38\x31\x30" "\x30\x35\x35\x30\x1E\x20\x20\x20\x37\x37\x30\x30\x35\x35\x35\x38" "\x20\x1E\x44\x4C\x43\x1E\x31\x39\x37\x37\x30\x37\x31\x33\x30\x30" "\x30\x30\x30\x30\x2E\x30\x1E\x37\x37\x30\x34\x30\x31\x73\x31\x39" "\x37\x37\x20\x20\x20\x20\x64\x63\x75\x20\x20\x20\x20\x20\x20\x20" "\x20\x20\x20\x20\x30\x30\x30\x31\x30\x20\x65\x6E\x67\x20\x20\x1E" "\x20\x20\x1F\x61\x44\x4C\x43\x1F\x63\x44\x4C\x43\x1F\x64\x44\x4C" "\x43\x1E\x30\x30\x1F\x61\x51\x43\x31\x30\x30\x1F\x62\x2E\x55\x35" "\x37\x20\x6E\x6F\x2E\x20\x35\x30\x30\x2D\x39\x1F\x61\x51\x41\x37" "\x36\x2E\x39\x2E\x41\x32\x35\x1E\x30\x30\x1F\x61\x36\x30\x32\x2F" "\x2E\x31\x20\x73\x1F\x61\x30\x30\x31\x2E\x36\x2F\x34\x1E\x30\x20" "\x1F\x61\x43\x31\x33\x2E\x31\x30\x3A\x35\x30\x30\x2D\x39\x1E\x31" "\x30\x1F\x61\x57\x6F\x6F\x64\x2C\x20\x48\x65\x6C\x65\x6E\x20\x4D" "\x2E\x1E\x31\x34\x1F\x61\x54\x68\x65\x20\x75\x73\x65\x20\x6F\x66" "\x20\x70\x61\x73\x73\x77\x6F\x72\x64\x73\x20\x66\x6F\x72\x20\x63" "\x6F\x6E\x74\x72\x6F\x6C\x6C\x65\x64\x20\x61\x63\x63\x65\x73\x73" "\x20\x74\x6F\x20\x63\x6F\x6D\x70\x75\x74\x65\x72\x20\x72\x65\x73" "\x6F\x75\x72\x63\x65\x73\x20\x2F\x1F\x63\x48\x65\x6C\x65\x6E\x20" "\x4D\x2E\x20\x57\x6F\x6F\x64\x2E\x1E\x30\x20\x1F\x61\x5B\x57\x61" "\x73\x68\x69\x6E\x67\x74\x6F\x6E\x5D\x20\x3A\x1F\x62\x55\x2E\x53" "\x2E\x20\x44\x65\x70\x74\x2E\x20\x6F\x66\x20\x43\x6F\x6D\x6D\x65" "\x72\x63\x65\x2C\x20\x4E\x61\x74\x69\x6F\x6E\x61\x6C\x20\x42\x75" "\x72\x65\x61\x75\x20\x6F\x66\x20\x53\x74\x61\x6E\x64\x61\x72\x64" "\x73\x20\x3A\x20\x66\x6F\x72\x20\x73\x61\x6C\x65\x20\x62\x79\x20" "\x74\x68\x65\x20\x53\x75\x70\x74\x2E\x20\x6F\x66\x20\x44\x6F\x63" "\x73\x2E\x2C\x20\x55\x2E\x53\x2E\x20\x47\x6F\x76\x74\x2E\x20\x50" "\x72\x69\x6E\x74\x2E\x20\x4F\x66\x66\x2E\x2C\x1F\x63\x31\x39\x37" "\x37\x2E\x1E\x20\x20\x1F\x61\x69\x76\x2C\x20\x35\x33\x20\x70\x2E" "\x20\x3B\x1F\x63\x32\x36\x20\x63\x6D\x2E\x1E\x20\x30\x1F\x61\x43" "\x6F\x6D\x70\x75\x74\x65\x72\x20\x73\x63\x69\x65\x6E\x63\x65\x20" "\x26\x20\x74\x65\x63\x68\x6E\x6F\x6C\x6F\x67\x79\x1E\x31\x20\x1F" "\x61\x4E\x42\x53\x20\x73\x70\x65\x63\x69\x61\x6C\x20\x70\x75\x62" "\x6C\x69\x63\x61\x74\x69\x6F\x6E\x20\x3B\x20\x35\x30\x30\x2D\x39" "\x1E\x20\x30\x1F\x61\x43\x6F\x6D\x70\x75\x74\x65\x72\x73\x1F\x78" "\x41\x63\x63\x65\x73\x73\x20\x63\x6F\x6E\x74\x72\x6F\x6C\x1F\x78" "\x50\x61\x73\x73\x77\x6F\x72\x64\x73\x2E\x1E\x31\x20\x1F\x61\x55" "\x6E\x69\x74\x65\x64\x20\x53\x74\x61\x74\x65\x73\x2E\x1F\x62\x4E" "\x61\x74\x69\x6F\x6E\x61\x6C\x20\x42\x75\x72\x65\x61\x75\x20\x6F" "\x66\x20\x53\x74\x61\x6E\x64\x61\x72\x64\x73\x2E\x1F\x74\x53\x70" "\x65\x63\x69\x61\x6C\x20\x70\x75\x62\x6C\x69\x63\x61\x74\x69\x6F" "\x6E\x20\x3B\x1F\x76\x35\x30\x30\x2D\x39\x2E\x1E\x20\x20\x1F\x61" "\x20\x20\x20\x37\x37\x30\x30\x35\x35\x35\x38\x20\x1E\x1D" , "\x30\x30\x37\x39\x31\x63\x61\x6D\x20\x20\x32\x32\x30\x30\x32\x31" "\x37\x20\x20\x20\x34\x35\x30\x30\x30\x30\x31\x30\x30\x31\x38\x30" "\x30\x30\x30\x30\x30\x30\x33\x30\x30\x30\x34\x30\x30\x30\x31\x38" "\x30\x30\x35\x30\x30\x31\x37\x30\x30\x30\x32\x32\x30\x30\x38\x30" "\x30\x34\x31\x30\x30\x30\x33\x39\x30\x31\x30\x30\x30\x32\x32\x30" "\x30\x35\x35\x31\x30\x34\x30\x30\x30\x31\x38\x30\x30\x30\x38\x30" "\x30\x34\x33\x30\x30\x33\x30\x30\x30\x30\x39\x38\x30\x35\x30\x30" "\x30\x31\x38\x30\x30\x31\x32\x38\x30\x38\x32\x30\x30\x31\x38\x30" "\x30\x31\x34\x36\x31\x30\x30\x30\x30\x32\x31\x30\x30\x31\x36\x34" "\x32\x34\x35\x30\x31\x36\x32\x30\x30\x31\x38\x35\x32\x36\x30\x30" "\x30\x32\x33\x30\x30\x33\x34\x37\x33\x30\x30\x30\x30\x32\x36\x30" "\x30\x33\x37\x30\x35\x30\x30\x30\x30\x32\x39\x30\x30\x33\x39\x36" "\x36\x35\x30\x30\x30\x36\x34\x30\x30\x34\x32\x35\x37\x31\x30\x30" "\x30\x36\x32\x30\x30\x34\x38\x39\x1E\x20\x20\x20\x37\x37\x36\x31" "\x36\x33\x36\x37\x20\x2F\x2F\x72\x38\x34\x1E\x44\x4C\x43\x1E\x31" "\x39\x38\x34\x31\x32\x31\x33\x30\x30\x30\x30\x30\x30\x2E\x30\x1E" "\x37\x32\x30\x33\x32\x39\x73\x31\x39\x37\x31\x20\x20\x20\x20\x64" "\x63\x75\x61\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x30\x30\x30" "\x31\x30\x20\x65\x6E\x67\x20\x20\x1E\x20\x20\x1F\x61\x44\x4C\x43" "\x1F\x63\x44\x4C\x43\x1F\x64\x44\x4C\x43\x1E\x20\x20\x1F\x61\x6E" "\x2D\x75\x73\x2D\x64\x63\x1F\x61\x6E\x2D\x75\x73\x2D\x6D\x64\x1F" "\x61\x6E\x2D\x75\x73\x2D\x76\x61\x1E\x30\x30\x1F\x61\x48\x45\x32" "\x37\x38\x31\x2E\x57\x33\x1F\x62\x45\x35\x1E\x30\x30\x1F\x61\x33" "\x38\x35\x2F\x2E\x32\x32\x2F\x30\x39\x37\x35\x33\x1E\x31\x30\x1F" "\x61\x45\x6E\x67\x6C\x75\x6E\x64\x2C\x20\x43\x61\x72\x6C\x20\x52" "\x2E\x1E\x31\x30\x1F\x61\x57\x61\x73\x68\x69\x6E\x67\x74\x6F\x6E" "\x20\x6D\x65\x74\x72\x6F\x70\x6F\x6C\x69\x74\x61\x6E\x20\x61\x72" "\x65\x61\x20\x72\x61\x69\x6C\x20\x63\x6F\x6D\x70\x75\x74\x65\x72" "\x20\x66\x65\x61\x73\x69\x62\x69\x6C\x69\x74\x79\x20\x73\x74\x75" "\x64\x79\x3B\x1F\x62\x66\x69\x6E\x61\x6C\x20\x72\x65\x70\x6F\x72" "\x74\x1F\x63\x5B\x62\x79\x5D\x20\x43\x61\x72\x6C\x20\x52\x2E\x20" "\x45\x6E\x67\x6C\x75\x6E\x64\x2C\x20\x4A\x72\x2E\x20\x50\x72\x65" "\x70\x61\x72\x65\x64\x20\x66\x6F\x72\x20\x55\x72\x62\x61\x6E\x20" "\x4D\x61\x73\x73\x20\x54\x72\x61\x6E\x73\x70\x6F\x72\x74\x61\x74" "\x69\x6F\x6E\x20\x41\x64\x6D\x69\x6E\x69\x73\x74\x72\x61\x74\x69" "\x6F\x6E\x2E\x1E\x30\x20\x1F\x61\x57\x61\x73\x68\x69\x6E\x67\x74" "\x6F\x6E\x2C\x1F\x63\x31\x39\x37\x31\x2E\x1E\x20\x20\x1F\x61\x39" "\x32\x20\x6C\x2E\x1F\x62\x69\x6C\x6C\x75\x73\x2E\x1F\x63\x32\x38" "\x20\x63\x6D\x2E\x1E\x20\x20\x1F\x61\x22\x43\x6F\x6E\x74\x72\x61" "\x63\x74\x20\x44\x4F\x54\x2D\x55\x54\x2D\x31\x30\x30\x30\x33\x2E" "\x22\x1E\x20\x30\x1F\x61\x52\x61\x69\x6C\x72\x6F\x61\x64\x73\x1F" "\x7A\x57\x61\x73\x68\x69\x6E\x67\x74\x6F\x6E\x20\x4D\x65\x74\x72" "\x6F\x70\x6F\x6C\x69\x74\x61\x6E\x20\x41\x72\x65\x61\x1F\x78\x43" "\x6F\x6D\x6D\x75\x74\x69\x6E\x67\x20\x74\x72\x61\x66\x66\x69\x63" "\x2E\x1E\x31\x30\x1F\x61\x55\x6E\x69\x74\x65\x64\x20\x53\x74\x61" "\x74\x65\x73\x2E\x1F\x62\x55\x72\x62\x61\x6E\x20\x4D\x61\x73\x73" "\x20\x54\x72\x61\x6E\x73\x70\x6F\x72\x74\x61\x74\x69\x6F\x6E\x20" "\x41\x64\x6D\x69\x6E\x69\x73\x74\x72\x61\x74\x69\x6F\x6E\x2E\x1E" "\x20\x20\x1F\x61\x20\x20\x20\x37\x37\x36\x31\x36\x33\x36\x37\x20" "\x2F\x2F\x72\x38\x34\x1E\x1D" , "\x30\x30\x36\x38\x36\x63\x61\x6D\x20\x20\x32\x32\x30\x30\x32\x32" "\x39\x20\x20\x20\x34\x35\x30\x30\x30\x30\x31\x30\x30\x31\x38\x30" "\x30\x30\x30\x30\x30\x30\x33\x30\x30\x30\x34\x30\x30\x30\x31\x38" "\x30\x30\x35\x30\x30\x31\x37\x30\x30\x30\x32\x32\x30\x30\x38\x30" "\x30\x34\x31\x30\x30\x30\x33\x39\x30\x31\x30\x30\x30\x32\x32\x30" "\x30\x34\x33\x34\x30\x34\x30\x30\x30\x31\x38\x30\x30\x30\x38\x30" "\x30\x34\x33\x30\x30\x31\x32\x30\x30\x30\x39\x38\x30\x35\x30\x30" "\x30\x32\x34\x30\x30\x31\x31\x30\x30\x38\x32\x30\x30\x31\x39\x30" "\x30\x31\x33\x34\x31\x31\x30\x30\x30\x37\x30\x30\x30\x31\x35\x33" "\x32\x34\x35\x30\x30\x35\x35\x30\x30\x32\x32\x33\x32\x35\x30\x30" "\x30\x30\x39\x30\x30\x32\x37\x38\x32\x36\x30\x30\x30\x32\x31\x30" "\x30\x32\x38\x37\x33\x30\x30\x30\x30\x31\x38\x30\x30\x33\x30\x38" "\x35\x30\x30\x30\x30\x31\x37\x30\x30\x33\x32\x36\x36\x35\x30\x30" "\x30\x34\x38\x30\x30\x33\x34\x33\x36\x35\x30\x30\x30\x34\x33\x30" "\x30\x33\x39\x31\x1E\x20\x20\x20\x37\x37\x36\x33\x37\x30\x37\x35" "\x20\x2F\x2F\x72\x38\x32\x1E\x44\x4C\x43\x1E\x31\x39\x38\x32\x30" "\x38\x31\x37\x30\x30\x30\x30\x30\x30\x2E\x30\x1E\x37\x32\x30\x33" "\x32\x30\x73\x31\x39\x37\x31\x20\x20\x20\x20\x77\x61\x75\x20\x20" "\x20\x20\x20\x20\x73\x20\x20\x20\x20\x30\x30\x30\x30\x30\x20\x65" "\x6E\x67\x20\x20\x1E\x20\x20\x1F\x61\x44\x4C\x43\x1F\x63\x44\x4C" "\x43\x1F\x64\x44\x4C\x43\x1E\x20\x20\x1F\x61\x6E\x2D\x75\x73\x2D" "\x77\x61\x1E\x30\x30\x1F\x61\x4C\x42\x31\x30\x32\x38\x2E\x35\x1F" "\x62\x2E\x57\x33\x37\x20\x31\x39\x37\x31\x1E\x30\x30\x1F\x61\x33" "\x37\x38\x2F\x2E\x30\x35\x32\x2F\x30\x39\x37\x39\x37\x1E\x31\x30" "\x1F\x61\x57\x61\x73\x68\x69\x6E\x67\x74\x6F\x6E\x20\x28\x53\x74" "\x61\x74\x65\x29\x2E\x1F\x62\x53\x74\x61\x74\x65\x20\x42\x6F\x61" "\x72\x64\x20\x66\x6F\x72\x20\x43\x6F\x6D\x6D\x75\x6E\x69\x74\x79" "\x20\x43\x6F\x6C\x6C\x65\x67\x65\x20\x45\x64\x75\x63\x61\x74\x69" "\x6F\x6E\x2E\x1E\x31\x32\x1F\x61\x41\x20\x70\x6C\x61\x6E\x20\x66" "\x6F\x72\x20\x63\x6F\x6D\x6D\x75\x6E\x69\x74\x79\x20\x63\x6F\x6C" "\x6C\x65\x67\x65\x20\x63\x6F\x6D\x70\x75\x74\x65\x72\x20\x64\x65" "\x76\x65\x6C\x6F\x70\x6D\x65\x6E\x74\x2E\x1E\x20\x20\x1F\x61\x52" "\x65\x76\x2E\x1E\x31\x20\x1F\x61\x5B\x4F\x6C\x79\x6D\x70\x69\x61" "\x5D\x1F\x63\x31\x39\x37\x31\x2E\x1E\x20\x20\x1F\x61\x34\x37\x20" "\x6C\x2E\x1F\x63\x32\x38\x20\x63\x6D\x2E\x1E\x20\x20\x1F\x61\x43" "\x6F\x76\x65\x72\x20\x74\x69\x74\x6C\x65\x2E\x1E\x20\x30\x1F\x61" "\x55\x6E\x69\x76\x65\x72\x73\x69\x74\x69\x65\x73\x20\x61\x6E\x64" "\x20\x63\x6F\x6C\x6C\x65\x67\x65\x73\x1F\x78\x44\x61\x74\x61\x20" "\x70\x72\x6F\x63\x65\x73\x73\x69\x6E\x67\x2E\x1E\x20\x30\x1F\x61" "\x43\x6F\x6D\x6D\x75\x6E\x69\x74\x79\x20\x63\x6F\x6C\x6C\x65\x67" "\x65\x73\x1F\x7A\x57\x61\x73\x68\x69\x6E\x67\x74\x6F\x6E\x20\x28" "\x53\x74\x61\x74\x65\x29\x1E\x20\x20\x1F\x61\x20\x20\x20\x37\x37" "\x36\x33\x37\x30\x37\x35\x20\x2F\x2F\x72\x38\x32\x1E\x1D" , "\x30\x30\x36\x36\x38\x6E\x61\x6D\x20\x20\x32\x32\x30\x30\x32\x31" "\x37\x31\x20\x20\x34\x35\x30\x30\x30\x30\x31\x30\x30\x31\x33\x30" "\x30\x30\x30\x30\x30\x30\x33\x30\x30\x30\x34\x30\x30\x30\x31\x33" "\x30\x30\x35\x30\x30\x31\x37\x30\x30\x30\x31\x37\x30\x30\x38\x30" "\x30\x34\x31\x30\x30\x30\x33\x34\x30\x31\x30\x30\x30\x31\x37\x30" "\x30\x34\x33\x33\x30\x34\x30\x30\x30\x31\x38\x30\x30\x30\x37\x35" "\x30\x35\x30\x30\x30\x31\x38\x30\x30\x30\x39\x33\x30\x38\x32\x30" "\x30\x31\x36\x30\x30\x31\x31\x31\x31\x30\x30\x30\x30\x31\x39\x30" "\x30\x31\x32\x37\x32\x34\x35\x30\x30\x37\x36\x30\x30\x31\x34\x36" "\x32\x36\x30\x30\x30\x34\x30\x30\x30\x32\x32\x32\x33\x30\x30\x30" "\x30\x34\x30\x30\x30\x32\x36\x32\x33\x35\x30\x30\x30\x30\x39\x30" "\x30\x33\x30\x32\x34\x39\x30\x30\x30\x33\x32\x30\x30\x33\x31\x31" "\x35\x30\x34\x30\x30\x33\x30\x30\x30\x33\x34\x33\x36\x33\x30\x30" "\x30\x36\x30\x30\x30\x33\x37\x33\x1E\x20\x20\x20\x37\x30\x30\x30" "\x31\x30\x37\x30\x20\x1E\x44\x4C\x43\x1E\x31\x39\x37\x30\x30\x34" "\x32\x37\x30\x30\x30\x30\x30\x30\x2E\x30\x1E\x37\x30\x30\x33\x30" "\x32\x73\x31\x39\x36\x38\x20\x20\x20\x20\x6D\x6F\x75\x61\x62\x20" "\x20\x20\x20\x62\x20\x20\x20\x20\x30\x30\x30\x30\x30\x20\x65\x6E" "\x67\x20\x20\x1E\x20\x20\x1F\x61\x44\x4C\x43\x1F\x63\x44\x4C\x43" "\x1F\x64\x44\x4C\x43\x1E\x30\x30\x1F\x61\x42\x53\x31\x32\x37\x35" "\x2E\x35\x1F\x62\x2E\x4F\x32\x1E\x30\x30\x1F\x61\x32\x32\x32\x2F" "\x2E\x31\x35\x2F\x30\x30\x37\x1E\x31\x30\x1F\x61\x4F\x62\x65\x72" "\x73\x74\x2C\x20\x42\x72\x75\x63\x65\x2E\x1E\x30\x30\x1F\x61\x44" "\x65\x75\x74\x65\x72\x6F\x6E\x6F\x6D\x79\x2E\x1F\x63\x54\x68\x6F" "\x75\x67\x68\x74\x20\x71\x75\x65\x73\x74\x69\x6F\x6E\x73\x2C\x20" "\x62\x79\x20\x44\x6F\x6E\x20\x44\x65\x57\x65\x6C\x74\x2E\x20\x53" "\x75\x6D\x6D\x61\x72\x79\x20\x62\x79\x20\x41\x64\x61\x6D\x20\x43" "\x6C\x61\x72\x6B\x65\x2E\x1E\x30\x20\x1F\x61\x4A\x6F\x70\x6C\x69" "\x6E\x2C\x20\x4D\x6F\x2E\x2C\x1F\x62\x43\x6F\x6C\x6C\x65\x67\x65" "\x20\x50\x72\x65\x73\x73\x1F\x63\x5B\x31\x39\x36\x38\x5D\x1E\x20" "\x20\x1F\x61\x76\x69\x69\x69\x2C\x20\x34\x35\x32\x20\x70\x2E\x1F" "\x62\x69\x6C\x6C\x75\x73\x2E\x2C\x20\x6D\x61\x70\x73\x2E\x1F\x63" "\x32\x32\x20\x63\x6D\x2E\x1E\x20\x20\x1F\x61\x35\x2E\x39\x35\x1E" "\x30\x20\x1F\x61\x42\x69\x62\x6C\x65\x20\x73\x74\x75\x64\x79\x20" "\x74\x65\x78\x74\x62\x6F\x6F\x6B\x20\x73\x65\x72\x69\x65\x73\x1E" "\x20\x20\x1F\x61\x42\x69\x62\x6C\x69\x6F\x67\x72\x61\x70\x68\x79" "\x3A\x20\x70\x2E\x20\x34\x34\x39\x2D\x34\x35\x32\x2E\x1E\x20\x30" "\x1F\x61\x42\x69\x62\x6C\x65\x2E\x20\x4F\x2E\x54\x2E\x20\x44\x65" "\x75\x74\x65\x72\x6F\x6E\x6F\x6D\x79\x1F\x78\x53\x74\x75\x64\x79" "\x1F\x78\x4F\x75\x74\x6C\x69\x6E\x65\x73\x2C\x20\x73\x79\x6C\x6C" "\x61\x62\x69\x2C\x20\x65\x74\x63\x2E\x1E\x20\x20\x1F\x61\x20\x20" "\x20\x37\x30\x30\x30\x31\x30\x37\x30\x20\x1E\x1D" , "\x30\x30\x38\x38\x38\x70\x61\x6D\x20\x20\x32\x32\x30\x30\x32\x36" "\x35\x20\x20\x20\x34\x35\x30\x30\x30\x30\x31\x30\x30\x31\x33\x30" "\x30\x30\x30\x30\x30\x30\x33\x30\x30\x30\x34\x30\x30\x30\x31\x33" "\x30\x30\x35\x30\x30\x31\x37\x30\x30\x30\x31\x37\x30\x30\x38\x30" "\x30\x34\x31\x30\x30\x30\x33\x34\x30\x31\x30\x30\x30\x31\x37\x30" "\x30\x36\x30\x35\x30\x32\x30\x30\x30\x31\x35\x30\x30\x30\x37\x35" "\x30\x34\x30\x30\x30\x31\x38\x30\x30\x30\x39\x30\x30\x34\x33\x30" "\x30\x31\x32\x30\x30\x31\x30\x38\x30\x35\x30\x30\x30\x32\x30\x30" "\x30\x31\x32\x30\x30\x38\x32\x30\x30\x31\x32\x30\x30\x31\x34\x30" "\x31\x30\x30\x30\x30\x32\x39\x30\x30\x31\x35\x32\x32\x34\x35\x30" "\x30\x39\x33\x30\x30\x31\x38\x31\x32\x36\x30\x30\x30\x35\x35\x30" "\x30\x32\x37\x34\x33\x30\x30\x30\x30\x32\x38\x30\x30\x33\x32\x39" "\x35\x30\x30\x30\x30\x38\x31\x30\x30\x33\x35\x37\x35\x30\x34\x30" "\x30\x34\x31\x30\x30\x34\x33\x38\x36\x35\x30\x30\x30\x34\x35\x30" "\x30\x34\x37\x39\x36\x35\x30\x30\x30\x32\x35\x30\x30\x35\x32\x34" "\x36\x35\x31\x30\x30\x32\x32\x30\x30\x35\x34\x39\x38\x33\x30\x30" "\x30\x33\x34\x30\x30\x35\x37\x31\x1E\x20\x20\x20\x37\x32\x30\x30" "\x32\x35\x36\x35\x20\x1E\x44\x4C\x43\x1E\x31\x39\x37\x33\x30\x34" "\x30\x39\x30\x30\x30\x30\x30\x30\x2E\x30\x1E\x37\x32\x30\x34\x31" "\x38\x72\x31\x39\x37\x32\x31\x39\x30\x39\x6E\x79\x75\x20\x20\x20" "\x20\x20\x20\x62\x20\x20\x20\x20\x30\x30\x30\x30\x30\x20\x65\x6E" "\x67\x20\x20\x1E\x20\x20\x1F\x61\x30\x38\x33\x36\x39\x36\x38\x34" "\x33\x33\x1E\x20\x20\x1F\x61\x44\x4C\x43\x1F\x63\x44\x4C\x43\x1F" "\x64\x44\x4C\x43\x1E\x20\x20\x1F\x61\x65\x2D\x67\x72\x2D\x2D\x2D" "\x1E\x30\x30\x1F\x61\x42\x4C\x37\x38\x35\x1F\x62\x2E\x41\x33\x20" "\x31\x39\x37\x32\x1E\x30\x30\x1F\x61\x32\x39\x32\x2F\x2E\x30\x38" "\x1E\x31\x30\x1F\x61\x41\x64\x61\x6D\x2C\x20\x4A\x61\x6D\x65\x73" "\x2C\x1F\x64\x31\x38\x36\x30\x2D\x31\x39\x30\x37\x2E\x1E\x31\x34" "\x1F\x61\x54\x68\x65\x20\x72\x65\x6C\x69\x67\x69\x6F\x75\x73\x20" "\x74\x65\x61\x63\x68\x65\x72\x73\x20\x6F\x66\x20\x47\x72\x65\x65" "\x63\x65\x2E\x1F\x63\x45\x64\x69\x74\x65\x64\x20\x77\x69\x74\x68" "\x20\x61\x20\x6D\x65\x6D\x6F\x69\x72\x2C\x20\x62\x79\x20\x68\x69" "\x73\x20\x77\x69\x66\x65\x2C\x20\x41\x64\x65\x6C\x61\x20\x4D\x61" "\x72\x69\x6F\x6E\x20\x41\x64\x61\x6D\x2E\x1E\x30\x20\x1F\x61\x46" "\x72\x65\x65\x70\x6F\x72\x74\x2C\x20\x4E\x2E\x59\x2E\x2C\x1F\x62" "\x42\x6F\x6F\x6B\x73\x20\x66\x6F\x72\x20\x4C\x69\x62\x72\x61\x72" "\x69\x65\x73\x20\x50\x72\x65\x73\x73\x1F\x63\x5B\x31\x39\x37\x32" "\x5D\x1E\x20\x20\x1F\x61\x78\x69\x78\x2C\x20\x6C\x76\x2C\x20\x34" "\x36\x37\x20\x70\x2E\x1F\x63\x32\x32\x20\x63\x6D\x2E\x1E\x20\x20" "\x1F\x61\x52\x65\x70\x72\x69\x6E\x74\x20\x6F\x66\x20\x74\x68\x65" "\x20\x31\x39\x30\x39\x20\x65\x64\x2E\x2C\x20\x77\x68\x69\x63\x68" "\x20\x77\x61\x73\x20\x69\x73\x73\x75\x65\x64\x20\x61\x73\x20\x74" "\x68\x65\x20\x31\x39\x30\x34\x2D\x31\x39\x30\x36\x20\x47\x69\x66" "\x66\x6F\x72\x64\x20\x6C\x65\x63\x74\x75\x72\x65\x73\x2E\x1E\x20" "\x20\x1F\x61\x49\x6E\x63\x6C\x75\x64\x65\x73\x20\x62\x69\x62\x6C" "\x69\x6F\x67\x72\x61\x70\x68\x69\x63\x61\x6C\x20\x72\x65\x66\x65" "\x72\x65\x6E\x63\x65\x73\x2E\x1E\x20\x30\x1F\x61\x47\x72\x65\x65" "\x6B\x20\x6C\x69\x74\x65\x72\x61\x74\x75\x72\x65\x1F\x78\x48\x69" "\x73\x74\x6F\x72\x79\x20\x61\x6E\x64\x20\x63\x72\x69\x74\x69\x63" "\x69\x73\x6D\x2E\x1E\x20\x30\x1F\x61\x50\x68\x69\x6C\x6F\x73\x6F" "\x70\x68\x79\x2C\x20\x41\x6E\x63\x69\x65\x6E\x74\x2E\x1E\x20\x30" "\x1F\x61\x47\x72\x65\x65\x63\x65\x1F\x78\x52\x65\x6C\x69\x67\x69" "\x6F\x6E\x2E\x1E\x20\x30\x1F\x61\x47\x69\x66\x66\x6F\x72\x64\x20" "\x6C\x65\x63\x74\x75\x72\x65\x73\x2C\x1F\x76\x31\x39\x30\x34\x2D" "\x31\x39\x30\x36\x2E\x1E\x20\x20\x1F\x61\x20\x20\x20\x37\x32\x30" "\x30\x32\x35\x36\x35\x20\x1E\x1D" , "\x30\x31\x31\x32\x36\x6E\x61\x6D\x20\x20\x32\x32\x30\x30\x32\x36" "\x35\x20\x61\x20\x34\x35\x30\x30\x30\x30\x31\x30\x30\x31\x33\x30" "\x30\x30\x30\x30\x30\x30\x33\x30\x30\x30\x34\x30\x30\x30\x31\x33" "\x30\x30\x35\x30\x30\x31\x37\x30\x30\x30\x31\x37\x30\x30\x38\x30" "\x30\x34\x31\x30\x30\x30\x33\x34\x30\x31\x30\x30\x30\x31\x37\x30" "\x30\x38\x34\x33\x30\x32\x30\x30\x30\x33\x31\x30\x30\x30\x37\x35" "\x30\x34\x30\x30\x30\x31\x38\x30\x30\x31\x30\x36\x30\x35\x30\x30" "\x30\x32\x31\x30\x30\x31\x32\x34\x30\x38\x32\x30\x30\x31\x38\x30" "\x30\x31\x34\x35\x31\x30\x30\x30\x30\x34\x32\x30\x30\x31\x36\x33" "\x32\x34\x35\x30\x31\x35\x38\x30\x30\x32\x30\x35\x32\x35\x30\x30" "\x30\x33\x37\x30\x30\x33\x36\x33\x32\x36\x30\x30\x30\x34\x35\x30" "\x30\x34\x30\x30\x33\x30\x30\x30\x30\x35\x30\x30\x30\x34\x34\x35" "\x34\x34\x30\x30\x30\x33\x35\x30\x30\x34\x39\x35\x36\x33\x30\x30" "\x30\x36\x34\x30\x30\x35\x33\x30\x36\x33\x30\x30\x30\x36\x34\x30" "\x30\x35\x39\x34\x36\x33\x30\x30\x30\x36\x32\x30\x30\x36\x35\x38" "\x36\x33\x30\x30\x30\x36\x33\x30\x30\x37\x32\x30\x37\x33\x30\x30" "\x30\x36\x30\x30\x30\x37\x38\x33\x1E\x20\x20\x20\x38\x30\x30\x38" "\x32\x33\x32\x39\x20\x1E\x44\x4C\x43\x1E\x31\x39\x38\x31\x30\x35" "\x32\x38\x30\x30\x30\x30\x30\x30\x2E\x30\x1E\x38\x31\x30\x35\x32" "\x36\x73\x31\x39\x38\x30\x20\x20\x20\x20\x63\x74\x75\x61\x66\x20" "\x20\x20\x20\x20\x20\x20\x20\x20\x30\x30\x30\x31\x30\x20\x65\x6E" "\x67\x20\x20\x1E\x20\x20\x1F\x61\x30\x38\x37\x39\x38\x33\x32\x33" "\x35\x35\x20\x28\x70\x62\x6B\x2E\x29\x20\x3A\x1F\x63\x24\x34\x2E" "\x39\x35\x1E\x20\x20\x1F\x61\x44\x4C\x43\x1F\x63\x44\x4C\x43\x1F" "\x64\x44\x4C\x43\x1E\x30\x30\x1F\x61\x42\x53\x31\x34\x33\x33\x1F" "\x62\x2E\x53\x35\x20\x31\x39\x38\x30\x1E\x30\x30\x1F\x61\x32\x32" "\x33\x2F\x2E\x32\x30\x37\x37\x1F\x32\x31\x39\x1E\x31\x30\x1F\x61" "\x53\x6D\x69\x74\x68\x2C\x20\x47\x65\x6F\x72\x67\x65\x20\x41\x64" "\x61\x6D\x2C\x1F\x63\x53\x69\x72\x2C\x1F\x64\x31\x38\x35\x36\x2D" "\x31\x39\x34\x32\x2E\x1E\x31\x30\x1F\x61\x46\x6F\x75\x72\x20\x70" "\x73\x61\x6C\x6D\x73\x20\x3A\x1F\x62\x58\x58\x49\x49\x49\x2C\x20" "\x58\x58\x58\x56\x49\x2C\x20\x4C\x49\x49\x2C\x20\x43\x58\x58\x49" "\x20\x2F\x1F\x63\x69\x6E\x74\x65\x72\x70\x72\x65\x74\x65\x64\x20" "\x66\x6F\x72\x20\x70\x72\x61\x63\x74\x69\x63\x61\x6C\x20\x75\x73" "\x65\x20\x62\x79\x20\x47\x65\x6F\x72\x67\x65\x20\x41\x64\x61\x6D" "\x20\x53\x6D\x69\x74\x68\x20\x3B\x20\x69\x6E\x74\x72\x6F\x64\x75" "\x63\x74\x69\x6F\x6E\x20\x62\x79\x20\x46\x2E\x46\x2E\x20\x42\x72" "\x75\x63\x65\x20\x3B\x20\x69\x6C\x6C\x75\x73\x74\x72\x61\x74\x69" "\x6F\x6E\x73\x20\x62\x79\x20\x52\x6F\x6E\x20\x4D\x63\x43\x61\x72" "\x74\x79\x2E\x1E\x20\x20\x1F\x61\x53\x68\x65\x70\x68\x65\x72\x64" "\x20\x69\x6C\x6C\x75\x73\x74\x72\x61\x74\x65\x64\x20\x63\x6C\x61" "\x73\x73\x69\x63\x20\x65\x64\x2E\x1E\x30\x20\x1F\x61\x4E\x65\x77" "\x20\x43\x61\x6E\x61\x61\x6E\x2C\x20\x43\x6F\x6E\x6E\x2E\x20\x3A" "\x1F\x62\x4B\x65\x61\x74\x73\x20\x50\x75\x62\x2E\x2C\x1F\x63\x63" "\x31\x39\x38\x30\x2E\x1E\x20\x20\x1F\x61\x38\x31\x20\x70\x2E\x2C" "\x20\x5B\x35\x5D\x20\x6C\x65\x61\x76\x65\x73\x20\x6F\x66\x20\x70" "\x6C\x61\x74\x65\x73\x20\x3A\x1F\x62\x69\x6C\x6C\x2E\x20\x3B\x1F" "\x63\x32\x31\x20\x63\x6D\x2E\x1E\x20\x32\x1F\x61\x41\x20\x53\x68" "\x65\x70\x68\x65\x72\x64\x20\x69\x6C\x6C\x75\x73\x74\x72\x61\x74" "\x65\x64\x20\x63\x6C\x61\x73\x73\x69\x63\x1E\x30\x30\x1F\x61\x42" "\x69\x62\x6C\x65\x2E\x1F\x70\x4F\x2E\x54\x2E\x1F\x70\x50\x73\x61" "\x6C\x6D\x73\x20\x58\x58\x49\x49\x49\x1F\x78\x43\x72\x69\x74\x69" "\x63\x69\x73\x6D\x2C\x20\x69\x6E\x74\x65\x72\x70\x72\x65\x74\x61" "\x74\x69\x6F\x6E\x2C\x20\x65\x74\x63\x2E\x1E\x30\x30\x1F\x61\x42" "\x69\x62\x6C\x65\x2E\x1F\x70\x4F\x2E\x54\x2E\x1F\x70\x50\x73\x61" "\x6C\x6D\x73\x20\x58\x58\x58\x56\x49\x1F\x78\x43\x72\x69\x74\x69" "\x63\x69\x73\x6D\x2C\x20\x69\x6E\x74\x65\x72\x70\x72\x65\x74\x61" "\x74\x69\x6F\x6E\x2C\x20\x65\x74\x63\x2E\x1E\x30\x30\x1F\x61\x42" "\x69\x62\x6C\x65\x2E\x1F\x70\x4F\x2E\x54\x2E\x1F\x70\x50\x73\x61" "\x6C\x6D\x73\x20\x4C\x49\x49\x1F\x78\x43\x72\x69\x74\x69\x63\x69" "\x73\x6D\x2C\x20\x69\x6E\x74\x65\x72\x70\x72\x65\x74\x61\x74\x69" "\x6F\x6E\x2C\x20\x65\x74\x63\x2E\x1E\x30\x30\x1F\x61\x42\x69\x62" "\x6C\x65\x2E\x1F\x70\x4F\x2E\x54\x2E\x1F\x70\x50\x73\x61\x6C\x6D" "\x73\x20\x43\x58\x58\x49\x1F\x78\x43\x72\x69\x74\x69\x63\x69\x73" "\x6D\x2C\x20\x69\x6E\x74\x65\x72\x70\x72\x65\x74\x61\x74\x69\x6F" "\x6E\x2C\x20\x65\x74\x63\x2E\x1E\x30\x31\x1F\x61\x42\x69\x62\x6C" "\x65\x2E\x1F\x70\x4F\x2E\x54\x2E\x1F\x70\x50\x73\x61\x6C\x6D\x73" "\x20\x58\x58\x49\x49\x49\x2C\x20\x58\x58\x58\x56\x49\x2C\x20\x4C" "\x49\x49\x2C\x20\x43\x58\x58\x49\x2E\x1F\x6C\x45\x6E\x67\x6C\x69" "\x73\x68\x2E\x1E\x20\x20\x1F\x61\x20\x20\x20\x38\x30\x30\x38\x32" "\x33\x32\x39\x20\x1E\x1D" , "\x30\x31\x34\x33\x33\x6E\x61\x73\x20\x20\x32\x32\x30\x30\x34\x32" "\x31\x20\x61\x20\x34\x35\x30\x30\x30\x30\x31\x30\x30\x30\x39\x30" "\x30\x30\x30\x30\x30\x30\x33\x30\x30\x30\x34\x30\x30\x30\x30\x39" "\x30\x30\x35\x30\x30\x31\x37\x30\x30\x30\x31\x33\x30\x30\x38\x30" "\x30\x34\x31\x30\x30\x30\x33\x30\x30\x31\x30\x30\x30\x33\x31\x30" "\x30\x30\x37\x31\x30\x32\x32\x30\x30\x31\x34\x30\x30\x31\x30\x32" "\x30\x33\x30\x30\x30\x31\x31\x30\x30\x31\x31\x36\x30\x33\x32\x30" "\x30\x31\x37\x30\x30\x31\x32\x37\x30\x33\x35\x30\x30\x32\x30\x30" "\x30\x31\x34\x34\x30\x33\x35\x30\x30\x32\x37\x30\x30\x31\x36\x34" "\x30\x34\x30\x30\x30\x39\x36\x30\x30\x31\x39\x31\x30\x34\x32\x30" "\x30\x31\x33\x30\x30\x32\x38\x37\x30\x35\x30\x30\x30\x32\x30\x30" "\x30\x33\x30\x30\x30\x37\x30\x30\x30\x31\x38\x30\x30\x33\x32\x30" "\x30\x37\x32\x30\x30\x30\x39\x30\x30\x33\x33\x38\x30\x38\x32\x30" "\x30\x31\x34\x30\x30\x33\x34\x37\x32\x31\x30\x30\x30\x31\x39\x30" "\x30\x33\x36\x31\x32\x32\x32\x30\x30\x31\x39\x30\x30\x33\x38\x30" "\x32\x34\x35\x30\x30\x32\x30\x30\x30\x33\x39\x39\x32\x36\x30\x30" "\x30\x34\x33\x30\x30\x34\x31\x39\x32\x36\x35\x30\x30\x35\x38\x30" "\x30\x34\x36\x32\x33\x30\x30\x30\x30\x31\x37\x30\x30\x35\x32\x30" "\x33\x31\x30\x30\x30\x36\x32\x30\x30\x35\x33\x37\x33\x35\x30\x30" "\x30\x31\x31\x30\x30\x35\x39\x39\x33\x36\x32\x30\x30\x33\x32\x30" "\x30\x36\x31\x30\x35\x30\x30\x30\x30\x32\x34\x30\x30\x36\x34\x32" "\x36\x35\x30\x30\x30\x34\x36\x30\x30\x36\x36\x36\x36\x35\x30\x30" "\x30\x33\x36\x30\x30\x37\x31\x32\x36\x35\x30\x30\x30\x33\x39\x30" "\x30\x37\x34\x38\x36\x35\x30\x30\x30\x33\x35\x30\x30\x37\x38\x37" "\x36\x35\x30\x30\x30\x33\x33\x30\x30\x38\x32\x32\x37\x38\x30\x30" "\x30\x38\x32\x30\x30\x38\x35\x35\x38\x35\x30\x30\x30\x37\x34\x30" "\x30\x39\x33\x37\x1E\x41\x43\x44\x2D\x33\x38\x33\x37\x1E\x44\x4C" "\x43\x1E\x31\x39\x39\x34\x30\x36\x31\x34\x30\x36\x35\x36\x31\x34" "\x2E\x30\x1E\x39\x32\x30\x37\x32\x38\x63\x31\x39\x39\x32\x39\x39" "\x39\x39\x63\x74\x75\x6D\x6E\x31\x70\x20\x20\x20\x20\x20\x20\x20" "\x30\x20\x20\x20\x61\x30\x65\x6E\x67\x20\x64\x1E\x20\x20\x1F\x61" "\x20\x20\x20\x39\x32\x36\x34\x36\x30\x36\x32\x20\x1F\x7A\x73\x6E" "\x20\x39\x32\x30\x30\x34\x34\x33\x30\x20\x1E\x30\x20\x1F\x61\x31" "\x30\x36\x34\x2D\x33\x39\x32\x33\x1E\x20\x20\x1F\x61\x49\x45\x52" "\x4E\x45\x38\x1E\x20\x20\x1F\x61\x30\x30\x38\x31\x38\x37\x1F\x62" "\x55\x53\x50\x53\x1E\x20\x20\x1F\x61\x28\x4F\x43\x6F\x4C\x43\x29" "\x32\x36\x32\x37\x33\x32\x37\x35\x1E\x30\x30\x1F\x69\x6C\x63\x6D" "\x61\x72\x63\x2F\x41\x51\x50\x2D\x36\x32\x38\x35\x2F\x4A\x45\x41" "\x4E\x4E\x45\x1E\x20\x20\x1F\x61\x4E\x53\x44\x50\x1F\x63\x4E\x53" "\x44\x50\x1F\x64\x57\x61\x55\x1F\x64\x4E\x49\x43\x1F\x64\x44\x4E" "\x41\x4C\x1F\x64\x4F\x55\x43\x41\x1F\x64\x4E\x53\x54\x1F\x64\x44" "\x4C\x43\x1F\x64\x4E\x53\x54\x1F\x64\x4E\x53\x44\x50\x1F\x64\x4E" "\x53\x54\x1F\x64\x44\x4C\x43\x1F\x64\x49\x6E\x55\x1F\x64\x4D\x48" "\x1F\x64\x4E\x53\x44\x50\x1F\x64\x4E\x1F\x64\x44\x4C\x43\x1F\x64" "\x4D\x69\x55\x1E\x20\x20\x1F\x61\x6E\x73\x64\x70\x1F\x61\x6C\x63" "\x1E\x30\x30\x1F\x61\x54\x4B\x35\x31\x30\x35\x2E\x35\x1F\x62\x2E" "\x52\x34\x34\x38\x1E\x30\x20\x1F\x61\x54\x4B\x35\x31\x30\x35\x2E" "\x35\x2E\x52\x34\x34\x38\x1E\x20\x30\x1F\x61\x58\x32\x30\x30\x1E" "\x30\x30\x1F\x61\x33\x38\x34\x2E\x33\x1F\x32\x32\x30\x1E\x30\x20" "\x1F\x61\x49\x6E\x74\x65\x72\x6E\x65\x74\x20\x77\x6F\x72\x6C\x64" "\x1E\x20\x30\x1F\x61\x49\x6E\x74\x65\x72\x6E\x65\x74\x20\x77\x6F" "\x72\x6C\x64\x1E\x30\x30\x1F\x61\x49\x6E\x74\x65\x72\x6E\x65\x74" "\x20\x77\x6F\x72\x6C\x64\x2E\x1E\x20\x20\x1F\x61\x57\x65\x73\x74" "\x70\x6F\x72\x74\x2C\x20\x43\x54\x20\x3A\x1F\x62\x4D\x65\x63\x6B" "\x6C\x65\x72\x20\x43\x6F\x72\x70\x2E\x2C\x1F\x63\x63\x31\x39\x39" "\x32\x2D\x1E\x20\x20\x1F\x61\x4D\x65\x63\x6B\x6C\x65\x72\x20\x43" "\x6F\x72\x70\x2E\x2C\x20\x31\x31\x20\x46\x65\x72\x72\x79\x20\x4C" "\x61\x6E\x65\x20\x57\x65\x73\x74\x2C\x20\x57\x65\x73\x74\x70\x6F" "\x72\x74\x2C\x20\x43\x54\x20\x30\x36\x38\x38\x30\x1E\x20\x20\x1F" "\x61\x76\x2E\x20\x3B\x1F\x63\x32\x38\x20\x63\x6D\x2E\x1E\x20\x20" "\x1F\x61\x4D\x6F\x6E\x74\x68\x6C\x79\x20\x28\x65\x78\x63\x65\x70" "\x74\x20\x4A\x61\x6E\x2E\x2F\x46\x65\x62\x2E\x2C\x20\x4A\x75\x6C" "\x79\x2F\x41\x75\x67\x2E\x2C\x20\x4E\x6F\x76\x2E\x2F\x44\x65\x63" "\x2E\x20\x63\x6F\x6D\x62\x69\x6E\x65\x64\x29\x1E\x20\x20\x1F\x61" "\x24\x39\x37\x2E\x30\x30\x1E\x30\x20\x1F\x61\x56\x6F\x6C\x2E\x20" "\x33\x2C\x20\x6E\x6F\x2E\x20\x37\x20\x28\x53\x65\x70\x74\x2E\x20" "\x31\x39\x39\x32\x29\x2D\x1E\x20\x20\x1F\x61\x54\x69\x74\x6C\x65" "\x20\x66\x72\x6F\x6D\x20\x63\x61\x70\x74\x69\x6F\x6E\x2E\x1E\x20" "\x30\x1F\x61\x49\x6E\x74\x65\x72\x6E\x65\x74\x20\x28\x43\x6F\x6D" "\x70\x75\x74\x65\x72\x20\x6E\x65\x74\x77\x6F\x72\x6B\x29\x1F\x78" "\x50\x65\x72\x69\x6F\x64\x69\x63\x61\x6C\x73\x2E\x1E\x20\x30\x1F" "\x61\x43\x6F\x6D\x70\x75\x74\x65\x72\x20\x6E\x65\x74\x77\x6F\x72" "\x6B\x73\x1F\x78\x50\x65\x72\x69\x6F\x64\x69\x63\x61\x6C\x73\x2E" "\x1E\x20\x30\x1F\x61\x49\x6E\x66\x6F\x72\x6D\x61\x74\x69\x6F\x6E" "\x20\x6E\x65\x74\x77\x6F\x72\x6B\x73\x1F\x78\x50\x65\x72\x69\x6F" "\x64\x69\x63\x61\x6C\x73\x2E\x1E\x20\x32\x1F\x61\x43\x6F\x6D\x70" "\x75\x74\x65\x72\x20\x53\x79\x73\x74\x65\x6D\x73\x1F\x78\x70\x65" "\x72\x69\x6F\x64\x69\x63\x61\x6C\x73\x2E\x1E\x20\x32\x1F\x61\x4F" "\x6E\x6C\x69\x6E\x65\x20\x53\x79\x73\x74\x65\x6D\x73\x1F\x78\x70" "\x65\x72\x69\x6F\x64\x69\x63\x61\x6C\x73\x2E\x1E\x30\x30\x1F\x74" "\x52\x65\x73\x65\x61\x72\x63\x68\x20\x26\x20\x65\x64\x75\x63\x61" "\x74\x69\x6F\x6E\x20\x6E\x65\x74\x77\x6F\x72\x6B\x69\x6E\x67\x1F" "\x78\x31\x30\x35\x31\x2D\x34\x37\x39\x31\x1F\x77\x28\x44\x4C\x43" "\x29\x20\x20\x20\x39\x30\x36\x34\x36\x36\x31\x33\x1F\x77\x28\x4F" "\x43\x6F\x4C\x43\x29\x32\x31\x39\x37\x34\x34\x34\x38\x1E\x20\x20" "\x1F\x61\x44\x4C\x43\x1F\x61\x44\x4E\x41\x4C\x1F\x61\x44\x4E\x47" "\x41\x1F\x61\x49\x6E\x55\x1F\x61\x4D\x42\x43\x6F\x1F\x61\x4D\x48" "\x2D\x45\x64\x1F\x61\x4D\x64\x42\x4A\x1F\x61\x4D\x69\x55\x1F\x61" "\x4D\x6F\x4B\x4C\x1F\x61\x4E\x1F\x61\x4E\x49\x43\x1F\x61\x54\x78" "\x48\x52\x1F\x61\x57\x61\x55\x1E\x1D" , "\x30\x31\x33\x33\x30\x6E\x61\x73\x20\x20\x32\x32\x30\x30\x33\x37" "\x33\x35\x61\x20\x34\x35\x30\x30\x30\x30\x31\x30\x30\x30\x39\x30" "\x30\x30\x30\x30\x30\x30\x33\x30\x30\x30\x34\x30\x30\x30\x30\x39" "\x30\x30\x35\x30\x30\x31\x37\x30\x30\x30\x31\x33\x30\x30\x38\x30" "\x30\x34\x31\x30\x30\x30\x33\x30\x30\x31\x30\x30\x30\x31\x37\x30" "\x30\x30\x37\x31\x30\x32\x32\x30\x30\x32\x35\x30\x30\x30\x38\x38" "\x30\x33\x35\x30\x30\x32\x30\x30\x30\x31\x31\x33\x30\x33\x35\x30" "\x30\x32\x37\x30\x30\x31\x33\x33\x30\x34\x30\x30\x30\x32\x39\x30" "\x30\x31\x36\x30\x30\x34\x32\x30\x30\x31\x36\x30\x30\x31\x38\x39" "\x30\x34\x33\x30\x30\x31\x32\x30\x30\x32\x30\x35\x30\x35\x35\x30" "\x30\x31\x32\x30\x30\x32\x31\x37\x30\x38\x32\x30\x30\x31\x32\x30" "\x30\x32\x32\x39\x31\x33\x30\x30\x30\x33\x35\x30\x30\x32\x34\x31" "\x32\x31\x30\x30\x30\x32\x37\x30\x30\x32\x37\x36\x32\x32\x32\x30" "\x30\x32\x39\x30\x30\x33\x30\x33\x32\x34\x35\x30\x30\x31\x37\x30" "\x30\x33\x33\x32\x32\x36\x30\x30\x30\x35\x34\x30\x30\x33\x34\x39" "\x32\x36\x35\x30\x30\x36\x39\x30\x30\x34\x30\x33\x33\x30\x30\x30" "\x30\x32\x35\x30\x30\x34\x37\x32\x33\x31\x30\x30\x30\x31\x32\x30" "\x30\x34\x39\x37\x33\x35\x30\x30\x30\x32\x31\x30\x30\x35\x30\x39" "\x33\x36\x32\x30\x30\x33\x33\x30\x30\x35\x33\x30\x35\x30\x30\x30" "\x30\x32\x34\x30\x30\x35\x36\x33\x35\x38\x30\x30\x30\x35\x38\x30" "\x30\x35\x38\x37\x37\x38\x30\x30\x30\x38\x33\x30\x30\x36\x34\x35" "\x37\x38\x30\x30\x30\x35\x31\x30\x30\x37\x32\x38\x37\x38\x35\x30" "\x30\x38\x33\x30\x30\x37\x37\x39\x37\x38\x37\x30\x30\x39\x34\x30" "\x30\x38\x36\x32\x1E\x41\x43\x44\x2D\x33\x37\x39\x39\x1E\x44\x4C" "\x43\x1E\x31\x39\x39\x34\x30\x36\x31\x34\x30\x39\x30\x35\x31\x34" "\x2E\x30\x1E\x39\x32\x30\x37\x32\x33\x63\x31\x39\x39\x31\x39\x39" "\x39\x39\x6F\x6E\x63\x6D\x72\x34\x70\x20\x20\x20\x20\x20\x20\x20" "\x30\x20\x20\x20\x61\x30\x65\x6E\x67\x20\x64\x1E\x20\x20\x1F\x61" "\x63\x6E\x20\x39\x32\x30\x33\x31\x36\x34\x31\x20\x1E\x30\x20\x1F" "\x61\x31\x31\x38\x37\x2D\x37\x30\x38\x31\x1F\x79\x30\x30\x32\x35" "\x2D\x39\x35\x33\x35\x1E\x20\x20\x1F\x61\x28\x4F\x43\x6F\x4C\x43" "\x29\x32\x36\x32\x34\x34\x38\x34\x34\x1E\x30\x30\x1F\x69\x6C\x63" "\x6D\x61\x72\x63\x2F\x41\x51\x46\x2D\x32\x38\x39\x36\x2F\x4A\x45" "\x41\x4E\x4E\x45\x1E\x20\x20\x1F\x61\x43\x61\x4F\x4F\x43\x4D\x1F" "\x62\x65\x6E\x67\x1F\x63\x43\x61\x4F\x4F\x4E\x4C\x1F\x64\x49\x6E" "\x55\x1E\x20\x20\x1F\x61\x6E\x6C\x63\x1F\x61\x69\x73\x64\x73\x2F" "\x63\x1E\x20\x20\x1F\x61\x6E\x2D\x63\x6E\x2D\x2D\x2D\x1E\x20\x32" "\x1F\x61\x48\x44\x39\x36\x39\x36\x2A\x1E\x31\x20\x1F\x61\x30\x30" "\x34\x1F\x32\x31\x32\x1E\x30\x20\x1F\x61\x49\x6E\x66\x6F\x20\x43" "\x61\x6E\x61\x64\x61\x20\x28\x44\x6F\x77\x6E\x73\x76\x69\x65\x77" "\x2C\x20\x4F\x6E\x74\x2E\x29\x2E\x1E\x30\x20\x1F\x61\x49\x6E\x66" "\x6F\x20\x43\x61\x6E\x2E\x1F\x62\x28\x44\x6F\x77\x6E\x73\x76\x69" "\x65\x77\x29\x1E\x20\x30\x1F\x61\x49\x6E\x66\x6F\x20\x43\x61\x6E" "\x61\x64\x61\x1F\x62\x28\x44\x6F\x77\x6E\x73\x76\x69\x65\x77\x29" "\x1E\x30\x30\x1F\x61\x49\x6E\x66\x6F\x20\x43\x61\x6E\x61\x64\x61" "\x2E\x1E\x20\x20\x1F\x61\x44\x6F\x77\x6E\x73\x76\x69\x65\x77\x2C" "\x20\x4F\x6E\x74\x2E\x20\x3A\x1F\x62\x4C\x61\x75\x72\x65\x6E\x74" "\x69\x61\x6E\x20\x54\x65\x63\x68\x6E\x6F\x6D\x65\x64\x69\x61\x2C" "\x1F\x63\x31\x39\x39\x31\x2D\x1E\x20\x20\x1F\x61\x4C\x61\x75\x72" "\x65\x6E\x74\x69\x61\x6E\x20\x54\x65\x63\x68\x6E\x6F\x6D\x65\x64" "\x69\x61\x2C\x20\x35\x30\x31\x20\x4F\x61\x6B\x64\x61\x6C\x65\x20" "\x52\x64\x2E\x2C\x20\x44\x6F\x77\x6E\x73\x76\x69\x65\x77\x2C\x20" "\x4F\x6E\x74\x2E\x20\x4D\x33\x4E\x20\x31\x57\x37\x1E\x20\x20\x1F" "\x61\x76\x2E\x20\x3A\x1F\x62\x69\x6C\x6C\x2E\x20\x3B\x1F\x63\x34" "\x30\x20\x63\x6D\x2E\x1E\x20\x20\x1F\x61\x4D\x6F\x6E\x74\x68\x6C" "\x79\x1E\x20\x20\x1F\x61\x24\x35\x30\x2E\x30\x30\x20\x70\x65\x72" "\x20\x79\x65\x61\x72\x2E\x1E\x30\x20\x1F\x61\x56\x6F\x6C\x2E\x20" "\x31\x36\x2C\x20\x6E\x6F\x2E\x20\x39\x20\x28\x53\x65\x70\x74\x2E" "\x20\x31\x39\x39\x31\x29\x2D\x1E\x20\x20\x1F\x61\x54\x69\x74\x6C" "\x65\x20\x66\x72\x6F\x6D\x20\x63\x61\x70\x74\x69\x6F\x6E\x2E\x1E" "\x20\x20\x1F\x61\x49\x6E\x63\x6C\x75\x64\x65\x73\x3A\x20\x4E\x65" "\x74\x77\x6F\x72\x6B\x20\x77\x6F\x72\x6C\x64\x20\x43\x61\x6E\x61" "\x64\x61\x2C\x20\x53\x65\x70\x74\x2E\x20\x31\x39\x39\x31\x2D\x4A" "\x61\x6E\x2E\x20\x31\x39\x39\x32\x2E\x1E\x30\x30\x1F\x74\x43\x6F" "\x6D\x70\x75\x74\x65\x72\x20\x64\x61\x74\x61\x1F\x78\x30\x33\x38" "\x33\x2D\x37\x33\x31\x39\x1F\x77\x28\x43\x61\x4F\x4F\x4E\x4C\x29" "\x37\x37\x30\x33\x30\x38\x33\x31\x37\x1F\x77\x28\x4F\x43\x6F\x4C" "\x43\x29\x31\x31\x34\x31\x36\x34\x37\x39\x1F\x77\x28\x44\x4C\x43" "\x29\x63\x6E\x20\x37\x37\x30\x33\x30\x38\x33\x31\x1E\x30\x35\x1F" "\x74\x49\x2E\x54\x2E\x20\x6D\x61\x67\x61\x7A\x69\x6E\x65\x20\x28" "\x54\x6F\x72\x6F\x6E\x74\x6F\x2C\x20\x4F\x6E\x74\x2E\x29\x1F\x77" "\x28\x4F\x43\x6F\x4C\x43\x29\x32\x37\x36\x39\x39\x30\x36\x36\x1E" "\x30\x31\x1F\x74\x4E\x65\x74\x77\x6F\x72\x6B\x20\x77\x6F\x72\x6C" "\x64\x20\x43\x61\x6E\x61\x64\x61\x1F\x67\x46\x65\x62\x2E\x20\x31" "\x39\x39\x32\x1F\x78\x31\x31\x38\x37\x2D\x32\x39\x38\x35\x1F\x77" "\x28\x4F\x43\x6F\x4C\x43\x29\x32\x35\x33\x31\x34\x30\x31\x32\x1F" "\x77\x28\x43\x61\x4F\x4F\x4E\x4C\x29\x39\x32\x30\x33\x30\x35\x37" "\x32\x35\x1E\x31\x20\x1F\x74\x4E\x65\x74\x77\x6F\x72\x6B\x20\x77" "\x6F\x72\x6C\x64\x20\x43\x61\x6E\x61\x64\x61\x1F\x67\x53\x65\x70" "\x74\x2E\x20\x31\x39\x39\x31\x2D\x4A\x61\x6E\x2E\x20\x31\x39\x39" "\x32\x1F\x78\x31\x31\x38\x37\x2D\x32\x39\x38\x35\x1F\x77\x28\x4F" "\x43\x6F\x4C\x43\x29\x32\x35\x33\x31\x34\x30\x31\x32\x1F\x77\x28" "\x43\x61\x4F\x4F\x4E\x4C\x29\x39\x32\x30\x33\x30\x35\x37\x32\x35" "\x1E\x1D" , "\x30\x30\x38\x30\x33\x6E\x61\x6D\x20\x20\x32\x32\x30\x30\x32\x38" "\x39\x38\x61\x20\x34\x35\x30\x30\x30\x30\x31\x30\x30\x30\x39\x30" "\x30\x30\x30\x30\x30\x30\x33\x30\x30\x30\x34\x30\x30\x30\x30\x39" "\x30\x30\x35\x30\x30\x31\x37\x30\x30\x30\x31\x33\x30\x30\x38\x30" "\x30\x34\x31\x30\x30\x30\x33\x30\x30\x31\x30\x30\x30\x31\x37\x30" "\x30\x30\x37\x31\x30\x32\x30\x30\x30\x31\x35\x30\x30\x30\x38\x38" "\x30\x33\x35\x30\x30\x32\x37\x30\x30\x31\x30\x33\x30\x34\x30\x30" "\x30\x31\x33\x30\x30\x31\x33\x30\x30\x34\x33\x30\x30\x31\x32\x30" "\x30\x31\x34\x33\x30\x35\x30\x30\x30\x32\x38\x30\x30\x31\x35\x35" "\x30\x38\x32\x30\x30\x31\x38\x30\x30\x31\x38\x33\x31\x30\x30\x30" "\x30\x32\x35\x30\x30\x32\x30\x31\x32\x34\x35\x30\x30\x39\x35\x30" "\x30\x32\x32\x36\x32\x35\x30\x30\x30\x31\x32\x30\x30\x33\x32\x31" "\x32\x36\x30\x30\x30\x33\x34\x30\x30\x33\x33\x33\x32\x36\x33\x30" "\x30\x30\x39\x30\x30\x33\x36\x37\x33\x30\x30\x30\x30\x31\x31\x30" "\x30\x33\x37\x36\x35\x30\x30\x30\x30\x32\x30\x30\x30\x33\x38\x37" "\x36\x33\x30\x30\x30\x33\x38\x30\x30\x34\x30\x37\x36\x30\x30\x30" "\x30\x32\x32\x30\x30\x34\x34\x35\x36\x30\x30\x30\x30\x31\x35\x30" "\x30\x34\x36\x37\x36\x35\x30\x30\x30\x33\x31\x30\x30\x34\x38\x32" "\x1E\x41\x43\x44\x2D\x33\x37\x39\x32\x1E\x44\x4C\x43\x1E\x31\x39" "\x39\x33\x31\x32\x31\x35\x30\x38\x34\x36\x30\x35\x2E\x37\x1E\x39" "\x33\x31\x32\x30\x36\x73\x31\x39\x39\x33\x20\x20\x20\x20\x6E\x79" "\x75\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x30\x30\x31\x20" "\x30\x20\x65\x6E\x67\x20\x20\x1E\x20\x20\x1F\x61\x20\x20\x20\x39" "\x33\x30\x34\x37\x39\x39\x32\x20\x1E\x20\x20\x1F\x61\x31\x35\x36" "\x32\x38\x32\x37\x35\x34\x35\x1E\x30\x30\x1F\x69\x6C\x63\x6D\x61" "\x72\x63\x2F\x41\x52\x55\x2D\x32\x33\x36\x34\x2F\x53\x54\x45\x56" "\x45\x53\x1E\x20\x20\x1F\x61\x44\x4C\x43\x1F\x63\x44\x4C\x43\x1E" "\x20\x20\x1F\x61\x6E\x2D\x75\x73\x2D\x2D\x2D\x1E\x30\x30\x1F\x61" "\x50\x4E\x31\x39\x39\x32\x2E\x37\x37\x2E\x54\x36\x33\x1F\x62\x43" "\x33\x37\x20\x31\x39\x39\x33\x1E\x30\x30\x1F\x61\x37\x39\x31\x2E" "\x34\x35\x2F\x37\x32\x1F\x32\x32\x30\x1E\x31\x20\x1F\x61\x43\x61" "\x72\x74\x65\x72\x2C\x20\x42\x69\x6C\x6C\x2C\x1F\x64\x31\x39\x34" "\x39\x2D\x1E\x31\x34\x1F\x61\x54\x68\x65\x20\x6C\x61\x74\x65\x20" "\x73\x68\x69\x66\x74\x20\x3A\x1F\x62\x4C\x65\x74\x74\x65\x72\x6D" "\x61\x6E\x2C\x20\x4C\x65\x6E\x6F\x2C\x20\x61\x6E\x64\x20\x74\x68" "\x65\x20\x6E\x65\x74\x77\x6F\x72\x6B\x20\x62\x61\x74\x74\x6C\x65" "\x20\x66\x6F\x72\x20\x74\x68\x65\x20\x6E\x69\x67\x68\x74\x20\x2F" "\x1F\x63\x62\x79\x20\x42\x69\x6C\x6C\x20\x43\x61\x72\x74\x65\x72" "\x2E\x1E\x20\x20\x1F\x61\x31\x73\x74\x20\x65\x64\x2E\x1E\x20\x20" "\x1F\x61\x4E\x65\x77\x20\x59\x6F\x72\x6B\x20\x3A\x1F\x62\x48\x79" "\x70\x65\x72\x69\x6F\x6E\x2C\x1F\x63\x63\x31\x39\x39\x33\x2E\x1E" "\x20\x20\x1F\x61\x39\x34\x30\x32\x1E\x20\x20\x1F\x61\x70\x2E\x20" "\x63\x6D\x2E\x1E\x20\x20\x1F\x61\x49\x6E\x63\x6C\x75\x64\x65\x73" "\x20\x69\x6E\x64\x65\x78\x2E\x1E\x30\x30\x1F\x61\x54\x6F\x6E\x69" "\x67\x68\x74\x20\x73\x68\x6F\x77\x20\x28\x54\x65\x6C\x65\x76\x69" "\x73\x69\x6F\x6E\x20\x70\x72\x6F\x67\x72\x61\x6D\x29\x1E\x31\x30" "\x1F\x61\x4C\x65\x74\x74\x65\x72\x6D\x61\x6E\x2C\x20\x44\x61\x76" "\x69\x64\x2E\x1E\x31\x30\x1F\x61\x4C\x65\x6E\x6F\x2C\x20\x4A\x61" "\x79\x2E\x1E\x20\x30\x1F\x61\x54\x61\x6C\x6B\x20\x73\x68\x6F\x77" "\x73\x1F\x7A\x55\x6E\x69\x74\x65\x64\x20\x53\x74\x61\x74\x65\x73" "\x2E\x1E\x1D" , "\x30\x30\x37\x36\x36\x6E\x61\x6D\x20\x20\x32\x32\x30\x30\x32\x36" "\x35\x38\x61\x20\x34\x35\x30\x30\x30\x30\x31\x30\x30\x30\x39\x30" "\x30\x30\x30\x30\x30\x30\x35\x30\x30\x31\x37\x30\x30\x30\x30\x39" "\x30\x30\x38\x30\x30\x34\x31\x30\x30\x30\x32\x36\x30\x31\x30\x30" "\x30\x31\x37\x30\x30\x30\x36\x37\x30\x32\x30\x30\x30\x31\x35\x30" "\x30\x30\x38\x34\x30\x33\x35\x30\x30\x32\x39\x30\x30\x30\x39\x39" "\x30\x34\x30\x30\x30\x31\x33\x30\x30\x31\x32\x38\x30\x35\x30\x30" "\x30\x32\x39\x30\x30\x31\x34\x31\x30\x38\x32\x30\x30\x31\x36\x30" "\x30\x31\x37\x30\x32\x34\x35\x30\x30\x37\x36\x30\x30\x31\x38\x36" "\x32\x35\x30\x30\x30\x31\x36\x30\x30\x32\x36\x32\x32\x36\x30\x30" "\x30\x35\x36\x30\x30\x32\x37\x38\x32\x36\x33\x30\x30\x30\x39\x30" "\x30\x33\x33\x34\x33\x30\x30\x30\x30\x31\x31\x30\x30\x33\x34\x33" "\x34\x34\x30\x30\x30\x33\x32\x30\x30\x33\x35\x34\x35\x30\x30\x30" "\x30\x32\x30\x30\x30\x33\x38\x36\x36\x35\x30\x30\x30\x33\x32\x30" "\x30\x34\x30\x36\x36\x35\x30\x30\x30\x31\x39\x30\x30\x34\x33\x38" "\x37\x30\x30\x30\x30\x32\x35\x30\x30\x34\x35\x37\x37\x30\x30\x30" "\x30\x31\x38\x30\x30\x34\x38\x32\x1E\x41\x43\x44\x2D\x33\x36\x36" "\x35\x1E\x31\x39\x39\x33\x30\x37\x33\x30\x30\x39\x32\x30\x30\x34" "\x2E\x31\x1E\x39\x33\x30\x37\x32\x31\x73\x31\x39\x39\x33\x20\x20" "\x20\x20\x6E\x6A\x75\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20" "\x30\x30\x31\x20\x30\x20\x65\x6E\x67\x20\x20\x1E\x20\x20\x1F\x61" "\x20\x20\x20\x39\x33\x30\x33\x30\x37\x37\x35\x20\x1E\x20\x20\x1F" "\x61\x30\x31\x33\x32\x38\x39\x36\x36\x31\x33\x1E\x30\x30\x1F\x69" "\x6C\x63\x6D\x61\x72\x63\x2F\x41\x52\x49\x2D\x33\x38\x30\x34\x2F" "\x4A\x55\x4C\x49\x41\x4E\x4E\x45\x1E\x20\x20\x1F\x61\x44\x4C\x43" "\x1F\x63\x44\x4C\x43\x1E\x30\x30\x1F\x61\x54\x4B\x35\x31\x30\x35" "\x2E\x38\x37\x35\x2E\x49\x35\x37\x1F\x62\x49\x35\x36\x20\x31\x39" "\x39\x33\x1E\x30\x30\x1F\x61\x33\x38\x34\x2E\x33\x2F\x34\x1F\x32" "\x32\x30\x1E\x30\x30\x1F\x61\x49\x6E\x74\x65\x72\x6E\x65\x74\x20" "\x3A\x1F\x62\x6D\x61\x69\x6C\x69\x6E\x67\x20\x6C\x69\x73\x74\x73" "\x20\x2F\x1F\x63\x65\x64\x69\x74\x65\x64\x20\x62\x79\x20\x45\x64" "\x77\x61\x72\x64\x20\x54\x2E\x4C\x2E\x20\x48\x61\x72\x64\x69\x65" "\x2C\x20\x56\x69\x76\x69\x61\x6E\x20\x4E\x65\x6F\x75\x2E\x1E\x20" "\x20\x1F\x61\x55\x70\x64\x61\x74\x65\x64\x20\x65\x64\x2E\x1E\x20" "\x20\x1F\x61\x45\x6E\x67\x6C\x65\x77\x6F\x6F\x64\x20\x43\x6C\x69" "\x66\x66\x73\x2C\x20\x4E\x2E\x4A\x2E\x20\x3A\x1F\x62\x50\x54\x52" "\x20\x50\x72\x65\x6E\x74\x69\x63\x65\x20\x48\x61\x6C\x6C\x2C\x1F" "\x63\x31\x39\x39\x33\x2E\x1E\x20\x20\x1F\x61\x39\x33\x30\x38\x1E" "\x20\x20\x1F\x61\x70\x2E\x20\x63\x6D\x2E\x1E\x20\x30\x1F\x61\x49" "\x6E\x74\x65\x72\x6E\x65\x74\x20\x69\x6E\x66\x6F\x72\x6D\x61\x74" "\x69\x6F\x6E\x20\x73\x65\x72\x69\x65\x73\x1E\x20\x20\x1F\x61\x49" "\x6E\x63\x6C\x75\x64\x65\x73\x20\x69\x6E\x64\x65\x78\x2E\x1E\x20" "\x30\x1F\x61\x49\x6E\x74\x65\x72\x6E\x65\x74\x20\x28\x43\x6F\x6D" "\x70\x75\x74\x65\x72\x20\x6E\x65\x74\x77\x6F\x72\x6B\x29\x1E\x20" "\x30\x1F\x61\x4D\x61\x69\x6C\x69\x6E\x67\x20\x6C\x69\x73\x74\x73" "\x2E\x1E\x31\x30\x1F\x61\x48\x61\x72\x64\x69\x65\x2C\x20\x45\x64" "\x77\x61\x72\x64\x20\x54\x2E\x20\x4C\x2E\x1E\x31\x30\x1F\x61\x4E" "\x65\x6F\x75\x2C\x20\x56\x69\x76\x69\x61\x6E\x2E\x1E\x1D" , "\x30\x31\x33\x32\x34\x6E\x61\x6D\x20\x20\x32\x32\x30\x30\x32\x38" "\x39\x49\x61\x20\x34\x35\x30\x30\x30\x30\x31\x30\x30\x30\x39\x30" "\x30\x30\x30\x30\x30\x30\x38\x30\x30\x34\x31\x30\x30\x30\x30\x39" "\x30\x30\x35\x30\x30\x31\x37\x30\x30\x30\x35\x30\x30\x31\x30\x30" "\x30\x31\x33\x30\x30\x30\x36\x37\x30\x33\x37\x30\x30\x32\x33\x30" "\x30\x30\x38\x30\x30\x34\x33\x30\x30\x31\x32\x30\x30\x31\x30\x33" "\x30\x37\x34\x30\x30\x31\x39\x30\x30\x31\x31\x35\x30\x38\x36\x30" "\x30\x32\x32\x30\x30\x31\x33\x34\x30\x34\x39\x30\x30\x30\x39\x30" "\x30\x31\x35\x36\x32\x34\x35\x30\x30\x36\x32\x30\x30\x31\x36\x35" "\x32\x36\x30\x30\x31\x34\x35\x30\x30\x32\x32\x37\x33\x30\x30\x30" "\x30\x32\x35\x30\x30\x33\x37\x32\x35\x30\x30\x30\x30\x38\x30\x30" "\x30\x33\x39\x37\x35\x30\x30\x30\x32\x32\x31\x30\x30\x34\x37\x37" "\x35\x30\x30\x30\x30\x35\x35\x30\x30\x36\x39\x38\x35\x30\x30\x30" "\x30\x32\x31\x30\x30\x37\x35\x33\x35\x30\x30\x30\x30\x32\x32\x30" "\x30\x37\x37\x34\x36\x31\x30\x30\x30\x36\x31\x30\x30\x37\x39\x36" "\x36\x35\x30\x30\x30\x34\x33\x30\x30\x38\x35\x37\x36\x35\x30\x30" "\x30\x34\x35\x30\x30\x39\x30\x30\x37\x30\x30\x30\x30\x32\x31\x30" "\x30\x39\x34\x35\x37\x31\x30\x30\x30\x36\x38\x30\x30\x39\x36\x36" "\x1E\x41\x43\x44\x2D\x32\x37\x32\x38\x1E\x39\x31\x30\x35\x31\x34" "\x73\x31\x39\x38\x34\x20\x20\x20\x20\x6E\x79\x75\x20\x20\x20\x20" "\x20\x20\x72\x20\x20\x20\x66\x30\x30\x31\x30\x30\x20\x65\x6E\x67" "\x20\x64\x1E\x31\x39\x39\x31\x30\x35\x31\x39\x31\x34\x34\x35\x35" "\x31\x2E\x30\x1E\x20\x20\x1F\x6F\x32\x33\x37\x34\x30\x30\x30\x32" "\x1E\x20\x20\x1F\x61\x45\x44\x20\x45\x44\x20\x32\x38\x39\x34\x35" "\x39\x1F\x62\x45\x52\x49\x43\x1E\x20\x20\x1F\x61\x6E\x2D\x75\x73" "\x2D\x2D\x2D\x1E\x20\x20\x1F\x61\x30\x34\x36\x36\x2D\x41\x2D\x30" "\x33\x20\x28\x4D\x46\x29\x1E\x30\x20\x1F\x61\x45\x44\x20\x31\x2E" "\x33\x31\x30\x2F\x32\x3A\x32\x38\x39\x34\x35\x39\x1E\x20\x20\x1F" "\x61\x44\x52\x55\x47\x1E\x30\x30\x1F\x61\x54\x65\x63\x68\x6E\x6F" "\x6C\x6F\x67\x79\x20\x70\x72\x6F\x67\x72\x61\x6D\x73\x20\x74\x68" "\x61\x74\x20\x77\x6F\x72\x6B\x20\x2F\x1F\x63\x4D\x69\x63\x68\x61" "\x65\x6C\x20\x42\x2E\x20\x57\x65\x62\x62\x2C\x20\x65\x64\x69\x74" "\x6F\x72\x2E\x1E\x30\x20\x1F\x61\x4E\x65\x77\x20\x59\x6F\x72\x6B" "\x2C\x20\x4E\x2E\x59\x2E\x20\x3A\x1F\x62\x54\x65\x63\x68\x6E\x6F" "\x6C\x6F\x67\x79\x20\x66\x6F\x72\x20\x74\x68\x65\x20\x4E\x44\x4E" "\x20\x50\x72\x6F\x6A\x65\x63\x74\x2C\x20\x49\x6E\x73\x74\x69\x74" "\x75\x74\x65\x20\x66\x6F\x72\x20\x55\x72\x62\x61\x6E\x20\x61\x6E" "\x64\x20\x4D\x69\x6E\x6F\x72\x69\x74\x79\x20\x45\x64\x75\x63\x61" "\x74\x69\x6F\x6E\x2C\x20\x54\x65\x61\x63\x68\x65\x72\x73\x20\x43" "\x6F\x6C\x6C\x65\x67\x65\x2C\x20\x43\x6F\x6C\x75\x6D\x62\x69\x61" "\x20\x55\x6E\x69\x76\x65\x72\x73\x69\x74\x79\x2C\x1F\x63\x5B\x31" "\x39\x38\x34\x5D\x1E\x20\x20\x1F\x61\x37\x32\x2C\x20\x5B\x31\x5D" "\x20\x70\x2E\x20\x3B\x1F\x63\x32\x38\x20\x63\x6D\x2E\x1E\x20\x20" "\x1F\x61\x22\x53\x70\x6F\x6E\x73\x20\x61\x67\x65\x6E\x63\x79\x20" "\x4F\x66\x66\x69\x63\x65\x20\x6F\x66\x20\x45\x64\x75\x63\x61\x74" "\x69\x6F\x6E\x61\x6C\x20\x52\x65\x73\x65\x61\x72\x63\x68\x20\x61" "\x6E\x64\x20\x49\x6D\x70\x72\x6F\x76\x65\x6D\x65\x6E\x74\x22\x2D" "\x2D\x44\x6F\x63\x2E\x20\x72\x65\x73\x75\x6D\x65\x2E\x1E\x20\x20" "\x1F\x61\x22\x54\x68\x69\x73\x20\x64\x69\x72\x65\x63\x74\x6F\x72" "\x79\x20\x77\x61\x73\x20\x64\x65\x76\x65\x6C\x6F\x70\x65\x64\x20" "\x62\x79\x20\x74\x68\x65\x20\x54\x65\x63\x68\x6E\x6F\x6C\x6F\x67" "\x79\x20\x66\x6F\x72\x20\x74\x68\x65\x20\x4E\x61\x74\x69\x6F\x6E" "\x61\x6C\x20\x44\x69\x66\x66\x75\x73\x69\x6F\x6E\x20\x4E\x65\x74" "\x77\x6F\x72\x6B\x20\x50\x72\x6F\x6A\x65\x63\x74\x2C\x20\x54\x65" "\x61\x63\x68\x65\x72\x73\x20\x43\x6F\x6C\x6C\x65\x67\x65\x2C\x20" "\x43\x6F\x6C\x75\x6D\x62\x69\x61\x20\x55\x6E\x69\x76\x65\x72\x73" "\x69\x74\x79\x20\x70\x75\x72\x73\x75\x61\x6E\x74\x20\x74\x6F\x20" "\x63\x6F\x6E\x74\x72\x61\x63\x74\x20\x6E\x75\x6D\x62\x65\x72\x20" "\x4F\x45\x2D\x33\x30\x30\x2D\x38\x33\x2D\x30\x32\x35\x33\x2C\x20" "\x55\x2E\x53\x2E\x20\x44\x65\x70\x61\x72\x74\x6D\x65\x6E\x74\x20" "\x6F\x66\x20\x45\x64\x75\x63\x61\x74\x69\x6F\x6E\x22\x2D\x2D\x54" "\x2E\x70\x2E\x20\x76\x65\x72\x73\x6F\x2E\x1E\x20\x20\x1F\x61\x44" "\x69\x73\x74\x72\x69\x62\x75\x74\x65\x64\x20\x74\x6F\x20\x64\x65" "\x70\x6F\x73\x69\x74\x6F\x72\x79\x20\x6C\x69\x62\x72\x61\x72\x69" "\x65\x73\x20\x69\x6E\x20\x6D\x69\x63\x72\x6F\x66\x69\x63\x68\x65" "\x2E\x1E\x20\x20\x1F\x61\x22\x44\x65\x63\x65\x6D\x62\x65\x72\x20" "\x31\x39\x38\x34\x2E\x22\x1E\x20\x20\x1F\x61\x49\x6E\x63\x6C\x75" "\x64\x65\x73\x20\x69\x6E\x64\x65\x78\x65\x73\x2E\x1E\x31\x30\x1F" "\x61\x55\x6E\x69\x74\x65\x64\x20\x53\x74\x61\x74\x65\x73\x2E\x1F" "\x62\x4E\x61\x74\x69\x6F\x6E\x61\x6C\x20\x44\x69\x66\x66\x75\x73" "\x69\x6F\x6E\x20\x4E\x65\x74\x77\x6F\x72\x6B\x1F\x78\x44\x69\x72" "\x65\x63\x74\x6F\x72\x69\x65\x73\x2E\x1E\x20\x30\x1F\x61\x45\x64" "\x75\x63\x61\x74\x69\x6F\x6E\x61\x6C\x20\x74\x65\x63\x68\x6E\x6F" "\x6C\x6F\x67\x79\x1F\x7A\x55\x6E\x69\x74\x65\x64\x20\x53\x74\x61" "\x74\x65\x73\x2E\x1E\x20\x30\x1F\x61\x46\x65\x64\x65\x72\x61\x6C" "\x20\x61\x69\x64\x20\x74\x6F\x20\x65\x64\x75\x63\x61\x74\x69\x6F" "\x6E\x1F\x7A\x55\x6E\x69\x74\x65\x64\x20\x53\x74\x61\x74\x65\x73" "\x2E\x1E\x31\x30\x1F\x61\x57\x65\x62\x62\x2C\x20\x4D\x69\x63\x68" "\x61\x65\x6C\x20\x42\x2E\x1E\x31\x30\x1F\x61\x55\x6E\x69\x74\x65" "\x64\x20\x53\x74\x61\x74\x65\x73\x2E\x1F\x62\x4F\x66\x66\x69\x63" "\x65\x20\x6F\x66\x20\x45\x64\x75\x63\x61\x74\x69\x6F\x6E\x61\x6C" "\x20\x52\x65\x73\x65\x61\x72\x63\x68\x20\x61\x6E\x64\x20\x49\x6D" "\x70\x72\x6F\x76\x65\x6D\x65\x6E\x74\x2E\x1E\x1D" , "\x30\x31\x35\x35\x39\x6E\x61\x6D\x20\x20\x32\x32\x30\x30\x33\x37" "\x33\x49\x61\x20\x34\x35\x30\x30\x30\x30\x31\x30\x30\x30\x39\x30" "\x30\x30\x30\x30\x30\x30\x38\x30\x30\x34\x31\x30\x30\x30\x30\x39" "\x30\x30\x35\x30\x30\x31\x37\x30\x30\x30\x35\x30\x30\x31\x30\x30" "\x30\x31\x33\x30\x30\x30\x36\x37\x30\x33\x37\x30\x30\x32\x30\x30" "\x30\x30\x38\x30\x30\x34\x33\x30\x30\x31\x32\x30\x30\x31\x30\x30" "\x30\x37\x34\x30\x30\x31\x39\x30\x30\x31\x31\x32\x30\x38\x36\x30" "\x30\x32\x32\x30\x30\x31\x33\x31\x30\x38\x38\x30\x30\x31\x36\x30" "\x30\x31\x35\x33\x30\x34\x39\x30\x30\x30\x39\x30\x30\x31\x36\x39" "\x31\x30\x30\x30\x30\x32\x32\x30\x30\x31\x37\x38\x32\x34\x35\x30" "\x32\x35\x39\x30\x30\x32\x30\x30\x32\x36\x30\x30\x31\x30\x35\x30" "\x30\x34\x35\x39\x33\x30\x30\x30\x30\x33\x33\x30\x30\x35\x36\x34" "\x35\x30\x30\x30\x30\x35\x35\x30\x30\x35\x39\x37\x35\x30\x30\x30" "\x30\x31\x37\x30\x30\x36\x35\x32\x35\x30\x34\x30\x30\x34\x31\x30" "\x30\x36\x36\x39\x35\x30\x30\x30\x30\x31\x38\x30\x30\x37\x31\x30" "\x36\x35\x30\x30\x30\x34\x34\x30\x30\x37\x32\x38\x36\x35\x30\x30" "\x30\x34\x34\x30\x30\x37\x37\x32\x36\x35\x30\x30\x30\x33\x37\x30" "\x30\x38\x31\x36\x36\x35\x30\x30\x30\x35\x32\x30\x30\x38\x35\x33" "\x36\x35\x30\x30\x30\x33\x37\x30\x30\x39\x30\x35\x37\x30\x30\x30" "\x30\x34\x34\x30\x30\x39\x34\x32\x37\x30\x30\x30\x30\x32\x35\x30" "\x30\x39\x38\x36\x37\x31\x30\x30\x30\x34\x38\x30\x31\x30\x31\x31" "\x37\x31\x30\x30\x30\x33\x30\x30\x31\x30\x35\x39\x37\x31\x30\x30" "\x30\x36\x38\x30\x31\x30\x38\x39\x37\x34\x30\x30\x30\x32\x38\x30" "\x31\x31\x35\x37\x1E\x41\x43\x44\x2D\x32\x34\x37\x36\x1E\x39\x31" "\x30\x34\x32\x35\x73\x31\x39\x38\x37\x20\x20\x20\x20\x64\x63\x75" "\x61\x20\x20\x20\x20\x20\x62\x20\x20\x20\x66\x30\x30\x30\x31\x30" "\x20\x65\x6E\x67\x20\x64\x1E\x31\x39\x39\x31\x30\x35\x31\x39\x31" "\x34\x34\x35\x35\x31\x2E\x30\x1E\x20\x20\x1F\x6F\x32\x33\x36\x30" "\x32\x33\x38\x39\x1E\x20\x20\x1F\x61\x45\x44\x20\x32\x38\x38\x35" "\x32\x39\x1F\x62\x45\x52\x49\x43\x1E\x20\x20\x1F\x61\x6E\x2D\x75" "\x73\x2D\x2D\x2D\x1E\x20\x20\x1F\x61\x30\x34\x36\x36\x2D\x41\x2D" "\x30\x33\x20\x28\x4D\x46\x29\x1E\x30\x20\x1F\x61\x45\x44\x20\x31" "\x2E\x33\x31\x30\x2F\x32\x3A\x32\x38\x38\x35\x32\x39\x1E\x20\x20" "\x1F\x61\x4C\x50\x20\x38\x37\x2D\x34\x30\x33\x20\x63\x1E\x20\x20" "\x1F\x61\x44\x52\x55\x47\x1E\x31\x30\x1F\x61\x53\x65\x61\x67\x65" "\x72\x2C\x20\x41\x6E\x64\x72\x65\x77\x20\x4A\x2E\x1E\x31\x30\x1F" "\x61\x43\x68\x65\x63\x6B\x20\x74\x68\x69\x73\x20\x6F\x75\x74\x20" "\x3A\x1F\x62\x6C\x69\x62\x72\x61\x72\x79\x20\x70\x72\x6F\x67\x72" "\x61\x6D\x20\x6D\x6F\x64\x65\x6C\x73\x20\x2F\x1F\x63\x70\x72\x65" "\x70\x61\x72\x65\x64\x20\x62\x79\x20\x41\x6E\x64\x72\x65\x77\x20" "\x4A\x2E\x20\x53\x65\x61\x67\x65\x72\x2C\x20\x53\x61\x72\x61\x68" "\x20\x4A\x2E\x20\x52\x6F\x62\x65\x72\x74\x73\x2C\x20\x43\x61\x72" "\x6F\x6C\x20\x5A\x2E\x20\x4C\x69\x6E\x63\x6F\x6C\x6E\x20\x3B\x20" "\x70\x72\x65\x70\x61\x72\x65\x64\x20\x66\x6F\x72\x20\x4E\x61\x74" "\x69\x6F\x6E\x61\x6C\x20\x44\x69\x66\x66\x75\x73\x69\x6F\x6E\x20" "\x4E\x65\x74\x77\x6F\x72\x6B\x20\x75\x6E\x64\x65\x72\x20\x63\x6F" "\x6E\x74\x72\x61\x63\x74\x20\x74\x6F\x20\x52\x4D\x43\x20\x43\x6F" "\x72\x70\x6F\x72\x61\x74\x69\x6F\x6E\x2C\x20\x63\x6F\x6E\x74\x72" "\x61\x63\x74\x20\x33\x30\x30\x2D\x38\x34\x2D\x30\x32\x35\x31\x20" "\x77\x69\x74\x68\x20\x74\x68\x65\x20\x55\x6E\x69\x74\x65\x64\x20" "\x53\x74\x61\x74\x65\x73\x20\x44\x65\x70\x61\x72\x74\x6D\x65\x6E" "\x74\x20\x6F\x66\x20\x45\x64\x75\x63\x61\x74\x69\x6F\x6E\x2E\x1E" "\x30\x20\x1F\x61\x57\x61\x73\x68\x69\x6E\x67\x74\x6F\x6E\x2C\x20" "\x44\x2E\x43\x2E\x20\x3A\x1F\x62\x4F\x66\x66\x69\x63\x65\x20\x6F" "\x66\x20\x45\x64\x75\x63\x61\x74\x69\x6F\x6E\x61\x6C\x20\x52\x65" "\x73\x65\x61\x72\x63\x68\x20\x61\x6E\x64\x20\x49\x6D\x70\x72\x6F" "\x76\x65\x6D\x65\x6E\x74\x2C\x20\x55\x2E\x53\x2E\x20\x44\x65\x70" "\x74\x2E\x20\x6F\x66\x20\x45\x64\x75\x63\x61\x74\x69\x6F\x6E\x2C" "\x1F\x63\x5B\x31\x39\x38\x37\x5D\x1E\x20\x20\x1F\x61\x69\x78\x2C" "\x20\x33\x31\x39\x20\x70\x2E\x20\x3A\x1F\x62\x69\x6C\x6C\x2E\x20" "\x3B\x1F\x63\x32\x38\x20\x63\x6D\x2E\x1E\x20\x20\x1F\x61\x44\x69" "\x73\x74\x72\x69\x62\x75\x74\x65\x64\x20\x74\x6F\x20\x64\x65\x70" "\x6F\x73\x69\x74\x6F\x72\x79\x20\x6C\x69\x62\x72\x61\x72\x69\x65" "\x73\x20\x69\x6E\x20\x6D\x69\x63\x72\x6F\x66\x69\x63\x68\x65\x2E" "\x1E\x20\x20\x1F\x61\x22\x4A\x75\x6C\x79\x20\x31\x39\x38\x37\x2E" "\x22\x1E\x20\x20\x1F\x61\x49\x6E\x63\x6C\x75\x64\x65\x73\x20\x62" "\x69\x62\x6C\x69\x6F\x67\x72\x61\x70\x68\x69\x63\x61\x6C\x20\x72" "\x65\x66\x65\x72\x65\x6E\x63\x65\x73\x2E\x1E\x20\x20\x1F\x61\x22" "\x4C\x50\x20\x38\x37\x2D\x34\x30\x33\x63\x2E\x22\x1E\x20\x30\x1F" "\x61\x4C\x69\x62\x72\x61\x72\x69\x65\x73\x20\x61\x6E\x64\x20\x63" "\x6F\x6D\x6D\x75\x6E\x69\x74\x79\x1F\x7A\x55\x6E\x69\x74\x65\x64" "\x20\x53\x74\x61\x74\x65\x73\x2E\x1E\x20\x30\x1F\x61\x4C\x69\x62" "\x72\x61\x72\x69\x65\x73\x20\x61\x6E\x64\x20\x65\x64\x75\x63\x61" "\x74\x69\x6F\x6E\x1F\x7A\x55\x6E\x69\x74\x65\x64\x20\x53\x74\x61" "\x74\x65\x73\x2E\x1E\x20\x30\x1F\x61\x53\x63\x68\x6F\x6F\x6C\x20" "\x6C\x69\x62\x72\x61\x72\x69\x65\x73\x1F\x7A\x55\x6E\x69\x74\x65" "\x64\x20\x53\x74\x61\x74\x65\x73\x2E\x1E\x20\x30\x1F\x61\x49\x6E" "\x73\x74\x72\x75\x63\x74\x69\x6F\x6E\x61\x6C\x20\x6D\x61\x74\x65" "\x72\x69\x61\x6C\x73\x20\x63\x65\x6E\x74\x65\x72\x73\x1F\x7A\x55" "\x6E\x69\x74\x65\x64\x20\x53\x74\x61\x74\x65\x73\x2E\x1E\x20\x30" "\x1F\x61\x50\x75\x62\x6C\x69\x63\x20\x6C\x69\x62\x72\x61\x72\x69" "\x65\x73\x1F\x7A\x55\x6E\x69\x74\x65\x64\x20\x53\x74\x61\x74\x65" "\x73\x2E\x1E\x31\x30\x1F\x61\x52\x6F\x62\x65\x72\x74\x73\x2C\x20" "\x53\x61\x72\x61\x68\x20\x4A\x2E\x1F\x71\x28\x53\x61\x72\x61\x68" "\x20\x4A\x61\x6E\x65\x29\x2C\x1F\x64\x31\x39\x34\x36\x2D\x1E\x31" "\x30\x1F\x61\x4C\x69\x6E\x63\x6F\x6C\x6E\x2C\x20\x43\x61\x72\x6F" "\x6C\x20\x5A\x61\x6C\x6C\x2E\x1E\x31\x30\x1F\x61\x55\x6E\x69\x74" "\x65\x64\x20\x53\x74\x61\x74\x65\x73\x2E\x1F\x62\x4E\x61\x74\x69" "\x6F\x6E\x61\x6C\x20\x44\x69\x66\x66\x75\x73\x69\x6F\x6E\x20\x4E" "\x65\x74\x77\x6F\x72\x6B\x2E\x1E\x32\x30\x1F\x61\x52\x4D\x43\x20" "\x52\x65\x73\x65\x61\x72\x63\x68\x20\x43\x6F\x72\x70\x6F\x72\x61" "\x74\x69\x6F\x6E\x2E\x1E\x31\x30\x1F\x61\x55\x6E\x69\x74\x65\x64" "\x20\x53\x74\x61\x74\x65\x73\x2E\x1F\x62\x4F\x66\x66\x69\x63\x65" "\x20\x6F\x66\x20\x45\x64\x75\x63\x61\x74\x69\x6F\x6E\x61\x6C\x20" "\x52\x65\x73\x65\x61\x72\x63\x68\x20\x61\x6E\x64\x20\x49\x6D\x70" "\x72\x6F\x76\x65\x6D\x65\x6E\x74\x2E\x1E\x30\x31\x1F\x61\x4C\x69" "\x62\x72\x61\x72\x79\x20\x70\x72\x6F\x67\x72\x61\x6D\x20\x6D\x6F" "\x64\x65\x6C\x73\x2E\x1E\x1D" , "\x30\x31\x31\x35\x35\x6E\x61\x73\x20\x20\x32\x32\x30\x30\x33\x31" "\x33\x35\x61\x20\x34\x35\x30\x30\x30\x30\x31\x30\x30\x30\x39\x30" "\x30\x30\x30\x30\x30\x30\x38\x30\x30\x34\x31\x30\x30\x30\x30\x39" "\x30\x30\x35\x30\x30\x31\x37\x30\x30\x30\x35\x30\x30\x31\x30\x30" "\x30\x32\x37\x30\x30\x30\x36\x37\x30\x34\x30\x30\x30\x30\x38\x30" "\x30\x30\x39\x34\x30\x31\x32\x30\x30\x31\x32\x30\x30\x31\x30\x32" "\x30\x34\x32\x30\x30\x30\x37\x30\x30\x31\x31\x34\x30\x35\x30\x30" "\x30\x31\x35\x30\x30\x31\x32\x31\x30\x37\x34\x30\x30\x31\x31\x30" "\x30\x31\x33\x36\x30\x38\x36\x30\x30\x32\x30\x30\x30\x31\x34\x37" "\x30\x34\x39\x30\x30\x30\x39\x30\x30\x31\x36\x37\x32\x31\x32\x30" "\x30\x38\x33\x30\x30\x31\x37\x36\x32\x34\x35\x30\x30\x36\x39\x30" "\x30\x32\x35\x39\x32\x36\x30\x30\x31\x31\x35\x30\x30\x33\x32\x38" "\x32\x36\x35\x30\x30\x37\x31\x30\x30\x34\x34\x33\x33\x30\x30\x30" "\x30\x31\x37\x30\x30\x35\x31\x34\x33\x31\x30\x30\x30\x31\x31\x30" "\x30\x35\x33\x31\x35\x30\x30\x30\x30\x33\x32\x30\x30\x35\x34\x32" "\x36\x31\x30\x30\x30\x33\x36\x30\x30\x35\x37\x34\x36\x35\x30\x30" "\x30\x36\x32\x30\x30\x36\x31\x30\x36\x35\x30\x30\x30\x36\x34\x30" "\x30\x36\x37\x32\x37\x31\x30\x30\x30\x32\x32\x30\x30\x37\x33\x36" "\x37\x31\x30\x30\x30\x37\x30\x30\x30\x37\x35\x38\x39\x33\x36\x30" "\x30\x31\x33\x30\x30\x38\x32\x38\x1E\x41\x43\x44\x2D\x32\x33\x37" "\x36\x1E\x39\x31\x30\x32\x32\x35\x63\x31\x39\x75\x75\x39\x39\x39" "\x39\x64\x63\x75\x61\x72\x20\x20\x20\x20\x20\x20\x20\x20\x66\x30" "\x75\x75\x75\x20\x30\x65\x6E\x67\x20\x20\x1E\x31\x39\x39\x31\x30" "\x35\x31\x39\x31\x34\x34\x35\x35\x31\x2E\x30\x1E\x20\x20\x1F\x61" "\x20\x20\x20\x39\x31\x36\x35\x36\x30\x36\x30\x20\x1F\x6F\x32\x33" "\x31\x35\x30\x38\x34\x37\x1E\x20\x20\x1F\x64\x47\x50\x4F\x1E\x20" "\x20\x1F\x61\x32\x1F\x69\x39\x31\x30\x33\x1E\x20\x20\x1F\x61\x6C" "\x63\x1E\x30\x30\x1F\x61\x49\x4E\x20\x50\x52\x4F\x43\x45\x53\x53" "\x1E\x20\x20\x1F\x61\x30\x37\x38\x35\x2D\x48\x1E\x30\x20\x1F\x61" "\x4C\x43\x20\x31\x2E\x34\x30\x2F\x32\x3A\x46\x20\x33\x31\x2F\x1E" "\x20\x20\x1F\x61\x44\x52\x55\x47\x1E\x30\x20\x1F\x61\x46\x65\x64" "\x65\x72\x61\x6C\x20\x4C\x69\x62\x72\x61\x72\x79\x20\x61\x6E\x64" "\x20\x49\x6E\x66\x6F\x72\x6D\x61\x74\x69\x6F\x6E\x20\x4E\x65\x74" "\x77\x6F\x72\x6B\x20\x73\x65\x72\x76\x69\x63\x65\x73\x20\x64\x69" "\x72\x65\x63\x74\x6F\x72\x79\x20\x66\x6F\x72\x20\x66\x69\x73\x63" "\x61\x6C\x20\x79\x65\x61\x72\x20\x2E\x2E\x2E\x1E\x30\x30\x1F\x61" "\x46\x45\x44\x4C\x49\x4E\x4B\x20\x73\x65\x72\x76\x69\x63\x65\x73" "\x20\x64\x69\x72\x65\x63\x74\x6F\x72\x79\x20\x66\x6F\x72\x20\x66" "\x69\x73\x63\x61\x6C\x20\x79\x65\x61\x72\x20\x2E\x2E\x2E\x20\x2F" "\x1F\x63\x46\x4C\x49\x43\x43\x2F\x46\x45\x44\x4C\x49\x4E\x4B\x2E" "\x1E\x30\x30\x1F\x61\x57\x61\x73\x68\x69\x6E\x67\x74\x6F\x6E\x2C" "\x20\x44\x2E\x43\x2E\x20\x3A\x1F\x62\x46\x65\x64\x65\x72\x61\x6C" "\x20\x4C\x69\x62\x72\x61\x72\x79\x20\x61\x6E\x64\x20\x49\x6E\x66" "\x6F\x72\x6D\x61\x74\x69\x6F\x6E\x20\x4E\x65\x74\x77\x6F\x72\x6B" "\x2C\x20\x46\x65\x64\x65\x72\x61\x6C\x20\x4C\x69\x62\x72\x61\x72" "\x79\x20\x61\x6E\x64\x20\x49\x6E\x66\x6F\x72\x6D\x61\x74\x69\x6F" "\x6E\x20\x43\x65\x6E\x74\x65\x72\x20\x43\x6F\x6D\x6D\x69\x74\x74" "\x65\x65\x2C\x1E\x20\x20\x1F\x61\x46\x45\x44\x4C\x49\x4E\x4B\x2C" "\x20\x52\x6F\x6F\x6D\x20\x4C\x41\x20\x31\x30\x32\x36\x43\x2C\x20" "\x4C\x69\x62\x72\x61\x72\x79\x20\x6F\x66\x20\x43\x6F\x6E\x67\x72" "\x65\x73\x73\x2C\x20\x57\x61\x73\x68\x69\x6E\x67\x74\x6F\x6E\x20" "\x44\x2E\x43\x2E\x20\x32\x30\x35\x34\x30\x1E\x20\x20\x1F\x61\x76" "\x2E\x20\x3B\x1F\x63\x32\x38\x20\x63\x6D\x2E\x1E\x20\x20\x1F\x61" "\x41\x6E\x6E\x75\x61\x6C\x1E\x20\x20\x1F\x61\x44\x65\x73\x63\x72" "\x69\x70\x74\x69\x6F\x6E\x20\x62\x61\x73\x65\x64\x20\x6F\x6E\x3A" "\x20\x31\x39\x39\x30\x2E\x1E\x32\x30\x1F\x61\x46\x45\x44\x4C\x49" "\x4E\x4B\x20\x28\x4E\x65\x74\x77\x6F\x72\x6B\x29\x1F\x78\x44\x69" "\x72\x65\x63\x74\x6F\x72\x69\x65\x73\x2E\x1E\x20\x30\x1F\x61\x4C" "\x69\x62\x72\x61\x72\x79\x20\x69\x6E\x66\x6F\x72\x6D\x61\x74\x69" "\x6F\x6E\x20\x6E\x65\x74\x77\x6F\x72\x6B\x73\x1F\x7A\x55\x6E\x69" "\x74\x65\x64\x20\x53\x74\x61\x74\x65\x73\x1F\x78\x44\x69\x72\x65" "\x63\x74\x6F\x72\x69\x65\x73\x2E\x1E\x20\x30\x1F\x61\x4C\x69\x62" "\x72\x61\x72\x69\x65\x73\x2C\x20\x47\x6F\x76\x65\x72\x6E\x6D\x65" "\x6E\x74\x61\x6C\x2C\x20\x61\x64\x6D\x69\x6E\x69\x73\x74\x72\x61" "\x74\x69\x76\x65\x2C\x20\x65\x74\x63\x2E\x1F\x78\x50\x65\x72\x69" "\x6F\x64\x69\x63\x61\x6C\x73\x2E\x1E\x32\x30\x1F\x61\x46\x45\x44" "\x4C\x49\x4E\x4B\x20\x28\x4E\x65\x74\x77\x6F\x72\x6B\x29\x1E\x32" "\x30\x1F\x61\x55\x6E\x69\x74\x65\x64\x20\x53\x74\x61\x74\x65\x73" "\x2E\x1F\x62\x46\x65\x64\x65\x72\x61\x6C\x20\x4C\x69\x62\x72\x61" "\x72\x79\x20\x61\x6E\x64\x20\x49\x6E\x66\x6F\x72\x6D\x61\x74\x69" "\x6F\x6E\x20\x43\x65\x6E\x74\x65\x72\x20\x43\x6F\x6D\x6D\x69\x74" "\x74\x65\x65\x2E\x1E\x20\x20\x1F\x61\x31\x39\x39\x31\x20\x4C\x49" "\x43\x1E\x1D" , "\x30\x30\x39\x31\x35\x6E\x61\x6D\x20\x20\x32\x32\x30\x30\x32\x32" "\x39\x4B\x61\x20\x34\x35\x30\x30\x30\x30\x31\x30\x30\x30\x39\x30" "\x30\x30\x30\x30\x30\x30\x38\x30\x30\x34\x31\x30\x30\x30\x30\x39" "\x30\x30\x35\x30\x30\x31\x37\x30\x30\x30\x35\x30\x30\x31\x30\x30" "\x30\x31\x33\x30\x30\x30\x36\x37\x30\x34\x30\x30\x30\x31\x33\x30" "\x30\x30\x38\x30\x30\x33\x37\x30\x30\x32\x30\x30\x30\x30\x39\x33" "\x30\x37\x34\x30\x30\x31\x39\x30\x30\x31\x31\x33\x30\x38\x36\x30" "\x30\x32\x32\x30\x30\x31\x33\x32\x30\x34\x39\x30\x30\x30\x39\x30" "\x30\x31\x35\x34\x31\x30\x30\x30\x30\x31\x38\x30\x30\x31\x36\x33" "\x32\x34\x35\x30\x31\x35\x37\x30\x30\x31\x38\x31\x32\x36\x30\x30" "\x31\x32\x34\x30\x30\x33\x33\x38\x33\x30\x30\x30\x30\x30\x39\x30" "\x30\x34\x36\x32\x35\x33\x33\x30\x30\x39\x33\x30\x30\x34\x37\x31" "\x35\x30\x30\x30\x30\x35\x35\x30\x30\x35\x36\x34\x36\x35\x30\x30" "\x30\x31\x34\x30\x30\x36\x31\x39\x37\x31\x30\x30\x30\x35\x32\x30" "\x30\x36\x33\x33\x1E\x41\x43\x44\x2D\x31\x39\x34\x39\x1E\x39\x31" "\x30\x34\x31\x35\x72\x31\x39\x39\x30\x31\x30\x38\x37\x64\x63\x75" "\x20\x20\x20\x20\x20\x62\x20\x20\x20\x20\x66\x30\x30\x30\x31\x30" "\x20\x65\x6E\x67\x20\x64\x1E\x31\x39\x39\x31\x30\x34\x32\x31\x31" "\x32\x32\x35\x34\x31\x2E\x30\x1E\x20\x20\x1F\x6F\x32\x33\x34\x36" "\x39\x32\x36\x31\x1E\x20\x20\x1F\x61\x47\x50\x4F\x1F\x63\x47\x50" "\x4F\x1E\x20\x20\x1F\x61\x45\x44\x20\x32\x38\x36\x39\x39\x32\x1F" "\x62\x45\x52\x49\x43\x1E\x20\x20\x1F\x61\x30\x34\x36\x36\x2D\x41" "\x2D\x30\x33\x20\x28\x4D\x46\x29\x1E\x30\x20\x1F\x61\x45\x44\x20" "\x31\x2E\x33\x31\x30\x2F\x32\x3A\x32\x38\x36\x39\x39\x32\x1E\x20" "\x20\x1F\x61\x44\x52\x55\x47\x1E\x31\x30\x1F\x61\x50\x61\x75\x6C" "\x75\x2C\x20\x4E\x61\x6E\x63\x79\x2E\x1E\x31\x30\x1F\x61\x44\x65" "\x61\x6C\x69\x6E\x67\x20\x77\x69\x74\x68\x20\x64\x72\x6F\x70\x6F" "\x75\x74\x73\x1F\x68\x6D\x69\x63\x72\x6F\x66\x6F\x72\x6D\x20\x3A" "\x1F\x62\x74\x68\x65\x20\x75\x72\x62\x61\x6E\x20\x73\x75\x70\x65" "\x72\x69\x6E\x74\x65\x6E\x64\x65\x6E\x74\x73\x27\x20\x63\x61\x6C" "\x6C\x20\x74\x6F\x20\x61\x63\x74\x69\x6F\x6E\x20\x2F\x1F\x63\x62" "\x79\x20\x74\x68\x65\x20\x4F\x45\x52\x49\x20\x55\x72\x62\x61\x6E" "\x20\x53\x75\x70\x65\x72\x69\x6E\x74\x65\x6E\x64\x65\x6E\x74\x73" "\x20\x4E\x65\x74\x77\x6F\x72\x6B\x20\x3B\x20\x4E\x61\x6E\x63\x79" "\x20\x50\x61\x75\x6C\x75\x2C\x20\x77\x72\x69\x74\x65\x72\x2D\x65" "\x64\x69\x74\x6F\x72\x2E\x1E\x30\x20\x1F\x61\x5B\x57\x61\x73\x68" "\x69\x6E\x67\x74\x6F\x6E\x2C\x20\x44\x2E\x43\x5D\x2E\x20\x3A\x1F" "\x62\x4F\x66\x66\x69\x63\x65\x20\x6F\x66\x20\x45\x64\x75\x63\x61" "\x74\x69\x6F\x6E\x61\x6C\x20\x52\x65\x73\x65\x61\x72\x63\x68\x20" "\x61\x6E\x64\x20\x49\x6D\x70\x72\x6F\x76\x65\x6D\x65\x6E\x74\x2C" "\x20\x45\x64\x75\x63\x61\x74\x69\x6F\x6E\x61\x6C\x20\x52\x65\x73" "\x6F\x75\x72\x63\x65\x73\x20\x49\x6E\x66\x6F\x72\x6D\x61\x74\x69" "\x6F\x6E\x20\x43\x65\x6E\x74\x65\x72\x2C\x1F\x63\x5B\x31\x39\x38" "\x37\x5D\x1E\x20\x20\x1F\x61\x31\x20\x76\x2E\x1E\x20\x20\x1F\x61" "\x4D\x69\x63\x72\x6F\x66\x69\x63\x68\x65\x2E\x1F\x62\x5B\x57\x61" "\x73\x68\x69\x6E\x67\x74\x6F\x6E\x2C\x20\x44\x2E\x43\x2E\x3F\x5D" "\x20\x3A\x1F\x63\x53\x75\x70\x74\x2E\x20\x6F\x66\x20\x44\x6F\x63" "\x73\x2E\x2C\x20\x55\x2E\x53\x2E\x20\x47\x2E\x50\x2E\x4F\x2E\x2C" "\x1F\x64\x5B\x31\x39\x39\x30\x5D\x2E\x1F\x65\x31\x20\x6D\x69\x63" "\x72\x6F\x66\x69\x63\x68\x65\x2E\x1E\x20\x20\x1F\x61\x44\x69\x73" "\x74\x72\x69\x62\x75\x74\x65\x64\x20\x74\x6F\x20\x64\x65\x70\x6F" "\x73\x69\x74\x6F\x72\x79\x20\x6C\x69\x62\x72\x61\x72\x69\x65\x73" "\x20\x69\x6E\x20\x6D\x69\x63\x72\x6F\x66\x69\x63\x68\x65\x2E\x1E" "\x20\x30\x1F\x61\x44\x72\x6F\x70\x6F\x75\x74\x73\x2E\x1E\x32\x30" "\x1F\x61\x45\x64\x75\x63\x61\x74\x69\x6F\x6E\x61\x6C\x20\x52\x65" "\x73\x6F\x75\x72\x63\x65\x73\x20\x49\x6E\x66\x6F\x72\x6D\x61\x74" "\x69\x6F\x6E\x20\x43\x65\x6E\x74\x65\x72\x20\x28\x55\x2E\x53\x2E" "\x29\x1E\x1D" , "\x30\x31\x30\x35\x33\x6E\x61\x6D\x20\x20\x32\x32\x30\x30\x32\x31" "\x37\x4B\x61\x20\x34\x35\x30\x30\x30\x30\x31\x30\x30\x30\x39\x30" "\x30\x30\x30\x30\x30\x30\x38\x30\x30\x34\x31\x30\x30\x30\x30\x39" "\x30\x30\x35\x30\x30\x31\x37\x30\x30\x30\x35\x30\x30\x31\x30\x30" "\x30\x31\x33\x30\x30\x30\x36\x37\x30\x33\x37\x30\x30\x32\x30\x30" "\x30\x30\x38\x30\x30\x37\x34\x30\x30\x31\x39\x30\x30\x31\x30\x30" "\x30\x38\x36\x30\x30\x32\x32\x30\x30\x31\x31\x39\x30\x34\x39\x30" "\x30\x30\x39\x30\x30\x31\x34\x31\x32\x34\x35\x30\x31\x36\x33\x30" "\x30\x31\x35\x30\x32\x36\x30\x30\x32\x35\x31\x30\x30\x33\x31\x33" "\x33\x30\x30\x30\x30\x30\x39\x30\x30\x35\x36\x34\x35\x33\x33\x30" "\x30\x39\x34\x30\x30\x35\x37\x33\x35\x30\x30\x30\x30\x35\x35\x30" "\x30\x36\x36\x37\x36\x35\x30\x30\x30\x32\x34\x30\x30\x37\x32\x32" "\x36\x35\x30\x30\x30\x33\x37\x30\x30\x37\x34\x36\x37\x31\x30\x30" "\x30\x35\x32\x30\x30\x37\x38\x33\x1E\x41\x43\x44\x2D\x31\x39\x34" "\x37\x1E\x39\x31\x30\x34\x31\x35\x72\x31\x39\x39\x30\x31\x39\x38" "\x36\x64\x63\x75\x20\x20\x20\x20\x20\x62\x20\x20\x20\x20\x66\x30" "\x30\x30\x31\x30\x20\x65\x6E\x67\x20\x64\x1E\x31\x39\x39\x31\x30" "\x34\x32\x31\x31\x32\x32\x35\x34\x31\x2E\x30\x1E\x20\x20\x1F\x6F" "\x32\x33\x34\x36\x39\x30\x39\x38\x1E\x20\x20\x1F\x61\x45\x44\x20" "\x32\x38\x36\x33\x33\x33\x1F\x62\x45\x52\x49\x43\x1E\x20\x20\x1F" "\x61\x30\x34\x36\x36\x2D\x41\x2D\x30\x33\x20\x28\x4D\x46\x29\x1E" "\x30\x20\x1F\x61\x45\x44\x20\x31\x2E\x33\x31\x30\x2F\x32\x3A\x32" "\x38\x36\x33\x33\x33\x1E\x20\x20\x1F\x61\x44\x52\x55\x47\x1E\x30" "\x30\x1F\x61\x4E\x61\x74\x69\x6F\x6E\x61\x6C\x20\x64\x69\x73\x73" "\x65\x6D\x69\x6E\x61\x74\x69\x6F\x6E\x20\x6D\x6F\x64\x65\x6C\x20" "\x66\x6F\x72\x20\x74\x68\x65\x20\x49\x27\x4D\x20\x53\x50\x45\x43" "\x49\x41\x4C\x20\x50\x72\x6F\x67\x72\x61\x6D\x20\x6F\x66\x20\x50" "\x68\x79\x73\x69\x63\x61\x6C\x20\x45\x64\x75\x63\x61\x74\x69\x6F" "\x6E\x20\x66\x6F\x72\x20\x74\x68\x65\x20\x48\x61\x6E\x64\x69\x63" "\x61\x70\x70\x65\x64\x2C\x20\x31\x39\x38\x33\x2D\x31\x39\x38\x36" "\x1F\x68\x6D\x69\x63\x72\x6F\x66\x6F\x72\x6D\x20\x3A\x1F\x62\x66" "\x69\x6E\x61\x6C\x20\x72\x65\x70\x6F\x72\x74\x2C\x20\x49\x27\x4D" "\x20\x53\x50\x45\x43\x49\x41\x4C\x20\x6E\x65\x74\x77\x6F\x72\x6B" "\x2E\x1E\x30\x20\x1F\x61\x54\x61\x6D\x70\x61\x2C\x20\x46\x6C\x61" "\x2E\x20\x3A\x1F\x62\x44\x65\x70\x61\x72\x74\x6D\x65\x6E\x74\x20" "\x6F\x66\x20\x50\x68\x79\x73\x69\x63\x61\x6C\x20\x45\x64\x75\x63" "\x61\x74\x69\x6F\x6E\x2C\x20\x43\x6F\x6C\x6C\x65\x67\x65\x20\x6F" "\x66\x20\x45\x64\x75\x63\x61\x74\x69\x6F\x6E\x2C\x20\x55\x6E\x69" "\x76\x65\x72\x73\x69\x74\x79\x20\x6F\x66\x20\x53\x6F\x75\x74\x68" "\x20\x46\x6C\x6F\x72\x69\x64\x61\x20\x3B\x1F\x61\x5B\x57\x61\x73" "\x68\x69\x6E\x67\x74\x6F\x6E\x2C\x20\x44\x2E\x43\x2E\x5D\x20\x3A" "\x1F\x62\x55\x2E\x53\x2E\x20\x44\x65\x70\x74\x2E\x20\x6F\x66\x20" "\x45\x64\x75\x63\x61\x74\x69\x6F\x6E\x2C\x20\x4F\x66\x66\x69\x63" "\x65\x20\x6F\x66\x20\x45\x64\x75\x63\x61\x74\x69\x6F\x6E\x61\x6C" "\x20\x52\x65\x73\x65\x61\x72\x63\x68\x20\x61\x6E\x64\x20\x49\x6D" "\x70\x72\x6F\x76\x65\x6D\x65\x6E\x74\x2C\x20\x45\x64\x75\x63\x61" "\x74\x69\x6F\x6E\x61\x6C\x20\x52\x65\x73\x6F\x75\x72\x63\x65\x73" "\x20\x49\x6E\x66\x6F\x72\x6D\x61\x74\x69\x6F\x6E\x20\x43\x65\x6E" "\x74\x65\x72\x2C\x1F\x63\x5B\x31\x39\x38\x36\x5D\x1E\x20\x20\x1F" "\x61\x31\x20\x76\x2E\x1E\x20\x20\x1F\x61\x4D\x69\x63\x72\x6F\x66" "\x69\x63\x68\x65\x2E\x1F\x62\x5B\x57\x61\x73\x68\x69\x6E\x67\x74" "\x6F\x6E\x2C\x20\x44\x2E\x43\x2E\x3F\x5D\x20\x3A\x1F\x63\x53\x75" "\x70\x74\x2E\x20\x6F\x66\x20\x44\x6F\x63\x73\x2E\x2C\x20\x55\x2E" "\x53\x2E\x20\x47\x2E\x50\x2E\x4F\x2E\x2C\x1F\x64\x5B\x31\x39\x39" "\x30\x5D\x2E\x1F\x65\x32\x20\x6D\x69\x63\x72\x6F\x66\x69\x63\x68" "\x65\x73\x2E\x1E\x20\x20\x1F\x61\x44\x69\x73\x74\x72\x69\x62\x75" "\x74\x65\x64\x20\x74\x6F\x20\x64\x65\x70\x6F\x73\x69\x74\x6F\x72" "\x79\x20\x6C\x69\x62\x72\x61\x72\x69\x65\x73\x20\x69\x6E\x20\x6D" "\x69\x63\x72\x6F\x66\x69\x63\x68\x65\x2E\x1E\x20\x30\x1F\x61\x50" "\x68\x79\x73\x69\x63\x61\x6C\x20\x65\x64\x75\x63\x61\x74\x69\x6F" "\x6E\x2E\x1E\x20\x30\x1F\x61\x48\x61\x6E\x64\x69\x63\x61\x70\x70" "\x65\x64\x20\x63\x68\x69\x6C\x64\x72\x65\x6E\x1F\x78\x45\x64\x75" "\x63\x61\x74\x69\x6F\x6E\x2E\x1E\x32\x30\x1F\x61\x45\x64\x75\x63" "\x61\x74\x69\x6F\x6E\x61\x6C\x20\x52\x65\x73\x6F\x75\x72\x63\x65" "\x73\x20\x49\x6E\x66\x6F\x72\x6D\x61\x74\x69\x6F\x6E\x20\x43\x65" "\x6E\x74\x65\x72\x20\x28\x55\x2E\x53\x2E\x29\x1E\x1D" , "\x30\x31\x30\x33\x36\x6E\x61\x6D\x20\x20\x32\x32\x30\x30\x32\x38" "\x39\x49\x61\x20\x34\x35\x30\x30\x30\x30\x31\x30\x30\x30\x39\x30" "\x30\x30\x30\x30\x30\x30\x38\x30\x30\x34\x31\x30\x30\x30\x30\x39" "\x30\x30\x35\x30\x30\x31\x37\x30\x30\x30\x35\x30\x30\x31\x30\x30" "\x30\x31\x33\x30\x30\x30\x36\x37\x30\x34\x30\x30\x30\x31\x33\x30" "\x30\x30\x38\x30\x30\x34\x33\x30\x30\x31\x32\x30\x30\x30\x39\x33" "\x30\x37\x34\x30\x30\x31\x34\x30\x30\x31\x30\x35\x30\x38\x36\x30" "\x30\x31\x38\x30\x30\x31\x31\x39\x30\x38\x38\x30\x30\x31\x35\x30" "\x30\x31\x33\x37\x30\x34\x39\x30\x30\x30\x39\x30\x30\x31\x35\x32" "\x32\x34\x35\x30\x30\x34\x35\x30\x30\x31\x36\x31\x32\x36\x30\x30" "\x31\x30\x35\x30\x30\x32\x30\x36\x33\x30\x30\x30\x30\x34\x31\x30" "\x30\x33\x31\x31\x35\x30\x30\x30\x30\x35\x35\x30\x30\x33\x35\x32" "\x35\x30\x30\x30\x30\x33\x33\x30\x30\x34\x30\x37\x35\x30\x30\x30" "\x30\x32\x38\x30\x30\x34\x34\x30\x35\x30\x30\x30\x30\x32\x36\x30" "\x30\x34\x36\x38\x36\x31\x30\x30\x30\x34\x38\x30\x30\x34\x39\x34" "\x36\x35\x30\x30\x30\x35\x35\x30\x30\x35\x34\x32\x36\x35\x30\x30" "\x30\x34\x34\x30\x30\x35\x39\x37\x37\x31\x30\x30\x30\x36\x38\x30" "\x30\x36\x34\x31\x37\x34\x30\x30\x30\x33\x37\x30\x30\x37\x30\x39" "\x1E\x41\x43\x44\x2D\x31\x39\x33\x38\x1E\x39\x31\x30\x34\x31\x35" "\x73\x31\x39\x39\x31\x20\x20\x20\x20\x64\x63\x75\x20\x20\x20\x20" "\x20\x20\x20\x20\x20\x20\x66\x30\x30\x30\x30\x30\x20\x65\x6E\x67" "\x20\x64\x1E\x31\x39\x39\x31\x30\x34\x32\x31\x31\x32\x32\x35\x34" "\x31\x2E\x30\x1E\x20\x20\x1F\x6F\x32\x33\x34\x36\x38\x32\x37\x32" "\x1E\x20\x20\x1F\x61\x47\x50\x4F\x1F\x63\x47\x50\x4F\x1E\x20\x20" "\x1F\x61\x6E\x2D\x75\x73\x2D\x2D\x2D\x1E\x20\x20\x1F\x61\x30\x34" "\x36\x31\x2D\x44\x2D\x30\x35\x1E\x30\x20\x1F\x61\x45\x44\x20\x31" "\x2E\x33\x30\x32\x3A\x53\x68\x20\x32\x1E\x20\x20\x1F\x61\x50\x49" "\x50\x20\x39\x31\x2D\x38\x33\x36\x1E\x20\x20\x1F\x61\x44\x52\x55" "\x47\x1E\x30\x30\x1F\x61\x4E\x44\x4E\x2C\x20\x73\x68\x61\x72\x69" "\x6E\x67\x20\x73\x75\x63\x63\x65\x73\x73\x20\x74\x6F\x20\x69\x6D" "\x70\x72\x6F\x76\x65\x20\x73\x63\x68\x6F\x6F\x6C\x73\x2E\x1E\x30" "\x20\x1F\x61\x5B\x57\x61\x73\x68\x69\x6E\x67\x74\x6F\x6E\x2C\x20" "\x44\x43\x5D\x20\x3A\x1F\x62\x55\x2E\x53\x2E\x20\x44\x65\x70\x74" "\x2E\x20\x6F\x66\x20\x45\x64\x75\x63\x61\x74\x69\x6F\x6E\x2C\x20" "\x4F\x66\x66\x69\x63\x65\x20\x6F\x66\x20\x45\x64\x75\x63\x61\x74" "\x69\x6F\x6E\x61\x6C\x20\x52\x65\x73\x65\x61\x72\x63\x68\x20\x61" "\x6E\x64\x20\x49\x6D\x70\x72\x6F\x76\x65\x6D\x65\x6E\x74\x2C\x1F" "\x63\x5B\x31\x39\x39\x31\x5D\x1E\x20\x20\x1F\x61\x31\x20\x66\x6F" "\x6C\x64\x65\x64\x20\x73\x68\x65\x65\x74\x20\x28\x36\x20\x70\x2E" "\x29\x20\x3B\x1F\x63\x32\x32\x20\x78\x20\x31\x30\x20\x63\x6D\x2E" "\x1E\x20\x20\x1F\x61\x41\x74\x20\x68\x65\x61\x64\x20\x6F\x66\x20" "\x74\x69\x74\x6C\x65\x3A\x20\x4E\x61\x74\x69\x6F\x6E\x61\x6C\x20" "\x44\x69\x66\x66\x75\x73\x69\x6F\x6E\x20\x4E\x65\x74\x77\x6F\x72" "\x6B\x2C\x20\x4E\x44\x4E\x2E\x1E\x20\x20\x1F\x61\x53\x68\x69\x70" "\x70\x69\x6E\x67\x20\x6C\x69\x73\x74\x20\x6E\x6F\x2E\x3A\x20\x39" "\x31\x2D\x31\x39\x38\x2D\x50\x2E\x1E\x20\x20\x1F\x61\x22\x4A\x61" "\x6E\x75\x61\x72\x79\x20\x31\x39\x39\x31\x22\x2D\x2D\x50\x2E\x20" "\x5B\x35\x5D\x2E\x1E\x20\x20\x1F\x61\x22\x50\x49\x50\x20\x39\x31" "\x2D\x38\x33\x36\x22\x2D\x2D\x50\x2E\x20\x5B\x35\x5D\x2E\x1E\x31" "\x30\x1F\x61\x55\x6E\x69\x74\x65\x64\x20\x53\x74\x61\x74\x65\x73" "\x2E\x1F\x62\x4E\x61\x74\x69\x6F\x6E\x61\x6C\x20\x44\x69\x66\x66" "\x75\x73\x69\x6F\x6E\x20\x4E\x65\x74\x77\x6F\x72\x6B\x2E\x1E\x20" "\x30\x1F\x61\x44\x65\x6D\x6F\x6E\x73\x74\x72\x61\x74\x69\x6F\x6E" "\x20\x63\x65\x6E\x74\x65\x72\x73\x20\x69\x6E\x20\x65\x64\x75\x63" "\x61\x74\x69\x6F\x6E\x1F\x7A\x55\x6E\x69\x74\x65\x64\x20\x53\x74" "\x61\x74\x65\x73\x2E\x1E\x20\x30\x1F\x61\x45\x64\x75\x63\x61\x74" "\x69\x6F\x6E\x61\x6C\x20\x69\x6E\x6E\x6F\x76\x61\x74\x69\x6F\x6E" "\x73\x1F\x7A\x55\x6E\x69\x74\x65\x64\x20\x53\x74\x61\x74\x65\x73" "\x2E\x1E\x31\x30\x1F\x61\x55\x6E\x69\x74\x65\x64\x20\x53\x74\x61" "\x74\x65\x73\x2E\x1F\x62\x4F\x66\x66\x69\x63\x65\x20\x6F\x66\x20" "\x45\x64\x75\x63\x61\x74\x69\x6F\x6E\x61\x6C\x20\x52\x65\x73\x65" "\x61\x72\x63\x68\x20\x61\x6E\x64\x20\x49\x6D\x70\x72\x6F\x76\x65" "\x6D\x65\x6E\x74\x2E\x1E\x30\x31\x1F\x61\x4E\x61\x74\x69\x6F\x6E" "\x61\x6C\x20\x44\x69\x66\x66\x75\x73\x69\x6F\x6E\x20\x4E\x65\x74" "\x77\x6F\x72\x6B\x2C\x20\x4E\x44\x4E\x2E\x1E\x1D" , "\x30\x30\x37\x32\x39\x6E\x61\x6D\x30\x20\x32\x32\x30\x30\x32\x35" "\x33\x20\x20\x20\x34\x35\x30\x20\x30\x30\x31\x30\x30\x31\x35\x30" "\x30\x30\x30\x30\x30\x30\x34\x30\x30\x31\x35\x30\x30\x30\x31\x35" "\x30\x30\x38\x30\x30\x32\x33\x30\x30\x30\x33\x30\x30\x32\x31\x30" "\x30\x33\x34\x30\x30\x30\x35\x33\x30\x34\x31\x30\x30\x31\x33\x30" "\x30\x30\x38\x37\x31\x30\x30\x30\x30\x31\x38\x30\x30\x31\x30\x30" "\x32\x34\x31\x30\x30\x31\x35\x30\x30\x31\x31\x38\x32\x34\x35\x30" "\x31\x32\x36\x30\x30\x31\x33\x33\x32\x35\x30\x30\x30\x32\x34\x30" "\x30\x32\x35\x39\x32\x36\x30\x30\x30\x33\x33\x30\x30\x32\x38\x33" "\x33\x30\x30\x30\x30\x32\x37\x30\x30\x33\x31\x36\x35\x32\x30\x30" "\x30\x33\x31\x30\x30\x33\x34\x33\x36\x35\x32\x30\x30\x31\x31\x30" "\x30\x33\x37\x34\x30\x31\x30\x30\x30\x32\x31\x30\x30\x33\x38\x35" "\x30\x39\x36\x30\x30\x31\x31\x30\x30\x34\x30\x36\x32\x35\x31\x30" "\x30\x32\x34\x30\x30\x34\x31\x37\x32\x36\x31\x30\x30\x30\x39\x30" "\x30\x34\x34\x31\x39\x37\x30\x30\x30\x31\x33\x30\x30\x34\x35\x30" "\x39\x37\x30\x30\x30\x31\x32\x30\x30\x34\x36\x33\x1E\x30\x30\x1F" "\x61\x44\x30\x30\x30\x30\x31\x35\x39\x33\x37\x1E\x30\x30\x1F\x73" "\x61\x1F\x74\x6D\x1F\x72\x6E\x1F\x75\x30\x1E\x30\x30\x1F\x61\x72" "\x31\x39\x38\x38\x31\x39\x38\x31\x1F\x62\x64\x6B\x1F\x6C\x64\x61" "\x6E\x1E\x30\x30\x1F\x61\x38\x37\x2D\x31\x31\x2D\x30\x34\x30\x31" "\x30\x2D\x36\x1F\x63\x68\x66\x2E\x1F\x64\x6B\x72\x2E\x20\x39\x32" "\x2C\x30\x30\x1E\x30\x30\x1F\x61\x64\x61\x6E\x1F\x63\x65\x6E\x67" "\x1E\x30\x30\x1F\x61\x41\x6E\x64\x65\x72\x73\x6F\x6E\x1F\x68\x42" "\x6F\x62\x1E\x30\x30\x1F\x61\x53\x74\x72\x65\x74\x63\x68\x69\x6E" "\x67\x1E\x30\x30\x1F\x61\x53\x74\x72\xC3\xA6\x6B\xC3\xB8\x76\x65" "\x6C\x73\x65\x72\x1F\x64\x42\x6F\x62\x20\x41\x6E\x64\x65\x72\x73" "\x6F\x6E\x1F\x66\x69\x6C\x6C\x75\x73\x74\x72\x65\x72\x65\x74\x20" "\x61\x66\x20\x4A\x65\x61\x6E\x20\x41\x6E\x64\x65\x72\x73\x6F\x6E" "\x1F\x66\x64\x61\x6E\x73\x6B\x20\x75\x64\x67\x61\x76\x65\x20\x76" "\x65\x64\x20\x4C\x69\x73\x20\x45\x6E\x67\x65\x6C\x1F\x66\x5B\x6F" "\x76\x65\x72\x73\xC3\xA6\x74\x74\x65\x6C\x73\x65\x20\x76\x65\x64" "\x20\x4A\x65\x73\x70\x65\x72\x20\x4C\x61\x6E\x67\x65\x72\x5D\x1E" "\x30\x30\x1F\x61\x31\x2E\x20\x75\x64\x67\x61\x76\x65\x2C\x20\x34" "\x2E\x20\x6F\x70\x6C\x61\x67\x1E\x30\x30\x1F\x61\x5B\x4B\x62\x68" "\x2E\x5D\x1F\x62\x43\x6C\x61\x75\x73\x65\x6E\x20\x62\xC3\xB8\x67" "\x65\x72\x1F\x63\x31\x39\x38\x38\x1E\x30\x30\x1F\x61\x31\x39\x32" "\x20\x73\x69\x64\x65\x72\x1F\x62\x69\x6C\x6C\x2E\x1F\x63\x32\x36" "\x20\x63\x6D\x1E\x30\x30\x1F\x61\x54\x69\x64\x6C\x69\x67\x65\x72" "\x65\x3A\x20\x31\x2E\x20\x75\x64\x67\x61\x76\x65\x2E\x20\x31\x39" "\x38\x31\x1E\x30\x30\x1F\x61\x37\x39\x2E\x36\x30\x31\x1E\x30\x30" "\x1F\x61\x38\x37\x30\x39\x37\x30\x1F\x62\x30\x35\x36\x37\x35\x30" "\x33\x30\x1E\x30\x30\x1F\x7A\x38\x37\x30\x39\x37\x30\x1E\x30\x30" "\x1F\x61\x31\x2E\x20\x75\x64\x67\x61\x76\x65\x2C\x20\x34\x2E\x20" "\x6F\x70\x6C\x61\x67\x1E\x30\x30\x1F\x63\x31\x39\x38\x38\x1E\x30" "\x30\x1F\x62\x30\x35\x36\x37\x35\x30\x33\x30\x1E\x30\x30\x1F\x63" "\x44\x42\x46\x38\x38\x34\x32\x1E\x1D" }; /* read MARC record from offset 'num' */ char *dummy_marc_record(int num, ODR odr) { if (num < 1) return 0; return marc_records[(num-1) % NO_MARC_RECORDS]; } /* read MARC record and convert to XML */ char *dummy_xml_record(int num, ODR odr) { char *rec = dummy_marc_record(num, odr); if (rec) { const char *result; size_t rlen; int len; yaz_marc_t mt = yaz_marc_create(); yaz_marc_xml(mt, YAZ_MARC_MARCXML); len = yaz_marc_decode_buf(mt, rec, -1, &result, &rlen); if (len > 1) { rec = (char *) odr_malloc(odr, rlen+1); memcpy(rec, result, rlen); rec[rlen] = '\0'; } yaz_marc_destroy(mt); } return rec; } /* * Local variables: * c-basic-offset: 4 * c-file-style: "Stroustrup" * indent-tabs-mode: nil * End: * vim: shiftwidth=4 tabstop=8 expandtab */ yaz-4.2.30/ztest/config1.xml0000644000175000017500000000140311654451754012557 00000000000000 tcp:@:9900 unix:/var/tmp/socket server1.mydomain /var/www/s1 config.cfg localhost /var/www/s2 config.cfg ../etc/pqf.properties server2.mydomain 9900 a /var/www/s3 config.cfg yaz-4.2.30/ztest/ztest.c0000644000175000017500000011361511733047144012025 00000000000000/* This file is part of the YAZ toolkit. * Copyright (C) 1995-2012 Index Data * See the file LICENSE for details. */ /** \file * \brief yaz-ztest Generic Frontend Server */ #if HAVE_CONFIG_H #include #endif #include #include #include #if HAVE_SYS_TIME_H #include #endif #if HAVE_UNISTD_H #include #endif #if HAVE_SYS_SELECT_H #include #endif #ifdef WIN32 #include #endif #include #include #include #include #include #include #include "ztest.h" static int log_level=0; static int log_level_set=0; struct delay { double d1; double d2; }; struct result_set { char *name; char *db; Odr_int hits; struct delay search_delay; struct delay present_delay; struct delay fetch_delay; struct result_set *next; }; struct session_handle { struct result_set *result_sets; }; int ztest_search(void *handle, bend_search_rr *rr); int ztest_sort(void *handle, bend_sort_rr *rr); int ztest_present(void *handle, bend_present_rr *rr); int ztest_esrequest(void *handle, bend_esrequest_rr *rr); int ztest_delete(void *handle, bend_delete_rr *rr); static struct result_set *get_set(struct session_handle *sh, const char *name) { struct result_set *set = sh->result_sets; for (; set; set = set->next) if (!strcmp(name, set->name)) return set; return 0; } static void remove_sets(struct session_handle *sh) { struct result_set *set = sh->result_sets; while (set) { struct result_set *set_next = set->next; xfree(set->name); xfree(set->db); xfree(set); set = set_next; } sh->result_sets = 0; } /** \brief use term value as hit count \param s RPN structure \return >= 0: search term number or -1: not found Traverse RPN tree 'in order' and use term value as hit count. Only terms that looks a numeric is used.. Returns -1 if no sub tree has a hit count term */ static Odr_int get_term_hit(Z_RPNStructure *s) { Odr_int h = -1; switch(s->which) { case Z_RPNStructure_simple: if (s->u.simple->which == Z_Operand_APT) { Z_AttributesPlusTerm *apt = s->u.simple->u.attributesPlusTerm; if (apt->term->which == Z_Term_general) { Odr_oct *oct = apt->term->u.general; if (oct->len > 0 && oct->buf[0] >= '0' && oct->buf[0] <= '9') { WRBUF hits_str = wrbuf_alloc(); wrbuf_write(hits_str, (const char *) oct->buf, oct->len); h = odr_atoi(wrbuf_cstr(hits_str)); wrbuf_destroy(hits_str); } } } break; case Z_RPNStructure_complex: h = get_term_hit(s->u.complex->s1); if (h == -1) h = get_term_hit(s->u.complex->s2); break; } return h; } /** \brief gets hit count for numeric terms in RPN queries \param q RPN Query \return number of hits (random or number for term) This is just for testing.. A real database of course uses the content of a database to establish a value.. In our case, we have a way to trigger a certain hit count. Good for testing of client applications etc */ static Odr_int get_hit_count(Z_Query *q) { if (q->which == Z_Query_type_1 || q->which == Z_Query_type_101) { Odr_int h = -1; h = get_term_hit(q->u.type_1->RPNStructure); if (h == -1) h = rand() % 24; return h; } else return 24; } /** \brief checks if it's a dummy Slow database \param basename database name to check \param association backend association (or NULL if not available) \retval 1 is slow database \retval 0 is not a slow database The Slow database is for testing.. It allows us to simulate a slow server... */ static int check_slow(const char *basename, bend_association association) { if (strncmp(basename, "Slow", 4) == 0) { #if HAVE_UNISTD_H int i, w = 3; if (basename[4]) sscanf(basename+4, "%d", &w); /* wait up to 3 seconds and check if connection is still alive */ for (i = 0; i < w; i++) { if (association && !bend_assoc_is_alive(association)) { yaz_log(YLOG_LOG, "search aborted"); break; } sleep(1); } #endif return 1; } return 0; } static int strcmp_prefix(const char *s, const char *p) { size_t l = strlen(p); if (strlen(s) >= l && !memcmp(s, p, l)) return 1; return 0; } static void init_delay(struct delay *delayp) { delayp->d1 = delayp->d2 = 0.0; } static int parse_delay(struct delay *delayp, const char *value) { if (sscanf(value, "%lf:%lf", &delayp->d1, &delayp->d2) == 2) ; else if (sscanf(value, "%lf", &delayp->d1) == 1) delayp->d2 = 0.0; else return -1; return 0; } static void ztest_sleep(double d) { #ifdef WIN32 Sleep( (DWORD) (d * 1000)); #else struct timeval tv; tv.tv_sec = d; tv.tv_usec = (d - (long) d) * 1000000; select(0, 0, 0, 0, &tv); #endif } static void do_delay(const struct delay *delayp) { double d = delayp->d1; if (d > 0.0) { if (delayp->d2 > d) d += (rand()) * (delayp->d2 - d) / RAND_MAX; ztest_sleep(d); } } static void addterms(ODR odr, Z_FacetField *facet_field, const char *facet_name) { int index; int freq = 100; int length = strlen(facet_name) + 10; char *key = odr_malloc(odr, length); key[0] = '\0'; for (index = 0; index < facet_field->num_terms; index++) { Z_FacetTerm *facet_term; sprintf(key, "%s%d", facet_name, index); yaz_log(YLOG_DEBUG, "facet add term %s %d %s", facet_name, index, key); facet_term = facet_term_create_cstr(odr, key, freq); freq = freq - 10 ; facet_field_term_set(odr, facet_field, facet_term, index); } } Z_OtherInformation *build_facet_response(ODR odr, Z_FacetList *facet_list) { int index, new_index = 0; Z_FacetList *new_list = facet_list_create(odr, facet_list->num); for (index = 0; index < facet_list->num; index++) { struct yaz_facet_attr attrvalues; yaz_facet_attr_init(&attrvalues); attrvalues.limit = 10; yaz_facet_attr_get_z_attributes(facet_list->elements[index]->attributes, &attrvalues); yaz_log(YLOG_LOG, "Attributes: %s %d ", attrvalues.useattr, attrvalues.limit); if (attrvalues.errstring) yaz_log(YLOG_LOG, "Error parsing attributes: %s", attrvalues.errstring); if (attrvalues.limit > 0 && attrvalues.useattr) { new_list->elements[new_index] = facet_field_create(odr, facet_list->elements[index]->attributes, attrvalues.limit); addterms(odr, new_list->elements[new_index], attrvalues.useattr); new_index++; } else { yaz_log(YLOG_DEBUG, "Facet: skipping %s due to 0 limit.", attrvalues.useattr); } } new_list->num = new_index; if (new_index > 0) { Z_OtherInformation *oi = odr_malloc(odr, sizeof(*oi)); Z_OtherInformationUnit *oiu = odr_malloc(odr, sizeof(*oiu)); oi->num_elements = 1; oi->list = odr_malloc(odr, oi->num_elements * sizeof(*oi->list)); oiu->category = 0; oiu->which = Z_OtherInfo_externallyDefinedInfo; oiu->information.externallyDefinedInfo = odr_malloc(odr, sizeof(*oiu->information.externallyDefinedInfo)); oiu->information.externallyDefinedInfo->direct_reference = odr_oiddup(odr, yaz_oid_userinfo_facet_1); oiu->information.externallyDefinedInfo->descriptor = 0; oiu->information.externallyDefinedInfo->indirect_reference = 0; oiu->information.externallyDefinedInfo->which = Z_External_userFacets; oiu->information.externallyDefinedInfo->u.facetList = new_list; oi->list[0] = oiu; return oi; } return 0; } int ztest_search(void *handle, bend_search_rr *rr) { struct session_handle *sh = (struct session_handle*) handle; struct result_set *new_set; const char *db, *db_sep; if (rr->num_bases != 1) { rr->errcode = YAZ_BIB1_COMBI_OF_SPECIFIED_DATABASES_UNSUPP; return 0; } db = rr->basenames[0]; /* Allow Default, db.* and Slow */ if (strcmp_prefix(db, "Default")) ; /* Default is OK in our test */ else if (strcmp_prefix(db, "db")) ; /* db.* is OK in our test */ else if (check_slow(rr->basenames[0], rr->association)) { rr->estimated_hit_count = 1; } else { rr->errcode = YAZ_BIB1_DATABASE_UNAVAILABLE; rr->errstring = rr->basenames[0]; return 0; } new_set = get_set(sh, rr->setname); if (new_set) { if (!rr->replace_set) { rr->errcode = YAZ_BIB1_RESULT_SET_EXISTS_AND_REPLACE_INDICATOR_OFF; return 0; } xfree(new_set->db); } else { new_set = xmalloc(sizeof(*new_set)); new_set->next = sh->result_sets; sh->result_sets = new_set; new_set->name = xstrdup(rr->setname); } new_set->hits = 0; new_set->db = xstrdup(db); init_delay(&new_set->search_delay); init_delay(&new_set->present_delay); init_delay(&new_set->fetch_delay); db_sep = strchr(db, '?'); if (db_sep) { char **names; char **values; int no_parms = yaz_uri_to_array(db_sep+1, rr->stream, &names, &values); int i; for (i = 0; i < no_parms; i++) { const char *name = names[i]; const char *value = values[i]; if (!strcmp(name, "seed")) srand(atoi(value)); else if (!strcmp(name, "search-delay")) parse_delay(&new_set->search_delay, value); else if (!strcmp(name, "present-delay")) parse_delay(&new_set->present_delay, value); else if (!strcmp(name, "fetch-delay")) parse_delay(&new_set->fetch_delay, value); else { rr->errcode = YAZ_BIB1_SERVICE_UNSUPP_FOR_THIS_DATABASE; rr->errstring = odr_strdup(rr->stream, name); } } } if (rr->extra_args) { Z_SRW_extra_arg *a; WRBUF response_xml = wrbuf_alloc(); wrbuf_puts(response_xml, ""); for (a = rr->extra_args; a; a = a->next) { wrbuf_puts(response_xml, "name); wrbuf_puts(response_xml, "\""); if (a->value) { wrbuf_puts(response_xml, " value=\""); wrbuf_xmlputs(response_xml, a->value); wrbuf_puts(response_xml, "\""); } wrbuf_puts(response_xml, "/>"); } wrbuf_puts(response_xml, ""); rr->extra_response_data = odr_strdup(rr->stream, wrbuf_cstr(response_xml)); wrbuf_destroy(response_xml); } rr->hits = get_hit_count(rr->query); if (1) { Z_FacetList *facet_list = yaz_oi_get_facetlist(&rr->search_input); if (facet_list) { yaz_log(YLOG_LOG, "%d Facets in search request.", facet_list->num); rr->search_info = build_facet_response(rr->stream, facet_list); } else yaz_log(YLOG_DEBUG, "No facets parsed search request."); } do_delay(&new_set->search_delay); new_set->hits = rr->hits; return 0; } /* this huge function handles extended services */ int ztest_esrequest(void *handle, bend_esrequest_rr *rr) { /* user-defined handle - created in bend_init */ int *counter = (int*) handle; yaz_log(log_level, "ESRequest no %d", *counter); (*counter)++; if (rr->esr->packageName) yaz_log(log_level, "packagename: %s", rr->esr->packageName); yaz_log(log_level, "Waitaction: " ODR_INT_PRINTF, *rr->esr->waitAction); yaz_log(log_level, "function: " ODR_INT_PRINTF, *rr->esr->function); if (!rr->esr->taskSpecificParameters) { yaz_log(log_level, "No task specific parameters"); } else if (rr->esr->taskSpecificParameters->which == Z_External_itemOrder) { Z_ItemOrder *it = rr->esr->taskSpecificParameters->u.itemOrder; yaz_log(log_level, "Received ItemOrder"); if (it->which == Z_IOItemOrder_esRequest) { Z_IORequest *ir = it->u.esRequest; Z_IOOriginPartToKeep *k = ir->toKeep; Z_IOOriginPartNotToKeep *n = ir->notToKeep; const char *xml_in_response = 0; if (k && k->contact) { if (k->contact->name) yaz_log(log_level, "contact name %s", k->contact->name); if (k->contact->phone) yaz_log(log_level, "contact phone %s", k->contact->phone); if (k->contact->email) yaz_log(log_level, "contact email %s", k->contact->email); } if (k->addlBilling) { yaz_log(log_level, "Billing info (not shown)"); } if (n->resultSetItem) { yaz_log(log_level, "resultsetItem"); yaz_log(log_level, "setId: %s", n->resultSetItem->resultSetId); yaz_log(log_level, "item: " ODR_INT_PRINTF, *n->resultSetItem->item); } if (n->itemRequest) { Z_External *r = (Z_External*) n->itemRequest; ILL_ItemRequest *item_req = 0; ILL_APDU *ill_apdu = 0; if (r->direct_reference) { char oid_name_str[OID_STR_MAX]; oid_class oclass; const char *oid_name = yaz_oid_to_string_buf(r->direct_reference, &oclass, oid_name_str); if (oid_name) yaz_log(log_level, "OID %s", oid_name); if (!oid_oidcmp(r->direct_reference, yaz_oid_recsyn_xml)) { yaz_log(log_level, "ILL XML request"); if (r->which == Z_External_octet) yaz_log(log_level, "%.*s", r->u.octet_aligned->len, r->u.octet_aligned->buf); xml_in_response = "x"; } if (!oid_oidcmp(r->direct_reference, yaz_oid_general_isoill_1)) { yaz_log(log_level, "Decode ItemRequest begin"); if (r->which == ODR_EXTERNAL_single) { odr_setbuf(rr->decode, (char *) r->u.single_ASN1_type->buf, r->u.single_ASN1_type->len, 0); if (!ill_ItemRequest(rr->decode, &item_req, 0, 0)) { yaz_log(log_level, "Couldn't decode ItemRequest %s near %ld", odr_errmsg(odr_geterror(rr->decode)), (long) odr_offset(rr->decode)); } else yaz_log(log_level, "Decode ItemRequest OK"); if (rr->print) { ill_ItemRequest(rr->print, &item_req, 0, "ItemRequest"); odr_reset(rr->print); } } if (!item_req && r->which == ODR_EXTERNAL_single) { yaz_log(log_level, "Decode ILL APDU begin"); odr_setbuf(rr->decode, (char*) r->u.single_ASN1_type->buf, r->u.single_ASN1_type->len, 0); if (!ill_APDU(rr->decode, &ill_apdu, 0, 0)) { yaz_log(log_level, "Couldn't decode ILL APDU %s near %ld", odr_errmsg(odr_geterror(rr->decode)), (long) odr_offset(rr->decode)); yaz_log(log_level, "PDU dump:"); odr_dumpBER(yaz_log_file(), (char *) r->u.single_ASN1_type->buf, r->u.single_ASN1_type->len); } else yaz_log(log_level, "Decode ILL APDU OK"); if (rr->print) { ill_APDU(rr->print, &ill_apdu, 0, "ILL APDU"); odr_reset(rr->print); } } } } if (item_req) { yaz_log(log_level, "ILL protocol version = " ODR_INT_PRINTF, *item_req->protocol_version_num); } } if (k) { Z_External *ext = (Z_External *) odr_malloc(rr->stream, sizeof(*ext)); Z_IUOriginPartToKeep *keep = (Z_IUOriginPartToKeep *) odr_malloc(rr->stream, sizeof(*keep)); Z_IOTargetPart *targetPart = (Z_IOTargetPart *) odr_malloc(rr->stream, sizeof(*targetPart)); rr->taskPackage = (Z_TaskPackage *) odr_malloc(rr->stream, sizeof(*rr->taskPackage)); rr->taskPackage->packageType = odr_oiddup(rr->stream, rr->esr->packageType); rr->taskPackage->packageName = 0; rr->taskPackage->userId = 0; rr->taskPackage->retentionTime = 0; rr->taskPackage->permissions = 0; rr->taskPackage->description = 0; rr->taskPackage->targetReference = (Odr_oct *) odr_malloc(rr->stream, sizeof(Odr_oct)); rr->taskPackage->targetReference->buf = (unsigned char *) odr_strdup(rr->stream, "911"); rr->taskPackage->targetReference->len = rr->taskPackage->targetReference->size = strlen((char *) (rr->taskPackage->targetReference->buf)); rr->taskPackage->creationDateTime = 0; rr->taskPackage->taskStatus = odr_intdup(rr->stream, 0); rr->taskPackage->packageDiagnostics = 0; rr->taskPackage->taskSpecificParameters = ext; ext->direct_reference = odr_oiddup(rr->stream, rr->esr->packageType); ext->indirect_reference = 0; ext->descriptor = 0; ext->which = Z_External_itemOrder; ext->u.itemOrder = (Z_ItemOrder *) odr_malloc(rr->stream, sizeof(*ext->u.update)); ext->u.itemOrder->which = Z_IOItemOrder_taskPackage; ext->u.itemOrder->u.taskPackage = (Z_IOTaskPackage *) odr_malloc(rr->stream, sizeof(Z_IOTaskPackage)); ext->u.itemOrder->u.taskPackage->originPart = k; ext->u.itemOrder->u.taskPackage->targetPart = targetPart; if (xml_in_response) targetPart->itemRequest = z_ext_record_xml(rr->stream, xml_in_response, strlen(xml_in_response)); else targetPart->itemRequest = 0; targetPart->statusOrErrorReport = 0; targetPart->auxiliaryStatus = 0; } } } else if (rr->esr->taskSpecificParameters->which == Z_External_update) { Z_IUUpdate *up = rr->esr->taskSpecificParameters->u.update; yaz_log(log_level, "Received DB Update"); if (up->which == Z_IUUpdate_esRequest) { Z_IUUpdateEsRequest *esRequest = up->u.esRequest; Z_IUOriginPartToKeep *toKeep = esRequest->toKeep; Z_IUSuppliedRecords *notToKeep = esRequest->notToKeep; yaz_log(log_level, "action"); if (toKeep->action) { switch (*toKeep->action) { case Z_IUOriginPartToKeep_recordInsert: yaz_log(log_level, " recordInsert"); break; case Z_IUOriginPartToKeep_recordReplace: yaz_log(log_level, " recordReplace"); break; case Z_IUOriginPartToKeep_recordDelete: yaz_log(log_level, " recordDelete"); break; case Z_IUOriginPartToKeep_elementUpdate: yaz_log(log_level, " elementUpdate"); break; case Z_IUOriginPartToKeep_specialUpdate: yaz_log(log_level, " specialUpdate"); break; default: yaz_log(log_level, " unknown (" ODR_INT_PRINTF ")", *toKeep->action); } } if (toKeep->databaseName) { yaz_log(log_level, "database: %s", toKeep->databaseName); if (!strcmp(toKeep->databaseName, "fault")) { rr->errcode = YAZ_BIB1_DATABASE_UNAVAILABLE; rr->errstring = toKeep->databaseName; } if (!strcmp(toKeep->databaseName, "accept")) rr->errcode = -1; } if (toKeep) { Z_External *ext = (Z_External *) odr_malloc(rr->stream, sizeof(*ext)); Z_IUOriginPartToKeep *keep = (Z_IUOriginPartToKeep *) odr_malloc(rr->stream, sizeof(*keep)); Z_IUTargetPart *targetPart = (Z_IUTargetPart *) odr_malloc(rr->stream, sizeof(*targetPart)); rr->taskPackage = (Z_TaskPackage *) odr_malloc(rr->stream, sizeof(*rr->taskPackage)); rr->taskPackage->packageType = odr_oiddup(rr->stream, rr->esr->packageType); rr->taskPackage->packageName = 0; rr->taskPackage->userId = 0; rr->taskPackage->retentionTime = 0; rr->taskPackage->permissions = 0; rr->taskPackage->description = 0; rr->taskPackage->targetReference = (Odr_oct *) odr_malloc(rr->stream, sizeof(Odr_oct)); rr->taskPackage->targetReference->buf = (unsigned char *) odr_strdup(rr->stream, "123"); rr->taskPackage->targetReference->len = rr->taskPackage->targetReference->size = strlen((char *) (rr->taskPackage->targetReference->buf)); rr->taskPackage->creationDateTime = 0; rr->taskPackage->taskStatus = odr_intdup(rr->stream, 0); rr->taskPackage->packageDiagnostics = 0; rr->taskPackage->taskSpecificParameters = ext; ext->direct_reference = odr_oiddup(rr->stream, rr->esr->packageType); ext->indirect_reference = 0; ext->descriptor = 0; ext->which = Z_External_update; ext->u.update = (Z_IUUpdate *) odr_malloc(rr->stream, sizeof(*ext->u.update)); ext->u.update->which = Z_IUUpdate_taskPackage; ext->u.update->u.taskPackage = (Z_IUUpdateTaskPackage *) odr_malloc(rr->stream, sizeof(Z_IUUpdateTaskPackage)); ext->u.update->u.taskPackage->originPart = keep; ext->u.update->u.taskPackage->targetPart = targetPart; keep->action = odr_intdup(rr->stream, *toKeep->action); keep->databaseName = odr_strdup(rr->stream, toKeep->databaseName); keep->schema = 0; keep->elementSetName = 0; keep->actionQualifier = 0; targetPart->updateStatus = odr_intdup(rr->stream, 1); targetPart->num_globalDiagnostics = 0; targetPart->globalDiagnostics = (Z_DiagRec **) odr_nullval(); targetPart->num_taskPackageRecords = 1; targetPart->taskPackageRecords = (Z_IUTaskPackageRecordStructure **) odr_malloc(rr->stream, sizeof(Z_IUTaskPackageRecordStructure *)); targetPart->taskPackageRecords[0] = (Z_IUTaskPackageRecordStructure *) odr_malloc(rr->stream, sizeof(Z_IUTaskPackageRecordStructure)); targetPart->taskPackageRecords[0]->which = Z_IUTaskPackageRecordStructure_record; targetPart->taskPackageRecords[0]->u.record = z_ext_record_sutrs(rr->stream, "test", 4); targetPart->taskPackageRecords[0]->correlationInfo = 0; targetPart->taskPackageRecords[0]->recordStatus = odr_intdup(rr->stream, Z_IUTaskPackageRecordStructure_success); targetPart->taskPackageRecords[0]->num_supplementalDiagnostics = 0; targetPart->taskPackageRecords[0]->supplementalDiagnostics = 0; } if (notToKeep) { int i; for (i = 0; i < notToKeep->num; i++) { Z_External *rec = notToKeep->elements[i]->record; if (rec->direct_reference) { char oid_name_str[OID_STR_MAX]; const char *oid_name = oid_name = yaz_oid_to_string_buf( rec->direct_reference, 0, oid_name_str); if (oid_name) yaz_log(log_level, "record %d type %s", i, oid_name); } switch (rec->which) { case Z_External_sutrs: if (rec->u.octet_aligned->len > 170) yaz_log(log_level, "%d bytes:\n%.168s ...", rec->u.sutrs->len, rec->u.sutrs->buf); else yaz_log(log_level, "%d bytes:\n%s", rec->u.sutrs->len, rec->u.sutrs->buf); break; case Z_External_octet : if (rec->u.octet_aligned->len > 170) yaz_log(log_level, "%d bytes:\n%.168s ...", rec->u.octet_aligned->len, rec->u.octet_aligned->buf); else yaz_log(log_level, "%d bytes\n%s", rec->u.octet_aligned->len, rec->u.octet_aligned->buf); } } } } } return 0; } /* result set delete */ int ztest_delete(void *handle, bend_delete_rr *rr) { if (rr->num_setnames == 1 && !strcmp(rr->setnames[0], "1")) rr->delete_status = Z_DeleteStatus_success; else rr->delete_status = Z_DeleteStatus_resultSetDidNotExist; return 0; } /* Our sort handler really doesn't sort... */ int ztest_sort(void *handle, bend_sort_rr *rr) { rr->errcode = 0; rr->sort_status = Z_SortResponse_success; return 0; } /* present request handler */ int ztest_present(void *handle, bend_present_rr *rr) { struct session_handle *sh = (struct session_handle*) handle; struct result_set *set = get_set(sh, rr->setname); if (!set) { rr->errcode = YAZ_BIB1_SPECIFIED_RESULT_SET_DOES_NOT_EXIST; rr->errstring = odr_strdup(rr->stream, rr->setname); return 0; } do_delay(&set->present_delay); return 0; } /* retrieval of a single record (present, and piggy back search) */ int ztest_fetch(void *handle, bend_fetch_rr *r) { struct session_handle *sh = (struct session_handle*) handle; char *cp; const Odr_oid *oid = r->request_format; struct result_set *set = get_set(sh, r->setname); if (!set) { r->errcode = YAZ_BIB1_SPECIFIED_RESULT_SET_DOES_NOT_EXIST; r->errstring = odr_strdup(r->stream, r->setname); return 0; } do_delay(&set->fetch_delay); r->last_in_set = 0; r->basename = set->db; r->output_format = r->request_format; if (r->number < 1 || r->number > set->hits) { r->errcode = YAZ_BIB1_PRESENT_REQUEST_OUT_OF_RANGE; return 0; } if (!oid || yaz_oid_is_iso2709(oid)) { cp = dummy_marc_record(r->number, r->stream); if (!cp) { r->errcode = YAZ_BIB1_SYSTEM_ERROR_IN_PRESENTING_RECORDS; r->surrogate_flag = 1; return 0; } else { r->len = strlen(cp); r->record = cp; r->output_format = odr_oiddup(r->stream, yaz_oid_recsyn_usmarc); } } else if (!oid_oidcmp(oid, yaz_oid_recsyn_opac)) { cp = dummy_marc_record(r->number, r->stream); if (!cp) { r->errcode = YAZ_BIB1_SYSTEM_ERROR_IN_PRESENTING_RECORDS; r->surrogate_flag = 1; return 0; } r->record = (char *) dummy_opac(r->number, r->stream, cp); r->len = -1; } else if (!oid_oidcmp(oid, yaz_oid_recsyn_sutrs)) { /* this section returns a small record */ char buf[100]; sprintf(buf, "This is dummy SUTRS record number %d\n", r->number); r->len = strlen(buf); r->record = (char *) odr_malloc(r->stream, r->len+1); strcpy(r->record, buf); } else if (!oid_oidcmp(oid, yaz_oid_recsyn_grs_1)) { r->len = -1; r->record = (char*) dummy_grs_record(r->number, r->stream); if (!r->record) { r->errcode = YAZ_BIB1_SYSTEM_ERROR_IN_PRESENTING_RECORDS; r->surrogate_flag = 1; return 0; } } else if (!oid_oidcmp(oid, yaz_oid_recsyn_postscript)) { char fname[20]; FILE *f; long size; sprintf(fname, "part.%d.ps", r->number); f = fopen(fname, "rb"); if (!f) { r->errcode = YAZ_BIB1_SYSTEM_ERROR_IN_PRESENTING_RECORDS; r->surrogate_flag = 1; return 0; } fseek(f, 0L, SEEK_END); size = ftell(f); if (size <= 0 || size >= 5000000) { r->errcode = YAZ_BIB1_SYSTEM_ERROR_IN_PRESENTING_RECORDS; r->surrogate_flag = 1; } fseek(f, 0L, SEEK_SET); r->record = (char*) odr_malloc(r->stream, size); r->len = size; if (fread(r->record, size, 1, f) != 1) { r->errcode = YAZ_BIB1_SYSTEM_ERROR_IN_PRESENTING_RECORDS; r->surrogate_flag = 1; } fclose(f); } else if (!oid_oidcmp(oid, yaz_oid_recsyn_xml)) { if ((cp = dummy_xml_record(r->number, r->stream))) { r->len = strlen(cp); r->record = cp; } else { r->errcode = YAZ_BIB1_SYSTEM_ERROR_IN_PRESENTING_RECORDS; r->surrogate_flag = 1; return 0; } } else { char buf[OID_STR_MAX]; r->errcode = YAZ_BIB1_RECORD_SYNTAX_UNSUPP; r->errstring = odr_strdup(r->stream, oid_oid_to_dotstring(oid, buf)); return 0; } r->errcode = 0; return 0; } /* * silly dummy-scan what reads words from a file. */ int ztest_scan(void *handle, bend_scan_rr *q) { static FILE *f = 0; static struct scan_entry list[200]; static char entries[200][80]; int hits[200]; char term[80], *p; int i, pos; int term_position_req = q->term_position; int num_entries_req = q->num_entries; /* Throw Database unavailable if other than Default or Slow */ if (!yaz_matchstr(q->basenames[0], "Default")) ; /* Default is OK in our test */ else if (check_slow(q->basenames[0], 0 /* no assoc for scan */)) ; else { q->errcode = YAZ_BIB1_DATABASE_UNAVAILABLE; q->errstring = q->basenames[0]; return 0; } q->errcode = 0; q->errstring = 0; q->entries = list; q->status = BEND_SCAN_SUCCESS; if (!f && !(f = fopen("dummy-words", "r"))) { perror("dummy-words"); exit(1); } if (q->num_entries > 200) { q->errcode = YAZ_BIB1_RESOURCES_EXHAUSTED_NO_RESULTS_AVAILABLE; return 0; } if (q->term) { int len; if (q->term->term->which != Z_Term_general) { q->errcode = YAZ_BIB1_TERM_TYPE_UNSUPP; return 0; } if (*q->step_size != 0) { q->errcode = YAZ_BIB1_ONLY_ZERO_STEP_SIZE_SUPPORTED_FOR_SCAN; return 0; } len = q->term->term->u.general->len; if (len >= (int ) sizeof(term)) len = sizeof(term)-1; memcpy(term, q->term->term->u.general->buf, len); term[len] = '\0'; } else if (q->scanClause) { strncpy(term, q->scanClause, sizeof(term)-1); term[sizeof(term)-1] = '\0'; } else strcpy(term, "0"); for (p = term; *p; p++) if (yaz_islower(*p)) *p = yaz_toupper(*p); fseek(f, 0, SEEK_SET); q->num_entries = 0; for (i = 0, pos = 0; fscanf(f, " %79[^:]:%d", entries[pos], &hits[pos]) == 2; i++, pos < 199 ? pos++ : (pos = 0)) { if (!q->num_entries && strcmp(entries[pos], term) >= 0) /* s-point fnd */ { if ((q->term_position = term_position_req) > i + 1) { q->term_position = i + 1; q->status = BEND_SCAN_PARTIAL; } for (; q->num_entries < q->term_position; q->num_entries++) { int po; po = pos - q->term_position + q->num_entries+1; /* find pos */ if (po < 0) po += 200; if (!strcmp(term, "SD") && q->num_entries == 2) { list[q->num_entries].term = entries[pos]; list[q->num_entries].occurrences = -1; list[q->num_entries].errcode = YAZ_BIB1_SCAN_UNSUPP_VALUE_OF_POSITION_IN_RESPONSE; list[q->num_entries].errstring = "SD for Scan Term"; } else { list[q->num_entries].term = entries[po]; list[q->num_entries].occurrences = hits[po]; } } } else if (q->num_entries) { list[q->num_entries].term = entries[pos]; list[q->num_entries].occurrences = hits[pos]; q->num_entries++; } if (q->num_entries >= num_entries_req) break; } if (feof(f)) q->status = BEND_SCAN_PARTIAL; return 0; } int ztest_explain(void *handle, bend_explain_rr *rr) { if (rr->database && !strcmp(rr->database, "Default")) { rr->explain_buf = "\n" "\t\n" "\t\tlocalhost\n" "\t\t210\n" "\t\n" "\n"; } return 0; } int ztest_update(void *handle, bend_update_rr *rr) { rr->operation_status = "success"; return 0; } bend_initresult *bend_init(bend_initrequest *q) { bend_initresult *r = (bend_initresult *) odr_malloc(q->stream, sizeof(*r)); struct session_handle *sh = xmalloc(sizeof(*sh)); sh->result_sets = 0; if (!log_level_set) { log_level=yaz_log_module_level("ztest"); log_level_set=1; } r->errcode = 0; r->errstring = 0; r->handle = sh; /* tell GFS about our handle */ q->bend_sort = ztest_sort; /* register sort handler */ q->bend_search = ztest_search; /* register search handler */ q->bend_present = ztest_present; /* register present handle */ q->bend_esrequest = ztest_esrequest; q->bend_delete = ztest_delete; q->bend_fetch = ztest_fetch; q->bend_scan = ztest_scan; #if 0 q->bend_explain = ztest_explain; #endif q->bend_srw_scan = ztest_scan; q->bend_srw_update = ztest_update; q->query_charset = "ISO-8859-1"; q->records_in_same_charset = 0; return r; } void bend_close(void *handle) { struct session_handle *sh = (struct session_handle*) handle; remove_sets(sh); xfree(sh); /* release our session */ return; } int main(int argc, char **argv) { return statserv_main(argc, argv, bend_init, bend_close); } /* * Local variables: * c-basic-offset: 4 * c-file-style: "Stroustrup" * indent-tabs-mode: nil * End: * vim: shiftwidth=4 tabstop=8 expandtab */ yaz-4.2.30/ztest/Makefile.in0000644000175000017500000004412411741237726012561 00000000000000# Makefile.in generated by automake 1.11.3 from Makefile.am. # @configure_input@ # Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, # 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011 Free Software # Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ VPATH = @srcdir@ pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ bin_PROGRAMS = yaz-ztest$(EXEEXT) noinst_PROGRAMS = gfs-example$(EXEEXT) subdir = ztest DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/m4/ac_check_icu.m4 \ $(top_srcdir)/m4/acx_pthread.m4 $(top_srcdir)/m4/libtool.m4 \ $(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \ $(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \ $(top_srcdir)/m4/yaz.m4 $(top_srcdir)/m4/yaz_libxml2.m4 \ $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/include/config.h CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = am__installdirs = "$(DESTDIR)$(bindir)" PROGRAMS = $(bin_PROGRAMS) $(noinst_PROGRAMS) am_gfs_example_OBJECTS = gfs-example.$(OBJEXT) gfs_example_OBJECTS = $(am_gfs_example_OBJECTS) gfs_example_LDADD = $(LDADD) gfs_example_DEPENDENCIES = ../src/libyaz_server.la ../src/libyaz.la am_yaz_ztest_OBJECTS = ztest.$(OBJEXT) read-grs.$(OBJEXT) \ read-marc.$(OBJEXT) dummy-opac.$(OBJEXT) yaz_ztest_OBJECTS = $(am_yaz_ztest_OBJECTS) yaz_ztest_LDADD = $(LDADD) yaz_ztest_DEPENDENCIES = ../src/libyaz_server.la ../src/libyaz.la DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir)/include depcomp = $(SHELL) $(top_srcdir)/config/depcomp am__depfiles_maybe = depfiles am__mv = mv -f COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \ $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) LTCOMPILE = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \ --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \ $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) CCLD = $(CC) LINK = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \ --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) \ $(LDFLAGS) -o $@ SOURCES = $(gfs_example_SOURCES) $(yaz_ztest_SOURCES) DIST_SOURCES = $(gfs_example_SOURCES) $(yaz_ztest_SOURCES) ETAGS = etags CTAGS = ctags DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ AMTAR = @AMTAR@ AR = @AR@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CYGPATH_W = @CYGPATH_W@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DLLTOOL = @DLLTOOL@ DSSSL_DIR = @DSSSL_DIR@ DSYMUTIL = @DSYMUTIL@ DTD_DIR = @DTD_DIR@ DUMPBIN = @DUMPBIN@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ FGREP = @FGREP@ GREP = @GREP@ HTML_COMPILE = @HTML_COMPILE@ ICU_CFLAGS = @ICU_CFLAGS@ ICU_CONFIG = @ICU_CONFIG@ ICU_CPPFLAGS = @ICU_CPPFLAGS@ ICU_CXXFLAGS = @ICU_CXXFLAGS@ ICU_LIBS = @ICU_LIBS@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ LD = @LD@ LDFLAGS = @LDFLAGS@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ LIPO = @LIPO@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ MAKEINFO = @MAKEINFO@ MANIFEST_TOOL = @MANIFEST_TOOL@ MAN_COMPILE = @MAN_COMPILE@ MKDIR_P = @MKDIR_P@ NM = @NM@ NMEDIT = @NMEDIT@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ OTOOL = @OTOOL@ OTOOL64 = @OTOOL64@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ PDF_COMPILE = @PDF_COMPILE@ PTHREAD_CC = @PTHREAD_CC@ PTHREAD_CFLAGS = @PTHREAD_CFLAGS@ PTHREAD_LIBS = @PTHREAD_LIBS@ RANLIB = @RANLIB@ READLINE_LIBS = @READLINE_LIBS@ SED = @SED@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ SSL_CFLAGS = @SSL_CFLAGS@ SSL_LIBS = @SSL_LIBS@ STRIP = @STRIP@ TCLSH = @TCLSH@ TCPD_LIBS = @TCPD_LIBS@ TKL_COMPILE = @TKL_COMPILE@ VERSION = @VERSION@ VERSION_HEX = @VERSION_HEX@ VERSION_SHA1 = @VERSION_SHA1@ WIN_FILEVERSION = @WIN_FILEVERSION@ XML2_CFLAGS = @XML2_CFLAGS@ XSLTPROC_COMPILE = @XSLTPROC_COMPILE@ XSL_DIR = @XSL_DIR@ YACC = @YACC@ YAZ_CONFIG_CFLAGS = @YAZ_CONFIG_CFLAGS@ YAZ_CONF_CFLAGS = @YAZ_CONF_CFLAGS@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_ct_AR = @ac_ct_AR@ ac_ct_CC = @ac_ct_CC@ ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ acx_pthread_config = @acx_pthread_config@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ pkgconfigpath = @pkgconfigpath@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ yaz_ztest_SOURCES = ztest.c read-grs.c read-marc.c dummy-opac.c ztest.h gfs_example_SOURCES = gfs-example.c EXTRA_DIST = dummy-words dummy-grs ztest.pem config1.xml LDADD = ../src/libyaz_server.la ../src/libyaz.la AM_CPPFLAGS = -I$(top_srcdir)/include $(XML2_CFLAGS) all: all-am .SUFFIXES: .SUFFIXES: .c .lo .o .obj $(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu ztest/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --gnu ztest/Makefile .PRECIOUS: Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): install-binPROGRAMS: $(bin_PROGRAMS) @$(NORMAL_INSTALL) test -z "$(bindir)" || $(MKDIR_P) "$(DESTDIR)$(bindir)" @list='$(bin_PROGRAMS)'; test -n "$(bindir)" || list=; \ for p in $$list; do echo "$$p $$p"; done | \ sed 's/$(EXEEXT)$$//' | \ while read p p1; do if test -f $$p || test -f $$p1; \ then echo "$$p"; echo "$$p"; else :; fi; \ done | \ sed -e 'p;s,.*/,,;n;h' -e 's|.*|.|' \ -e 'p;x;s,.*/,,;s/$(EXEEXT)$$//;$(transform);s/$$/$(EXEEXT)/' | \ sed 'N;N;N;s,\n, ,g' | \ $(AWK) 'BEGIN { files["."] = ""; dirs["."] = 1 } \ { d=$$3; if (dirs[d] != 1) { print "d", d; dirs[d] = 1 } \ if ($$2 == $$4) files[d] = files[d] " " $$1; \ else { print "f", $$3 "/" $$4, $$1; } } \ END { for (d in files) print "f", d, files[d] }' | \ while read type dir files; do \ if test "$$dir" = .; then dir=; else dir=/$$dir; fi; \ test -z "$$files" || { \ echo " $(INSTALL_PROGRAM_ENV) $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL_PROGRAM) $$files '$(DESTDIR)$(bindir)$$dir'"; \ $(INSTALL_PROGRAM_ENV) $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL_PROGRAM) $$files "$(DESTDIR)$(bindir)$$dir" || exit $$?; \ } \ ; done uninstall-binPROGRAMS: @$(NORMAL_UNINSTALL) @list='$(bin_PROGRAMS)'; test -n "$(bindir)" || list=; \ files=`for p in $$list; do echo "$$p"; done | \ sed -e 'h;s,^.*/,,;s/$(EXEEXT)$$//;$(transform)' \ -e 's/$$/$(EXEEXT)/' `; \ test -n "$$list" || exit 0; \ echo " ( cd '$(DESTDIR)$(bindir)' && rm -f" $$files ")"; \ cd "$(DESTDIR)$(bindir)" && rm -f $$files clean-binPROGRAMS: @list='$(bin_PROGRAMS)'; test -n "$$list" || exit 0; \ echo " rm -f" $$list; \ rm -f $$list || exit $$?; \ test -n "$(EXEEXT)" || exit 0; \ list=`for p in $$list; do echo "$$p"; done | sed 's/$(EXEEXT)$$//'`; \ echo " rm -f" $$list; \ rm -f $$list clean-noinstPROGRAMS: @list='$(noinst_PROGRAMS)'; test -n "$$list" || exit 0; \ echo " rm -f" $$list; \ rm -f $$list || exit $$?; \ test -n "$(EXEEXT)" || exit 0; \ list=`for p in $$list; do echo "$$p"; done | sed 's/$(EXEEXT)$$//'`; \ echo " rm -f" $$list; \ rm -f $$list gfs-example$(EXEEXT): $(gfs_example_OBJECTS) $(gfs_example_DEPENDENCIES) $(EXTRA_gfs_example_DEPENDENCIES) @rm -f gfs-example$(EXEEXT) $(LINK) $(gfs_example_OBJECTS) $(gfs_example_LDADD) $(LIBS) yaz-ztest$(EXEEXT): $(yaz_ztest_OBJECTS) $(yaz_ztest_DEPENDENCIES) $(EXTRA_yaz_ztest_DEPENDENCIES) @rm -f yaz-ztest$(EXEEXT) $(LINK) $(yaz_ztest_OBJECTS) $(yaz_ztest_LDADD) $(LIBS) mostlyclean-compile: -rm -f *.$(OBJEXT) distclean-compile: -rm -f *.tab.c @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/dummy-opac.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gfs-example.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/read-grs.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/read-marc.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ztest.Po@am__quote@ .c.o: @am__fastdepCC_TRUE@ $(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< @am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(COMPILE) -c $< .c.obj: @am__fastdepCC_TRUE@ $(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'` @am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(COMPILE) -c `$(CYGPATH_W) '$<'` .c.lo: @am__fastdepCC_TRUE@ $(LTCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< @am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(LTCOMPILE) -c -o $@ $< mostlyclean-libtool: -rm -f *.lo clean-libtool: -rm -rf .libs _libs ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES) list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in files) print i; }; }'`; \ mkid -fID $$unique tags: TAGS TAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) set x; \ here=`pwd`; \ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in files) print i; }; }'`; \ shift; \ if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ test -n "$$unique" || unique=$$empty_fix; \ if test $$# -gt 0; then \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ "$$@" $$unique; \ else \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ $$unique; \ fi; \ fi ctags: CTAGS CTAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in files) print i; }; }'`; \ test -z "$(CTAGS_ARGS)$$unique" \ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ $$unique GTAGS: here=`$(am__cd) $(top_builddir) && pwd` \ && $(am__cd) $(top_srcdir) \ && gtags -i $(GTAGS_ARGS) "$$here" distclean-tags: -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags distdir: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done check-am: all-am check: check-am all-am: Makefile $(PROGRAMS) installdirs: for dir in "$(DESTDIR)$(bindir)"; do \ test -z "$$dir" || $(MKDIR_P) "$$dir"; \ done install: install-am install-exec: install-exec-am install-data: install-data-am uninstall: uninstall-am install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-am install-strip: if test -z '$(STRIP)'; then \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ install; \ else \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ fi mostlyclean-generic: clean-generic: distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." clean: clean-am clean-am: clean-binPROGRAMS clean-generic clean-libtool \ clean-noinstPROGRAMS mostlyclean-am distclean: distclean-am -rm -rf ./$(DEPDIR) -rm -f Makefile distclean-am: clean-am distclean-compile distclean-generic \ distclean-tags dvi: dvi-am dvi-am: html: html-am html-am: info: info-am info-am: install-data-am: install-dvi: install-dvi-am install-dvi-am: install-exec-am: install-binPROGRAMS install-html: install-html-am install-html-am: install-info: install-info-am install-info-am: install-man: install-pdf: install-pdf-am install-pdf-am: install-ps: install-ps-am install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-am -rm -rf ./$(DEPDIR) -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-am mostlyclean-am: mostlyclean-compile mostlyclean-generic \ mostlyclean-libtool pdf: pdf-am pdf-am: ps: ps-am ps-am: uninstall-am: uninstall-binPROGRAMS .MAKE: install-am install-strip .PHONY: CTAGS GTAGS all all-am check check-am clean clean-binPROGRAMS \ clean-generic clean-libtool clean-noinstPROGRAMS ctags \ distclean distclean-compile distclean-generic \ distclean-libtool distclean-tags distdir dvi dvi-am html \ html-am info info-am install install-am install-binPROGRAMS \ install-data install-data-am install-dvi install-dvi-am \ install-exec install-exec-am install-html install-html-am \ install-info install-info-am install-man install-pdf \ install-pdf-am install-ps install-ps-am install-strip \ installcheck installcheck-am installdirs maintainer-clean \ maintainer-clean-generic mostlyclean mostlyclean-compile \ mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \ tags uninstall uninstall-am uninstall-binPROGRAMS # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: yaz-4.2.30/ztest/ztest.pem0000644000175000017500000000404411654451754012367 00000000000000-----BEGIN RSA PRIVATE KEY----- MIICXQIBAAKBgQCotVYm6AcsMl5TTT11CKdUppTF2UrvO1HbuTb3fO1/o21QQROk BJOoHjhy450rvVNZAkV9eyEhYEjuJsq+SGpIaD+lQHSxwPgVzgmsMjES75q9dCEX XWz+4Q6HvI23BEmEqjlVOPQwMBUJ1218YBYlnEWmM87d8mlQbMIVnEOtRQIDAQAB AoGAYju0PlM8We+6HKcM8ehoBlI4rjsn9sSDlXzzFIgZggiWzfQWi5pen7V5COyf x6glr94yuC3JzLVTwde0lbd0qmJ7HUuOqUCwRt1WbdIrCXwveonEvxXbap+8H5kf h0whNjf29Z9dJ53tmP7vKnM7jG3UdViI8r89xcbNZUO4mMECQQDTgmb9w9DbTx8N AeMm1F2n+xeCoL8p1pYADbzSvsTO+6uVsKlapNiE0buVHQVpprC9sq4s0ytCT2Iq XwlgEjqPAkEAzDIioUhMqxjdwqicAyUi7ia9tdOUPUjopKJXD5jYXnbxRuTj9qgr zQoMYIdbykeHe7XVDi+uVuZ7fBz7lx9U6wJASi4dAvlPYetQ/5Xe3fpzUnvc1gKc qQbKmwA2bk9b5SAdIKXR76mLCqIoQPbptBEzQYTOU4hITrxauHOWbSxXfwJBAKJk XNYXQaHwrKxam3iE2Dq95LHuCj6S9TG5SbPFwo2d2lSfRAytwefWzfEWtRExwbXI 7h/SG7xQoHQcOJn++PECQQDESoJLIzpi4kn4R5lnnpFPHOybFe29NtdnulVuW33C tbpAUv5MxcE8yl2YGy3YheM0HwSaaFtTD6KTc+eKgESv -----END RSA PRIVATE KEY----- -----BEGIN CERTIFICATE----- MIIDRTCCAq6gAwIBAgIBADANBgkqhkiG9w0BAQQFADB7MQswCQYDVQQGEwJESzEQ MA4GA1UECBMHRGVubWFyazETMBEGA1UEBxMKQ29wZW5oYWdlbjETMBEGA1UEChMK SW5kZXggRGF0YTEOMAwGA1UEAxMFZ2FtbWExIDAeBgkqhkiG9w0BCQEWEWFkYW1A aW5kZXhkYXRhLmRrMB4XDTAwMTExNzEzMjcwM1oXDTAxMTExNzEzMjcwM1owezEL MAkGA1UEBhMCREsxEDAOBgNVBAgTB0Rlbm1hcmsxEzARBgNVBAcTCkNvcGVuaGFn ZW4xEzARBgNVBAoTCkluZGV4IERhdGExDjAMBgNVBAMTBWdhbW1hMSAwHgYJKoZI hvcNAQkBFhFhZGFtQGluZGV4ZGF0YS5kazCBnzANBgkqhkiG9w0BAQEFAAOBjQAw gYkCgYEAqLVWJugHLDJeU009dQinVKaUxdlK7ztR27k293ztf6NtUEETpASTqB44 cuOdK71TWQJFfXshIWBI7ibKvkhqSGg/pUB0scD4Fc4JrDIxEu+avXQhF11s/uEO h7yNtwRJhKo5VTj0MDAVCddtfGAWJZxFpjPO3fJpUGzCFZxDrUUCAwEAAaOB2DCB 1TAdBgNVHQ4EFgQUJcRxF98VXU1OWFClSRftT+DE/gUwgaUGA1UdIwSBnTCBmoAU JcRxF98VXU1OWFClSRftT+DE/gWhf6R9MHsxCzAJBgNVBAYTAkRLMRAwDgYDVQQI EwdEZW5tYXJrMRMwEQYDVQQHEwpDb3BlbmhhZ2VuMRMwEQYDVQQKEwpJbmRleCBE YXRhMQ4wDAYDVQQDEwVnYW1tYTEgMB4GCSqGSIb3DQEJARYRYWRhbUBpbmRleGRh dGEuZGuCAQAwDAYDVR0TBAUwAwEB/zANBgkqhkiG9w0BAQQFAAOBgQCYEokPcevL eW3VaNrSO5hPVm55EAVFDwpuD9zFX1IUU4WGfil8GtTD975q+fSX2+ZZXg3nNdfE RovtBFsQrnlCA207AAeEP+j9PpXuOI1HwtMx7SRpf0cmLtIf+1JKQPYQZhsHugDE wxVnHCW7NF5ZEvlRgKe7yjyq7svyA9AsXw== -----END CERTIFICATE----- yaz-4.2.30/ztest/read-grs.c0000644000175000017500000000617211733047144012357 00000000000000/* This file is part of the YAZ toolkit. * Copyright (C) 1995-2012 Index Data * See the file LICENSE for details. */ /** \file * \brief Little toy-thing to read GRS-1 records from a file. */ #if HAVE_CONFIG_H #include #endif #include #include #include #include #include "ztest.h" #define GRS_MAX_FIELDS 50 static Z_GenericRecord *read_grs1(FILE *f, ODR o) { char line[512], *buf; int type, ivalue; char value[512]; Z_GenericRecord *r = 0; for (;;) { Z_TaggedElement *t; Z_ElementData *c; while (fgets(buf = line, 512, f)) { while (*buf && yaz_isspace(*buf)) buf++; if (!*buf || *buf == '#') continue; break; } if (*buf == '}') return r; if (sscanf(buf, "(%d,%[^)])", &type, value) != 2) { yaz_log(YLOG_WARN, "Bad data in '%s'", buf); return 0; } if (!type && *value == '0') return r; if (!(buf = strchr(buf, ')'))) return 0; buf++; while (*buf && yaz_isspace(*buf)) buf++; if (!*buf) return 0; if (!r) { r = (Z_GenericRecord *)odr_malloc(o, sizeof(*r)); r->elements = (Z_TaggedElement **) odr_malloc(o, sizeof(Z_TaggedElement*) * GRS_MAX_FIELDS); r->num_elements = 0; } r->elements[r->num_elements] = t = (Z_TaggedElement *) odr_malloc(o, sizeof(Z_TaggedElement)); t->tagType = odr_intdup(o, type); t->tagValue = (Z_StringOrNumeric *) odr_malloc(o, sizeof(Z_StringOrNumeric)); if ((ivalue = atoi(value))) { t->tagValue->which = Z_StringOrNumeric_numeric; t->tagValue->u.numeric = odr_intdup(o, ivalue); } else { t->tagValue->which = Z_StringOrNumeric_string; t->tagValue->u.string = (char *)odr_malloc(o, strlen(value)+1); strcpy(t->tagValue->u.string, value); } t->tagOccurrence = 0; t->metaData = 0; t->appliedVariant = 0; t->content = c = (Z_ElementData *)odr_malloc(o, sizeof(Z_ElementData)); if (*buf == '{') { c->which = Z_ElementData_subtree; c->u.subtree = read_grs1(f, o); } else { c->which = Z_ElementData_string; buf[strlen(buf)-1] = '\0'; c->u.string = odr_strdup(o, buf); } r->num_elements++; } } Z_GenericRecord *dummy_grs_record (int num, ODR o) { FILE *f = fopen("dummy-grs", "r"); char line[512]; Z_GenericRecord *r = 0; int n; if (!f) return 0; while (fgets(line, 512, f)) if (*line == '#' && sscanf(line, "#%d", &n) == 1 && n == num) { r = read_grs1(f, o); break; } fclose(f); return r; } /* * Local variables: * c-basic-offset: 4 * c-file-style: "Stroustrup" * indent-tabs-mode: nil * End: * vim: shiftwidth=4 tabstop=8 expandtab */ yaz-4.2.30/ztest/dummy-grs0000644000175000017500000000310311654451754012355 00000000000000#1 (1,1) This is a test record (0,0) #2 (1,2) title (1,8) { (1,9) Author thing (1,10) Other thing (1,11) { (1,12) test (1,14) Deeper } } (0,0) #3 (3,title) The Ugly Duckling (3,author) { (3,nationality) Danish (3,name) Andersen, H.C. } (3,subject) Fairy tale about duck who would be swan and does so in end. (0,0) #4 (3,title) This is a fairly deeply nested GRS-1 Record (3,level1) { (3,level2) { (3,level3) { (3,level4) { (3,level5) { (3,level6) { (3,level7) Whew!! This is silly (3,hmm) Let's hope it never comes to this. } (3,level6) Uhm. } (3,level5) Down again. } (3,level4) Down further. } (3,level3) Down... } (3,level2) Down... } (3,level1) Down... (0,0) #5 (1,1) Data (1,2) Stuff (0,0) #6 (1,1) GGGGGGGGGGGGGGGGGGG (1,1) GGGGGGGGGGGGGGGGGGG (1,1) GGGGGGGGGGGGGGGGGGG (1,1) GGGGGGGGGGGGGGGGGGG (1,1) GGGGGGGGGGGGGGGGGGG (1,1) GGGGGGGGGGGGGGGGGGG (1,1) GGGGGGGGGGGGGGGGGGG (1,1) GGGGGGGGGGGGGGGGGGG (1,1) GGGGGGGGGGGGGGGGGGG (1,1) GGGGGGGGGGGGGGGGGGG (1,1) GGGGGGGGGGGGGGGGGGG (1,1) GGGGGGGGGGGGGGGGGGG (0,0) #7 (2,1) Zen and the Art of Motorcycle Maintenance (2,6) An inquiry into values (4,52) Robert M. Pirsig (4,70) { (4,90) { (2,7) Transworld Publishers, ltd. (2,11) Century House, 61-63 Uxbridge Road, London } } (4,27) Just a silly test record, really. (0,0) #8 (3,someField) Ok.. this is the last of the test records. (3,someFIeld) It's time to get back to work. (0,0) #9 (1,1) This is a test record (0,0) #10 (1,1) This is a test record (0,0) #11 (1,1) This is a test record (0,0) yaz-4.2.30/ztest/gfs-example.c0000644000175000017500000000553211733047144013062 00000000000000/* This file is part of the YAZ toolkit. * Copyright (C) 1995-2012 Index Data * See the file LICENSE for details. */ /** \file * \brief Demonstration of Generic Frontend Server API */ #if HAVE_CONFIG_H #include #endif #include #include #include #include #include #include #include /* session handle . Put anything you like in here! */ struct my_handle { int counter; }; static int my_search(void *handle, bend_search_rr *rr) { struct my_handle *my_p = (struct my_handle *) handle; if (rr->num_bases != 1) { rr->errcode = YAZ_BIB1_COMBI_OF_SPECIFIED_DATABASES_UNSUPP; return 0; } /* Throw Database unavailable if other than Default */ if (!yaz_matchstr (rr->basenames[0], "Default")) ; /* Default is OK in our test */ else { rr->errcode = YAZ_BIB1_DATABASE_UNAVAILABLE; rr->errstring = rr->basenames[0]; return 0; } rr->hits = 123; /* dummy hit count */ my_p->counter++; return 0; } /* retrieval of a single record (present, and piggy back search) */ static int my_fetch(void *handle, bend_fetch_rr *r) { const Odr_oid *oid = r->request_format; r->last_in_set = 0; r->basename = "Default"; r->output_format = r->request_format; /* if no record syntax was given assume XML */ if (!oid || !oid_oidcmp(oid, yaz_oid_recsyn_xml)) { char buf[40]; yaz_snprintf(buf, sizeof(buf), "%d\n", r->number); r->output_format = odr_oiddup(r->stream, yaz_oid_recsyn_xml); r->record = odr_strdup(r->stream, buf); r->len = strlen(r->record); } else { /* only xml syntax supported . Return diagnostic */ char buf[OID_STR_MAX]; r->errcode = YAZ_BIB1_RECORD_SYNTAX_UNSUPP; r->errstring = odr_strdup(r->stream, oid_oid_to_dotstring(oid, buf)); } return 0; } static bend_initresult *my_init(bend_initrequest *q) { bend_initresult *r = (bend_initresult *) odr_malloc (q->stream, sizeof(*r)); struct my_handle *my_p = (struct my_handle *) xmalloc (sizeof(*my_p)); my_p->counter = 0; r->errcode = 0; r->errstring = 0; r->handle = my_p; /* user handle */ q->bend_search = my_search; /* register search handler */ q->bend_fetch = my_fetch; /* register fetch handle */ q->query_charset = "UTF-8"; q->records_in_same_charset = 1; return r; } static void my_close(void *handle) { xfree(handle); /* release our user-defined handle */ return; } int main(int argc, char **argv) { return statserv_main(argc, argv, my_init, my_close); } /* * Local variables: * c-basic-offset: 4 * c-file-style: "Stroustrup" * indent-tabs-mode: nil * End: * vim: shiftwidth=4 tabstop=8 expandtab */ yaz-4.2.30/ztest/dummy-words0000644000175000017500000002371311654451754012731 000000000000000:44 0OK:2 0SUCCESS:2 1:41 10:5 2:2 210:4 3:2 301024:4 3536:2 45:2 7:2 8:2 99:2 A:249 ABLE:4 ABOUT:13 ABOVE:2 ABSENT:4 ACCESS:10 ACCORDING:2 ACTUAL:3 ACTUALLY:2 ADAPT:2 ADD:4 ADDED:4 ADDINFO:2 ADDING:3 ADDITION:3 ADDRESS:19 ADDRESSES:6 AFTER:10 AGAIN:8 AGAINST:2 ALL:21 ALLOCATE:9 ALLOCATED:14 ALLOCATES:2 ALLOCATING:2 ALLOCATION:2 ALLOW:5 ALLOWED:3 ALONG:2 ALREADY:7 ALSO:9 ALTERNATIVE:2 ALTHOUGH:6 ALWAYS:7 AN:69 AND:161 ANY:22 APDUS:2 API:12 APIS:2 APPEAR:2 APPLICATION:10 APPLICATIONS:7 APPROACH:4 ARCHIVE:2 ARE:63 ARGUMENT:6 ARISES:3 ARM:5 AROUND:2 ARRAY:11 AS:75 ASN:12 ASN1:23 ASSOCIATION:9 ASSUME:8 ASYNCHRONOUS:5 AT:40 ATTRIBUTESET:2 AUTHORS:2 AVAILABLE:5 AWARE:3 B:4 BACKEND:18 BACKENDH:4 BADN:2 BASE:2 BASED:5 BASENAME:2 BASIC:3 BE:123 BECAUSE:6 BEEN:21 BEFORE:12 BEGINNING:5 BEHAVIOR:2 BEING:2 BELONGING:2 BELOW:5 BEND:3 BENDDELETEREQUEST:4 BENDDELETERESPONSEVOID:2 BENDDELETERESULT:6 BENDDELETEVOID:2 BENDFETCHREQUEST:4 BENDFETCHRESPONSEVOID:2 BENDFETCHRESULT:6 BENDFETCHVOID:2 BENDINITBENDINITREQUEST:2 BENDINITREQUEST:3 BENDINITRESULT:4 BENDSCANRESULT:2 BENDSEARCHREQUEST:6 BENDSEARCHRESPONSEVOID:2 BENDSEARCHRESULT:8 BENDSEARCHVOID:2 BER:4 BERENCODED:3 BETTER:2 BETWEEN:9 BEYOND:3 BIT:6 BITMASK:5 BITNO:3 BITS:5 BLOCK:4 BLOCKING:6 BOOLEAN:7 BOOLT:4 BOOLTNULL:3 BOOLTTRUE:3 BOOLVAL:4 BOTH:3 BRIEF:2 BUF:11 BUFFER:20 BUFFERP:3 BUT:15 BY:58 BYTES:4 C:21 CALL:41 CALLED:8 CALLING:8 CALLS:6 CAN:61 CANGROW:4 CANNOT:3 CANT:3 CAPABILITIES:3 CARE:4 CASE:9 CASES:4 CERTAIN:2 CHANGE:3 CHANGES:3 CHAR:39 CHARACTER:6 CHARINDEX:2 CHARYAZ:2 CHECK:2 CHOICE:11 CHUNKS:2 CLASS:10 CLEAN:2 CLEAR:2 CLIENT:11 CLOSE:3 CODE:3 COMES:3 COMMAND:2 COMMANDLINE:2 COMMON:3 COMMUNICATION:10 COMMUNICATIONS:2 COMPACT:3 COMPILE:2 COMPILER:6 COMPLETE:4 COMPLETED:3 COMPLEX:9 COMPLEXITY:2 COMSTACK:14 COMSTACKH:2 CONDITION:7 CONFIGNAME:2 CONNECT:4 CONNECTION:14 CONNECTIONS:3 CONSISTS:4 CONST:4 CONSTANT:3 CONSTANTS:3 CONSTRUCT:2 CONSTRUCTED:6 CONSTRUCTION:3 CONSTRUCTIONS:2 CONTAIN:3 CONTAINED:2 CONTAINS:4 CONTENTS:4 CONTEXT:3 CONTROL:4 COPY:2 COPYRIGHT:3 CORRECT:3 CORRESPONDING:9 CORRESPONDS:2 COULD:7 COURSE:2 CRASH:2 CREATE:8 CREATED:3 CSACCEPTCOMSTACK:2 CSBINDCOMSTACK:2 CSCLOSECOMSTACK:2 CSCONNECT:2 CSCONNECTCOMSTACK:2 CSCREATECSTYPE:2 CSERRLIST:2 CSERRNO:2 CSGET:8 CSGETCOMSTACK:2 CSLISTEN:3 CSLISTENCOMSTACK:2 CSLOOKCOMSTACK:2 CSMORE:6 CSMORECOMSTACK:2 CSPERRORCOMSTACK:2 CSPUTCOMSTACK:2 CSRCVCONNECT:2 CSRCVCONNECTCOMSTACK:2 CSSTACKERRCOMSTACK:2 CURRENT:9 CURRENTLY:4 DAMAGES:2 DATA:54 DATABASE:24 DATABASENAMESCHARNULL:2 DATABASES:2 DATAYAZ:2 DEBUGGING:2 DECODE:11 DECODED:2 DECODES:2 DECODING:18 DEFAULT:9 DEFAULTS:2 DEFINE:3 DEFINED:14 DEFINITION:11 DEFINITIONS:10 DELETE:3 DEMO:2 DEPENDING:5 DERIVED:3 DESC:2 DESCRIBED:4 DESCRIPTOR:2 DESIGNED:2 DESIRED:2 DETERMINE:4 DETERMINES:2 DEVELOPMENT:2 DIAGNOSTIC:8 DIFFERENT:14 DIFFERENTLY:2 DIGITS:2 DIRECT:2 DIRECTION:2 DIRECTORY:13 DISCONNECT:2 DISCRIMINATOR:5 DISTRIBUTION:3 DN:2 DO:7 DOCUMENT:2 DOCUMENTATION:5 DOES:4 DOESNT:6 DONE:7 DONT:9 DURING:4 EACH:18 EASILY:3 EFFECT:2 EFFICIENT:2 EG:6 EITHER:17 ELEMENT:4 ELEMENTS:10 EMPTY:4 ENCODE:6 ENCODED:8 ENCODERS:2 ENCODING:21 ENCODINGDECODING:2 END:3 ENDPOINT:7 ENSURE:3 ENSURES:2 ENTRIES:2 ENUM:7 EQUIVALENT:2 ERRCODE:7 ERROR:31 ERRSTRING:7 ESTABLISH:2 ESTABLISHMENT:2 ETC:4 EVEN:4 EVENT:9 EVENTHANDLING:2 EVERYTHING:5 EXACTLY:2 EXAMINED:2 EXAMPLE:3 EXAMPLES:2 EXCEPT:2 EXCHANGE:5 EXISTING:5 EXPECTED:4 EXPLAIN:2 EXPLICIT:4 EXPLICITLY:3 EXTERN:4 EXTERNAL:2 EXTRA:6 FACILITIES:2 FACILITY:4 FAILED:2 FAIRLY:8 FAR:5 FD:11 FEW:2 FIDDLE:2 FIELD:10 FIELDS:6 FIELDTYPEDEFAULT:15 FILE:18 FILES:4 FIND:3 FIRST:11 FIT:2 FLAG:5 FOLLOW:3 FOLLOWED:2 FOLLOWING:5 FOR:115 FORK:4 FORM:9 FORMAT:8 FOUND:10 FREE:3 FREE2:2 FREED:2 FREELIST:2 FROM:26 FRONTEND:11 FULL:10 FULLY:2 FUN:5 FUNCTION:93 FUNCTIONS:43 FURNISS:3 FURTHER:3 FUTURE:6 GCC:2 GENERAL:7 GENERALITY:2 GENERALLY:14 GET:6 GIVE:2 GIVEN:9 GIVES:3 GLOBAL:5 GO:4 GOOD:5 GUIDE:2 HAD:6 HANDED:2 HANDLE:54 HAPPENS:2 HAPPY:5 HAS:34 HAVE:43 HAVENT:2 HEADER:2 HELP:2 HERE:4 HEX:2 HIGHERLEVEL:2 HITS:3 HOLDS:4 HOST:2 HOSTNAME:3 HOW:5 HUMANREADABLE:2 IDENTIFIERS:7 IF:87 IGNORED:3 IMMEDIATELY:7 IMPLEMENT:8 IMPLEMENTATION:11 IMPLEMENTATIONID:2 IMPLEMENTATIONNAME:2 IMPLEMENTATIONS:7 IMPLEMENTATIONVERSIONCHARYAZVERSION:2 IMPLEMENTED:3 IMPLEMENTING:4 IMPLEMENTS:3 IMPLICIT:8 IMPORTANT:6 IN:156 INCLUDE:15 INCLUDING:3 INCOMING:5 INDEPENDENT:4 INDEX:8 INDICATE:2 INDICATES:2 INDIRECT:3 INDIVIDUAL:9 INDIVIDUALLY:2 INFOINDEXPINGDK:2 INFORMATION:6 INITIALIZATION:2 INITIALIZE:2 INITIALIZED:4 INITREQUEST:3 INPUT:3 INSTALLATION:2 INSTANCE:5 INSTEAD:3 INT:172 INTEGER:16 INTEGRATION:2 INTERESTED:2 INTERFACE:33 INTERFACES:5 INTERNAL:4 INTERNALLY:2 INTERPRETED:2 INTO:8 INTVAL:4 INVOCATION:2 IO:2 IPNUMBER:2 IS:205 ISNT:3 ISODE:5 IT:92 ITS:25 ITSELF:6 JUST:5 KEEP:3 KEYWORD:2 KIND:3 L:2 LANGUAGE:2 LARGE:3 LAST:5 LASTINSET:2 LATER:5 LATEST:2 LAYER:2 LAYERS:4 LEAST:5 LEAVE:2 LEN:17 LENGTH:8 LESS:3 LEVEL:8 LIBMOSIA:2 LIBRARY:13 LICENSE:2 LIKE:22 LIKELY:3 LIKES:2 LIMITED:3 LINE:5 LINK:4 LIST:3 LISTEN:2 LISTENER:5 LISTENING:2 LITTLE:5 LIVE:2 LOCAL:3 LOG:2 LOGFILE:2 LOGLEVEL:2 LONG:2 LONGER:3 LOOK:16 LOOKS:3 LOWER:6 LOWLEVEL:2 MACRO:2 MACROS:4 MAIL:2 MAIN:4 MAINTAIN:2 MAKE:14 MAKEFILE:3 MAKES:2 MALLOC2:2 MANAGEMENT:6 MANAGING:4 MANIFEST:2 MANY:5 MAP:2 MAPPING:3 MARK:2 MATCH:3 MATTER:2 MAXIMUM:4 MAXIMUMRECORDSIZE:2 MAY:16 MAYBE:2 MEANS:2 MECHANISM:8 MEMBER:7 MEMBERS:10 MEMORY:28 MESSAGE:11 METHOD:2 METHODS:2 MIGHT:15 MINIMUM:2 MODE:20 MODEL:3 MODIFY:2 MODULE:19 MODULES:2 MORE:15 MOSI:2 MOSISTRTOADDR:2 MOSISTRTOADDRCHAR:2 MOSITYPE:2 MOST:12 MOVE:2 MUST:2 MYARRAY:4 MYCHOICE:3 MYCHOICEOTHER:2 MYCHOICETAGGED:2 MYCHOICEUNTAGGED:2 MYINT:2 MYSEQUENCE:10 MYSEQUENCEODR:3 NAME:16 NAMED:2 NAMES:2 NECESSARY:5 NEED:25 NEEDED:3 NEEDS:2 NEGOTIATION:3 NETBUF:2 NETWORK:6 NEW:21 NEXT:6 NIBBLE:3 NO:19 NONBLOCKING:6 NONZERO:3 NORMAL:2 NOT:32 NOTE:21 NOTICE:3 NOW:2 NULL:34 NUM:2 NUMBER:18 NUMBEROFRECORDSRETURNED:2 NUMDATABASENAMES:2 O:65 OBJECT:7 OCCURS:4 OCTET:3 OCTETSTRING:2 ODIRECTION:3 ODR:62 ODRARM:5 ODRBITMASK:7 ODRBOOLO:3 ODRCONSTRUCTED:2 ODRCONTEXT:5 ODRCREATEMEMINT:2 ODRDECODE:4 ODRDESTROYODR:2 ODRERRLIST:2 ODREXPLICIT:5 ODREXTRACTMEMODR:2 ODRFUN:3 ODRGETBUFODR:2 ODRGETERRORODR:2 ODRH:2 ODRIMPLICIT:6 ODRIMPLICITSETTAGODR:2 ODRINTEGER:5 ODRINTEGERO:3 ODRINTEGERODR:2 ODRMALLOC:6 ODRMALLOCO:3 ODRMALLOCODR:2 ODRMEM:3 ODROCT:3 ODROID:3 ODROIDNULL:3 ODROKO:5 ODRRELEASEMEMODRMEM:2 ODRRESET:13 ODRRESETODR:2 ODRSEQUENCEBEGINO:3 ODRSEQUENCEENDO:3 ODRSETBUF:3 ODRSETBUFODR:2 OF:290 OFF:2 OFFERS:2 OFTEN:3 OID:8 OIDENT:5 OIDPROTO:3 OIDS:2 OK:2 ON:59 ONCE:7 ONE:27 ONLY:16 OPAQUE:2 OPEN:3 OPERATE:2 OPERATION:9 OPERATIONS:4 OPTION:4 OPTIONAL:41 OPTIONS:10 OR:86 OSF1:2 OSI:16 OTHER:23 OTHERS:2 OTHERWISE:3 OUR:5 OUT:7 OUTPUT:4 OVER:5 OWN:8 P:46 PACKAGE:11 PACKAGES:7 PACKET:2 PARAMETER:17 PARAMETERS:8 PART:7 PARTIAL:2 PASSED:2 PBOOLVAL:3 PDU:11 PDUS:16 PEER:3 PENDING:3 PERFORM:3 PERMISSION:3 PETER:3 PINTVAL:3 PLACE:6 PLACED:2 PLATFORMS:5 POINT:8 POINTED:5 POINTER:22 POINTERS:8 POINTS:2 PORT:6 PORTABLE:2 PORTNUMBER:2 POSSIBILITY:2 POSSIBLE:9 PRACTICAL:2 PREFERREDMESSAGESIZE:2 PREFERREDRECORDSYNTAXODROIDNULL:2 PREFIX:2 PREPARE:2 PRESENT:4 PRESENTATION:5 PRESENTSTATUSINT:2 PRIMARY:3 PRIMITIVE:18 PRIMITIVES:2 PRINTING:2 PRINTS:2 PRIVATE:2 PROBABLY:3 PROBLEM:5 PROBLEMS:5 PROCESS:9 PROCESSING:5 PROGRAM:3 PROGRAMMER:2 PROGRAMMING:4 PROTO:3 PROTOCOL:39 PROTOCOLS:5 PROTOCOLVERSION:2 PROTOH:2 PROTOSR:3 PROTOTYPES:2 PROTOZ3950:3 PROVIDE:15 PROVIDED:29 PROVIDES:13 PURPOSE:6 PURPOSES:3 QUALITY:2 QUERY:8 QUESTIONS:2 QUITE:5 R:12 RATHER:5 READ:9 REAL:2 REALISE:2 REALLY:2 REASON:5 RECEIVED:6 RECOMMEND:2 RECORD:16 RECORDS:6 RECYCLED:2 REFER:6 REFERENCE:8 REFERENCEID:15 RELEASE:8 RELEASED:2 RELEASES:6 REPEATEDLY:3 REPLACESET:2 REPORTS:2 REPRESENT:2 REPRESENTATION:8 REPRESENTATIONS:2 REPRESENTING:3 REPRESENTS:2 REQUEST:12 REQUESTS:3 REQUIRE:2 REQUIRED:11 REQUIREMENTS:2 REQUIRING:2 RESOURCES:2 RESPOND:2 RESPONSE:3 REST:3 RESULT:8 RESULTING:2 RESULTSETWANTED:2 RESVALP:3 RETAIN:4 RETURN:40 RETURNED:7 RETURNS:11 RFC1006:3 ROLE:5 ROUTINE:5 ROUTINES:3 RPN:2 RULES:2 RUN:4 RUNTIME:2 S:2 SAME:11 SAY:7 SCHEME:2 SEARCH:3 SEARCHREQUEST:3 SECTION:11 SEE:12 SEEN:2 SELECT2:5 SELECTOR:2 SEND:2 SENDS:2 SENT:2 SEPARATE:3 SEQUENCE:13 SEQUENCES:2 SERVER:27 SERVICE:6 SESSION:4 SET:37 SETNAME:5 SETS:3 SETTINGS:3 SEVERAL:4 SHORT:2 SHOULD:46 SHOULDNT:2 SIDE:4 SIMILAR:2 SIMPLE:14 SIMPLIFY:3 SIMPLY:7 SINCE:6 SINGLE:4 SIZE:24 SIZEOFP:6 SMALL:4 SO:9 SOCKADDRIN:2 SOCKETS:3 SOFTWARE:17 SOME:14 SOMETHING:3 SOMETIMES:4 SOMEWHAT:2 SOURCE:3 SPACE:7 SPECIAL:4 SPECIFIC:3 SPECIFICALLY:4 SPECIFICATION:6 SPECIFY:2 SR:5 STACK:2 STACKS:2 STANDARD:6 STATE:5 STATIC:4 STATSERVMAIN:3 STATSERVOPTIONSBLOCK:2 STDERR:5 STEPSIZE:2 STILL:7 STR:4 STRAIGHTFORWARD:2 STREAM:38 STREAMS:5 STRING:11 STRINGS:5 STRUCT:21 STRUCTURE:33 STRUCTURES:6 SUBSYSTEM:8 SUCCESS:5 SUCH:7 SUFFICIENT:3 SUGGEST:2 SUN:2 SUPPLIED:3 SUPPORT:11 SYNOPSIS:3 SYSTEM:22 SYSTEMS:2 TABLES:2 TAG:10 TAGGED:4 TAGGING:10 TAGMODE:2 TAKE:6 TAKEN:2 TAKES:2 TALK:3 TARGET:2 TASK:2 TCP:2 TCPIP:5 TCPIPSTRTOADDRCHAR:2 TELL:4 TELLS:3 TERMINATED:2 THAN:10 THAT:125 THE:916 THEIR:3 THEM:2 THEN:8 THERE:7 THERES:4 THESE:5 THEY:12 THING:4 THINGS:5 THINK:2 THINOSI:3 THIS:95 THREE:5 THROUGH:3 TIME:7 TIMEOUT:3 TIMES:2 TO:369 TOO:5 TOOLKIT:3 TOP:3 TOPLEVEL:8 TRANSPARENT:2 TRANSPORT:15 TRIED:2 TRY:3 TSELECTOR:2 TWO:10 TYPE:67 TYPEDEF:14 TYPES:41 TYPICAL:2 TYPICALLY:9 U:3 UNDER:4 UNDERLYING:2 UNION:7 UNIONNULL:2 UNLESS:4 UNPACKED:2 UNTAGGED:2 UNTIL:6 UP:6 UPDATE:2 US:3 USE:67 USED:26 USEFUL:9 USER:4 USERINFORMATIONFIELD:2 USERS:4 USING:18 V:2 VALP:3 VALUE:39 VALUES:7 VARIABLE:2 VARIABLES:3 VERIFY:2 VERSION:5 VERY:3 VISIBLESTRING:2 VOID:29 WANT:12 WARRANTY:2 WAS:10 WAY:12 WE:52 WED:5 WELL:22 WENT:3 WERE:2 WHAT:2 WHEN:49 WHENEVER:2 WHERE:9 WHETHER:3 WHICH:44 WHICHP:2 WHILE:8 WHOLE:2 WILL:91 WISH:9 WITH:58 WITHIN:2 WITHOUT:9 WONT:2 WORK:8 WORKING:2 WORKS:6 WORRY:4 WOULD:16 WRITE:5 WRITING:2 WRITTEN:5 X500:4 XDR:4 XMOSIH:3 XTI:2 XTIMOSI:11 YAZ:25 YET:6 YOU:198 YOULL:5 YOUR:53 YOURE:6 YOURSELF:6 Z:3 Z3950:8 Z39501994:2 Z3950SR:4 ZAPDU:5 ZELEMENTSETNAMES:3 ZERO:6 ZGET:2 ZINITREQUEST:3 ZLISTSTATUSNULL:2 ZRECORDS:2 ZREFERENCEIDNULL:15 yaz-4.2.30/doc/0000755000175000017500000000000011741237744010163 500000000000000yaz-4.2.30/doc/yaz-config.10000644000175000017500000000457711741237740012244 00000000000000'\" t .\" Title: yaz-config .\" Author: Index Data .\" Generator: DocBook XSL Stylesheets v1.76.1 .\" Date: 04/11/2012 .\" Manual: Commands .\" Source: YAZ 4.2.30 .\" Language: English .\" .TH "YAZ\-CONFIG" "1" "04/11/2012" "YAZ 4.2.30" "Commands" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" yaz-config \- Script to get information about YAZ\&. .SH "SYNOPSIS" .HP \w'\fByaz\-config\fR\ 'u \fByaz\-config\fR [\fB\-\-prefix[=\fR\fB\fIDIR\fR\fR\fB]\fR] [\fB\-\-version\fR] [\fB\-\-libs\fR] [\fB\-\-lalibs\fR] [\fB\-\-cflags\fR] [\fB\-\-comp\fR] [\fB\-V\fR] [libraries...] .SH "DESCRIPTION" .PP \fByaz\-config\fR is a script that returns information that your own software should use to build software that uses YAZ\&. .PP The following libraries are supported: .PP threads .RS 4 Use the threaded version of YAZ\&. .RE .SH "OPTIONS" .PP \-\-prefix[=\fIDIR\fR] .RS 4 Returns prefix of YAZ or assume a different one if DIR is specified\&. .RE .PP \-\-version .RS 4 Returns version of YAZ\&. .RE .PP \-\-libs .RS 4 Library specification be used when using YAZ\&. .RE .PP \-\-lalibs .RS 4 Return library specification\&. .RE .PP \-\-cflags .RS 4 Return C Compiler flags\&. .RE .PP \-\-comp .RS 4 Returns full path to YAZ\*(Aq ASN\&.1 compiler: yaz\-asncomp\&. .RE .PP \-V .RS 4 veturns YAZ SHA1 ID (from Git) and version\&. .RE .SH "FILES" .PP /usr/local/bin/yaz\-config .PP /usr/local/lib/libyaz*\&.a .PP /usr/local/include/yaz/*\&.h .SH "SEE ALSO" .PP yaz(7) .PP Section "How to make apps using YAZ on UNIX" in the YAZ manual\&. yaz-4.2.30/doc/asn.html0000644000175000017500000000646611741237744011566 00000000000000Chapter 5. The Z39.50 ASN.1 Module

Chapter 5. The Z39.50 ASN.1 Module

1. Introduction

The Z39.50 ASN.1 module provides you with a set of C struct definitions for the various PDUs of the Z39.50 protocol, as well as for the complex types appearing within the PDUs. For the primitive data types, the C representation often takes the form of an ordinary C language type, such as Odr_int which is equivalent to an integral C integer. For ASN.1 constructs that have no direct representation in C, such as general octet strings and bit strings, the ODR module (see section The ODR Module) provides auxiliary definitions.

The Z39.50 ASN.1 module is located in sub directory z39.50. There you'll find C files that implements encoders and decoders for the Z39.50 types. You'll also find the protocol definitions: z3950v3.asn, esupdate.asn, and others.

yaz-4.2.30/doc/zoom.xml0000644000175000017500000017150711737023567011625 00000000000000 ZOOM &zoom; is an acronym for 'Z39.50 Object-Orientation Model' and is an initiative started by Mike Taylor (Mike is from the UK, which explains the peculiar name of the model). The goal of &zoom; is to provide a common Z39.50 client API not bound to a particular programming language or toolkit. From YAZ version 2.1.12, SRU is supported. You can make SRU ZOOM connections by specifying scheme http:// for the hostname for a connection. The dialect of SRU used is specified by the value of the connection's sru option, which may be SRU over HTTP GET (get), SRU over HTTP POST (post), (SRU over SOAP) (soap) or SOLR (SOLR Web Service). Using the facility for embedding options in target strings, a connection can be forced to use SRU rather the SRW (the default) by prefixing the target string with sru=get,, like this: sru=get,http://sru.miketaylor.org.uk:80/sru.pl SOLR protocol support was added to YAZ in version 4.1.0, as a dialect of a SRU protocol, since both are HTTP based protocols. The lack of a simple Z39.50 client API for &yaz; has become more and more apparent over time. So when the first &zoom; specification became available, an implementation for &yaz; was quickly developed. For the first time, it is now as easy (or easier!) to develop clients than servers with &yaz;. This chapter describes the &zoom; C binding. Before going further, please reconsider whether C is the right programming language for the job. There are other language bindings available for &yaz;, and still more are in active development. See the ZOOM web-site for more information. In order to fully understand this chapter you should read and try the example programs zoomtst1.c, zoomtst2.c, .. in the zoom directory. The C language misses features found in object oriented languages such as C++, Java, etc. For example, you'll have to manually, destroy all objects you create, even though you may think of them as temporary. Most objects has a _create - and a _destroy variant. All objects are in fact pointers to internal stuff, but you don't see that because of typedefs. All destroy methods should gracefully ignore a NULL pointer. In each of the sections below you'll find a sub section called protocol behavior, that describes how the API maps to the Z39.50 protocol. Connections The Connection object is a session with a target. #include <yaz/zoom.h> ZOOM_connection ZOOM_connection_new (const char *host, int portnum); ZOOM_connection ZOOM_connection_create (ZOOM_options options); void ZOOM_connection_connect(ZOOM_connection c, const char *host, int portnum); void ZOOM_connection_destroy(ZOOM_connection c); Connection objects are created with either function ZOOM_connection_new or ZOOM_connection_create. The former creates and automatically attempts to establish a network connection with the target. The latter doesn't establish a connection immediately, thus allowing you to specify options before establishing network connection using the function ZOOM_connection_connect. If the port number, portnum, is zero, the host is consulted for a port specification. If no port is given, 210 is used. A colon denotes the beginning of a port number in the host string. If the host string includes a slash, the following part specifies a database for the connection. You can prefix the host with a scheme followed by colon. The default scheme is tcp (Z39.50 protocol). The scheme http selects SRU/get over HTTP by default, but can overridded to use SRU/post, SRW and the SOLR protocol. You can prefix the scheme-qualified host-string with one or more comma-separated key=value sequences, each of which represents an option to be set into the connection structure before the protocol-level connection is forged and the initialization handshake takes place. This facility can be used to provide authentication credentials, as in host-strings such as: user=admin,password=halfAm4n,tcp:localhost:8017/db Connection objects should be destroyed using the function ZOOM_connection_destroy. void ZOOM_connection_option_set(ZOOM_connection c, const char *key, const char *val); void ZOOM_connection_option_setl(ZOOM_connection c, const char *key, const char *val, int len); const char *ZOOM_connection_option_get(ZOOM_connection c, const char *key); const char *ZOOM_connection_option_getl(ZOOM_connection c, const char *key, int *lenp); The functions ZOOM_connection_option_set and ZOOM_connection_option_setl allows you to set an option given by key to the value value for the connection. For ZOOM_connection_option_set, the value is assumed to be a 0-terminated string. Function ZOOM_connection_option_setl specifies a value of a certain size (len). Functions ZOOM_connection_option_get and ZOOM_connection_option_getl returns the value for an option given by key. ZOOM Connection Options Option Description Default implementationNameName of Your client none userAuthentication user name none groupAuthentication group name none passwordAuthentication password. none hostTarget host. This setting is "read-only". It's automatically set internally when connecting to a target. none proxyProxy host. If set, the logical host is encoded in the otherInfo area of the Z39.50 Init PDU with OID 1.2.840.10003.10.1000.81.1. none clientIPClient IP. If set, is encoded in the otherInfo area of a Z39.50 PDU with OID 1.2.840.10003.10.1000.81.3. Holds the original IP addreses of a client. Is used of ZOOM is used in a gateway of some sort. none asyncIf true (1) the connection operates in asynchronous operation which means that all calls are non-blocking except ZOOM_event. 0 maximumRecordSize Maximum size of single record. 1 MB preferredMessageSize Maximum size of multiple records. 1 MB lang Language for negotiation. none charset Character set for negotiation. none serverImplementationId Implementation ID of server. (The old targetImplementationId option is also supported for the benefit of old applications.) none targetImplementationName Implementation Name of server. (The old targetImplementationName option is also supported for the benefit of old applications.) none serverImplementationVersion Implementation Version of server. (the old targetImplementationVersion option is also supported for the benefit of old applications.) none databaseNameOne or more database names separated by character plus (+), which to be used by subsequent search requests on this Connection. Default piggybackTrue (1) if piggyback should be used in searches; false (0) if not. 1 smallSetUpperBoundIf hits is less than or equal to this value, then target will return all records using small element set name 0 largeSetLowerBoundIf hits is greater than this value, the target will return no records. 1 mediumSetPresentNumberThis value represents the number of records to be returned as part of a search when when hits is less than or equal to large set lower bound and if hits is greater than small set upper bound. 0 smallSetElementSetName The element set name to be used for small result sets. none mediumSetElementSetName The element set name to be for medium-sized result sets. none init_opt_search, init_opt_present, init_opt_delSet, etc. After a successful Init, these options may be interrogated to discover whether the server claims to support the specified operations. none sru SRU/SOLR transport type. Must be either soap, get, post, or solr. soap sru_version SRU/SRW version. Should be 1.1, or 1.2. This is , prior to connect, the version to offer (highest version). And following connect (in fact first operation), holds the negotiated version with the server (same or lower version). 1.2 facets A FacetList is comma-separated list of facet, which is defined as AttributeList and a optional FacetTerm (a Term and a frequency). On request the terms is missing. On response the the list contains the terms that the target could collect. none apdulog If set to a true value such as "1", a log of low-level protocol packets is emitted on standard error stream. This can be very useful for debugging. 0
If either option lang or charset is set, then Character Set and Language Negotiation is in effect. int ZOOM_connection_error(ZOOM_connection c, const char **cp, const char **addinfo); int ZOOM_connection_error_x(ZOOM_connection c, const char **cp, const char **addinfo, const char **dset); Function ZOOM_connection_error checks for errors for the last operation(s) performed. The function returns zero if no errors occurred; non-zero otherwise indicating the error. Pointers cp and addinfo holds messages for the error and additional-info if passed as non-NULL. Function ZOOM_connection_error_x is an extended version of ZOOM_connection_error that is capable of returning name of diagnostic set in dset. Z39.50 Protocol behavior The calls ZOOM_connection_new and ZOOM_connection_connect establishes a TCP/IP connection and sends an Initialize Request to the target if possible. In addition, the calls waits for an Initialize Response from the target and the result is inspected (OK or rejected). If proxy is set then the client will establish a TCP/IP connection with the peer as specified by the proxy host and the hostname as part of the connect calls will be set as part of the Initialize Request. The proxy server will then "forward" the PDU's transparently to the target behind the proxy. For the authentication parameters, if option user is set and both options group and pass are unset, then Open style authentication is used (Version 2/3) in which case the username is usually followed by a slash, then by a password. If either group or pass is set then idPass authentication (Version 3 only) is used. If none of the options are set, no authentication parameters are set as part of the Initialize Request (obviously). When option async is 1, it really means that all network operations are postponed (and queued) until the function ZOOM_event is invoked. When doing so it doesn't make sense to check for errors after ZOOM_connection_new is called since that operation "connecting - and init" is still incomplete and the API cannot tell the outcome (yet). SRU/SOLR Protocol behavior The HTTP based protocols (SRU, SRW, SOLR) doesn't feature an Inititialize Request, so the connection phase merely establishes a TCP/IP connection with the SOAP service. Most of the ZOOM connection options do not affect SRU/SOLR and they are ignored. However, future versions of &yaz; might honor implementationName and put that as part of User-Agent header for HTTP requests. The charset is used in the Content-Type header of HTTP requests.
Queries Query objects represents queries. ZOOM_query ZOOM_query_create(void); void ZOOM_query_destroy(ZOOM_query q); int ZOOM_query_prefix(ZOOM_query q, const char *str); int ZOOM_query_cql(ZOOM_query s, const char *str); int ZOOM_query_sortby(ZOOM_query q, const char *criteria); Create query objects using ZOOM_query_create and destroy them by calling ZOOM_query_destroy. RPN-queries can be specified in PQF notation by using the function ZOOM_query_prefix. The ZOOM_query_cql specifies a CQL query to be sent to the server/target. More query types will be added in future versions of &yaz;, such as CCL to RPN-mapping, native CCL query, etc. In addition to a search, a sort criteria may be set. Function ZOOM_query_sortby specifies a sort criteria using the same string notation for sort as offered by the YAZ client. Protocol behavior The query object is just an interface for the member Query in the SearchRequest. The sortby-function is an interface to the sortSequence member of the SortRequest. Result sets The result set object is a container for records returned from a target. ZOOM_resultset ZOOM_connection_search(ZOOM_connection, ZOOM_query q); ZOOM_resultset ZOOM_connection_search_pqf(ZOOM_connection c, const char *q); void ZOOM_resultset_destroy(ZOOM_resultset r); Function ZOOM_connection_search creates a result set given a connection and query. Destroy a result set by calling ZOOM_resultset_destroy. Simple clients may using PQF only may use function ZOOM_connection_search_pqf in which case creating query objects is not necessary. void ZOOM_resultset_option_set(ZOOM_resultset r, const char *key, const char *val); const char *ZOOM_resultset_option_get(ZOOM_resultset r, const char *key); size_t ZOOM_resultset_size(ZOOM_resultset r); Functions ZOOM_resultset_options_set and ZOOM_resultset_get sets and gets an option for a result set similar to ZOOM_connection_option_get and ZOOM_connection_option_set. The number of hits also called result-count is returned by function ZOOM_resultset_size. ZOOM Result set Options Option Description Default startOffset of first record to be retrieved from target. First record has offset 0 unlike the protocol specifications where first record has position 1. This option affects ZOOM_resultset_search and ZOOM_resultset_search_pqf and must be set before any of these functions are invoked. If a range of records must be fetched manually after search, function ZOOM_resultset_records should be used. 0 countNumber of records to be retrieved. This option affects ZOOM_resultset_search and ZOOM_resultset_search_pqf and must be set before any of these functions are invoked. 0 presentChunkThe number of records to be requested from the server in each chunk (present request). The value 0 means to request all the records in a single chunk. (The old step option is also supported for the benefit of old applications.) 0 elementSetNameElement-Set name of records. Most targets should honor element set name B and F for brief and full respectively. none preferredRecordSyntaxPreferred Syntax, such as USMARC, SUTRS, etc. none schemaSchema for retrieval, such as Gils-schema, Geo-schema, etc. none setnameName of Result Set (Result Set ID). If this option isn't set, the ZOOM module will automatically allocate a result set name. default rpnCharsetCharacter set for RPN terms. If this is set, ZOOM C will assume that the ZOOM application is running UTF-8. Terms in RPN queries are then converted to the rpnCharset. If this is unset, ZOOM C will not assume any encoding of RPN terms and no conversion is performed. none
For servers that support Search Info report, the following options may be read using ZOOM_resultset_get. This detailed information is read after a successful search has completed. This information is a list of of items, where each item is information about a term or subquery. All items in the list are prefixed by SearchResult.no where no presents the item number (0=first, 1=second). Read searchresult.size to determine the number of items. Search Info Report Options Option Description searchresult.size number of search result entries. This option is-nonexistant if no entries are returned by the server. searchresult.no.id sub query ID searchresult.no.count result count for item (number of hits) searchresult.no.subquery.term subquery term searchresult.no.interpretation.term interpretation term searchresult.no.recommendation.term recommendation term
Z39.50 Protocol behavior The creation of a result set involves at least a SearchRequest - SearchResponse protocol handshake. Following that, if a sort criteria was specified as part of the query, a SortRequest - SortResponse handshake takes place. Note that it is necessary to perform sorting before any retrieval takes place, so no records will be returned from the target as part of the SearchResponse because these would be unsorted. Hence, piggyback is disabled when sort criteria are set. Following Search - and a possible sort - Retrieval takes place - as one or more Present Requests/Response pairs being transferred. The API allows for two different modes for retrieval. A high level mode which is somewhat more powerful and a low level one. The low level is enabled when searching on a Connection object for which the settings smallSetUpperBound, mediumSetPresentNumber and largeSetLowerBound are set. The low level mode thus allows you to precisely set how records are returned as part of a search response as offered by the Z39.50 protocol. Since the client may be retrieving records as part of the search response, this mode doesn't work well if sorting is used. The high-level mode allows you to fetch a range of records from the result set with a given start offset. When you use this mode the client will automatically use piggyback if that is possible with the target and perform one or more present requests as needed. Even if the target returns fewer records as part of a present response because of a record size limit, etc. the client will repeat sending present requests. As an example, if option start is 0 (default) and count is 4, and piggyback is 1 (default) and no sorting criteria is specified, then the client will attempt to retrieve the 4 records as part the search response (using piggyback). On the other hand, if either start is positive or if a sorting criteria is set, or if piggyback is 0, then the client will not perform piggyback but send Present Requests instead. If either of the options mediumSetElementSetName and smallSetElementSetName are unset, the value of option elementSetName is used for piggyback searches. This means that for the high-level mode you only have to specify one elementSetName option rather than three. SRU Protocol behavior Current version of &yaz; does not take advantage of a result set id returned by the SRU server. Future versions might do, however. Since, the ZOOM driver does not save result set IDs any present (retrieval) is transformed to a SRU SearchRetrieveRequest with same query but, possibly, different offsets. Option schema specifies SRU schema for retrieval. However, options elementSetName and preferredRecordSyntax are ignored. Options start and count are supported by SRU. The remaining options piggyback, smallSetUpperBound, largeSetLowerBound, mediumSetPresentNumber, mediumSetElementSetName, smallSetElementSetName are unsupported. SRU supports CQL queries, not PQF. If PQF is used, however, the PQF query is transferred anyway using non-standard element pQuery in SRU SearchRetrieveRequest. SOLR queries has to be done in SOLR query format. Unfortunately, SRU or SOLR does not define a database setting. Hence, databaseName is unsupported and ignored. However, the path part in host parameter for functions ZOOM_connecton_new and ZOOM_connection_connect acts as a database (at least for the &yaz; SRU server).
Records A record object is a retrieval record on the client side - created from result sets. void ZOOM_resultset_records(ZOOM_resultset r, ZOOM_record *recs, size_t start, size_t count); ZOOM_record ZOOM_resultset_record(ZOOM_resultset s, size_t pos); const char *ZOOM_record_get(ZOOM_record rec, const char *type, size_t *len); int ZOOM_record_error(ZOOM_record rec, const char **msg, const char **addinfo, const char **diagset); ZOOM_record ZOOM_record_clone(ZOOM_record rec); void ZOOM_record_destroy(ZOOM_record rec); References to temporary records are returned by functions ZOOM_resultset_records or ZOOM_resultset_record. If a persistent reference to a record is desired ZOOM_record_clone should be used. It returns a record reference that should be destroyed by a call to ZOOM_record_destroy. A single record is returned by function ZOOM_resultset_record that takes a position as argument. First record has position zero. If no record could be obtained NULL is returned. Error information for a record can be checked with ZOOM_record_error which returns non-zero (error code) if record is in error, called Surrogate Diagnostics in Z39.50. Function ZOOM_resultset_records retrieves a number of records from a result set. Parameter start and count specifies the range of records to be returned. Upon completion array recs[0], ..recs[count-1] holds record objects for the records. The array of records recs should be allocated prior the call ZOOM_resultset_records. Note that for those records that couldn't be retrieved from the target recs[ ..] is set to NULL. In order to extract information about a single record, ZOOM_record_get is provided. The function returns a pointer to certain record information. The nature (type) of the pointer depends on the parameter, type. The type is a string of the format: format[;charset=from[/opacfrom][,to]][;format=v] where format specifies the format of the returned record, from specifies the character set of the record in its original form (as returned by the server), to specifies the output (returned) character set encoding. If to is omitted UTF-8 is assumed. If charset is not given, then no character set conversion takes place. OPAC records may be returned in a different set from the bibliographic MARC record. If this is this the case, opacfrom should be set to the character set of the OPAC record part. Specifying the OPAC record character set requires YAZ 4.1.5 or later. The format argument controls whether record data should be XML pretty-printed (post process operation). It is enabled only if format value v is 1 and the record content is XML well-formed. In addition, for certain types, the length len passed will be set to the size in bytes of the returned information. The following are the supported values for form. database Database of record is returned as a C null-terminated string. Return type const char *. syntax The transfer syntax of the record is returned as a C null-terminated string containing the symbolic name of the record syntax, e.g. Usmarc. Return type is const char *. schema The schema of the record is returned as a C null-terminated string. Return type is const char *. render The record is returned in a display friendly format. Upon completion buffer is returned (type const char *) and length is stored in *len. raw The record is returned in the internal YAZ specific format. For GRS-1, Explain, and others, the raw data is returned as type Z_External * which is just the type for the member retrievalRecord in type NamePlusRecord. For SUTRS and octet aligned record (including all MARCs) the octet buffer is returned and the length of the buffer. xml The record is returned in XML if possible. SRU, SOLR and Z39.50 records with transfer syntax XML are returned verbatim. MARC records are returned in MARCXML (converted from ISO2709 to MARCXML by YAZ). OPAC records are also converted to XML and the bibliographic record is converted to MARCXML (when possible). GRS-1 records are not supported for this form. Upon completion, the XML buffer is returned (type const char *) and length is stored in *len. opac OPAC information for record is returned in XML if an OPAC record is present at the position given. If no OPAC record is present, a NULL pointer is returned. txml The record is returned in TurboMARC if possible. SRU and Z39.50 records with transfer syntax XML are returned verbatim. MARC records are returned in TurboMARC (converted from ISO2709 to TurboMARC by YAZ). Upon completion, the XML buffer is returned (type const char *) and length is stored in *len. Most MARC21 records uses the MARC-8 character set encoding. An application that wishes to display in Latin-1 would use render; charset=marc8,iso-8859-1 Z39.50 Protocol behavior The functions ZOOM_resultset_record and ZOOM_resultset_records inspects the client-side record cache. Records not found in cache are fetched using Present. The functions may block (and perform network I/O) - even though option async is 1, because they return records objects. (and there's no way to return records objects without retrieving them!). There is a trick, however, in the usage of function ZOOM_resultset_records that allows for delayed retrieval (and makes it non-blocking). By using a null pointer for recs you're indicating you're not interested in getting records objects now. SRU/SOLR Protocol behavior The ZOOM driver for SRU/SOLR treats records returned by a SRU/SOLR server as if they where Z39.50 records with transfer syntax XML and no element set name or database name. Facets Facets operations is not part of the official ZOOM specification, but is an Index Data extension for YAZ-based Z39.50 targets or SOLR targets. In case the target can and is requested to return facets, using a result set the ZOOM client can request one or all facet fields. Using a facet field the client can request the term count and then interate over the terms. ZOOM_facet_field *ZOOM_resultset_facets(ZOOM_resultset r); const char ** ZOOM_resultset_facets_names(ZOOM_resultset r); ZOOM_facet_field ZOOM_resultset_get_facet_field(ZOOM_resultset r, const char *facet_name); ZOOM_facet_field ZOOM_resultset_get_facet_field_by_index(ZOOM_resultset r, int pos); size_t ZOOM_resultset_facets_size(ZOOM_resultset r); const char *ZOOM_facet_field_name(ZOOM_facet_field facet_field); size_t ZOOM_facet_field_term_count(ZOOM_facet_field facet_field); const char *ZOOM_facet_field_get_term(ZOOM_facet_field facet_field, size_t idx, int *freq); References to temporary structures are returned by all functions. They are only valid as long the Result set is valid. ZOOM_resultset_get_facet_field or ZOOM_resultset_get_facet_field_by_index. ZOOM_resultset_facets. ZOOM_resultset_facets_names. ZOOM_facet_field_name. ZOOM_facet_field_get_term. A single Facet field is returned by function ZOOM_resultset_get_facet_field or ZOOM_resultset_get_facet_field_by_index that takes a result set and facet name or positive index respectively. First facet has position zero. If no facet could be obtained (invalid name or index out of bounds) NULL is returned. An array of facets field can be returned by ZOOM_resultset_facets. The length of the array is given by ZOOM_resultset_facets_size. The array is zero-based and last entry will be at ZOOM_resultset_facets_size(result_set)-1. It is possible to interate over facets by name, by calling ZOOM_resultset_facets_names. This will return an const array of char * where each string can be used as parameter for ZOOM_resultset_get_facet_field. Function ZOOM_facet_field_name gets the request facet name from a returned facet field. Function ZOOM_facet_field_get_term returns the idx'th term and term count for a facet field. Idx must between 0 and ZOOM_facet_field_term_count-1, otherwise the returned reference will be NULL. On a valid idx, the value of the freq reference will be the term count. The *freq parameter must be valid pointer to integer. Scan This section describes an interface for Scan. Scan is not an official part of the ZOOM model yet. The result of a scan operation is the ZOOM_scanset which is a set of terms returned by a target. The Scan interface is supported for both Z39.50, SRU (and SOLR?). ZOOM_scanset ZOOM_connection_scan(ZOOM_connection c, const char *startpqf); ZOOM_scanset ZOOM_connection_scan1(ZOOM_connection c, ZOOM_query q); size_t ZOOM_scanset_size(ZOOM_scanset scan); const char *ZOOM_scanset_term(ZOOM_scanset scan, size_t pos, size_t *occ, size_t *len); const char *ZOOM_scanset_display_term(ZOOM_scanset scan, size_t pos, size_t *occ, size_t *len); void ZOOM_scanset_destroy(ZOOM_scanset scan); const char *ZOOM_scanset_option_get(ZOOM_scanset scan, const char *key); void ZOOM_scanset_option_set(ZOOM_scanset scan, const char *key, const char *val); The scan set is created by function ZOOM_connection_scan which performs a scan operation on the connection using the specified startpqf. If the operation was successful, the size of the scan set can be retrieved by a call to ZOOM_scanset_size. Like result sets, the items are numbered 0,..size-1. To obtain information about a particular scan term, call function ZOOM_scanset_term. This function takes a scan set offset pos and returns a pointer to a raw term or NULL if non-present. If present, the occ and len are set to the number of occurrences and the length of the actual term respectively. ZOOM_scanset_display_term is similar to ZOOM_scanset_term except that it returns the display term rather than the raw term. In a few cases, the term is different from display term. Always use the display term for display and the raw term for subsequent scan operations (to get more terms, next scan result, etc). A scan set may be freed by a call to function ZOOM_scanset_destroy. Functions ZOOM_scanset_option_get and ZOOM_scanset_option_set retrieves and sets an option respectively. The startpqf is a subset of PQF, namely the Attributes+Term part. Multiple @attr can be used. For example to scan in title (complete) phrases: @attr 1=4 @attr 6=2 "science o" The ZOOM_connecton_scan1 is a newer and more generic alternative to ZOOM_connection_scan which allows to use both CQL and PQF for Scan. ZOOM Scan Set Options Option Description Default numberNumber of Scan Terms requested in next scan. After scan it holds the actual number of terms returned. 20 positionPreferred Position of term in response in next scan; actual position after completion of scan. 1 stepSizeStep Size 0 scanStatusAn integer indicating the Scan Status of last scan. 0 rpnCharsetCharacter set for RPN terms. If this is set, ZOOM C will assume that the ZOOM application is running UTF-8. Terms in RPN queries are then converted to the rpnCharset. If this is unset, ZOOM C will not assume any encoding of RPN terms and no conversion is performed. none
Extended Services ZOOM offers an interface to a subset of the Z39.50 extended services as well as a few privately defined ones: Z39.50 Item Order (ILL). See . Record Update. This allows a client to insert, modify or delete records. See . Database Create. This a non-standard feature. Allows a client to create a database. See . Database Drop. This a non-standard feature. Allows a client to delete/drop a database. See . Commit operation. This a non-standard feature. Allows a client to commit operations. See . To create an extended service operation a ZOOM_package must be created. The operation is a five step operation. The package is created, package is configured by means of options, the package is send, result is inspected (by means of options), the package is destroyed. ZOOM_package ZOOM_connection_package(ZOOM_connection c, ZOOM_options options); const char *ZOOM_package_option_get(ZOOM_package p, const char *key); void ZOOM_package_option_set(ZOOM_package p, const char *key, const char *val); void ZOOM_package_send(ZOOM_package p, const char *type); void ZOOM_package_destroy(ZOOM_package p); The ZOOM_connection_package creates a package for the connection given using the options specified. Functions ZOOM_package_option_get and ZOOM_package_option_set gets and sets options. ZOOM_package_send sends the package the via connection specified in ZOOM_connection_package. The type specifies the actual extended service package type to be sent. Extended Service Common Options Option Description Default package-name Extended Service Request package name. Must be specified as part of a request none user-id User ID of Extended Service Package. Is a request option none function Function of package - one of create, delete, modify. Is a request option. create waitAction Wait action for package. Possible values: wait, waitIfPossible, dontWait or dontReturnPackage. waitIfPossible targetReference Target Reference. This is part of the response as returned by the server. Read it after a successful operation. none
Item Order For Item Order, type must be set to itemorder in ZOOM_package_send. Item Order Options Option Description Default contact-name ILL contact name none contact-phone ILL contact phone none contact-email ILL contact email none itemorder-item Position for item (record) requested. An integer 1
Record Update For Record Update, type must be set to update in ZOOM_package_send. Record Update Options Option Description Default action The update action. One of specialUpdate, recordInsert, recordReplace, recordDelete, elementUpdate. specialUpdate (recordInsert for updateVersion=1 which does not support specialUpdate) recordIdOpaque Opaque Record ID none recordIdNumber Record ID number none record The record itself none recordOpaque Specifies an opaque record which is encoded as an ASN.1 ANY type with the OID as tiven by option syntax (see below). Option recordOpaque is an alternative to record - and record option (above) is ignored if recordOpaque is set. This option is only available in YAZ 3.0.35 and later and is meant to facilitate Updates with servers from OCLC. none syntax The record syntax (transfer syntax). Is a string that is a known record syntax. no syntax databaseName Database from connection object Default correlationInfo.note Correlation Info Note (string) none correlationInfo.id Correlation Info ID (integer) none elementSetName Element Set for Record none updateVersion Record Update version which holds one of the values 1, 2 or 3. Each version has a distinct OID: 1.2.840.10003.9.5 (first version) , 1.2.840.10003.9.5.1 (second version) and 1.2.840.10003.9.5.1.1 (third and newest version). 3
Database Create For Database Create, type must be set to create in ZOOM_package_send. Database Create Options Option Description Default databaseName Database from connection object Default
Database Drop For Database Drop, type must be set to drop in ZOOM_package_send. Database Drop Options Option Description Default databaseName Database from connection object Default
Commit Operation For Commit, type must be set to commit in ZOOM_package_send. Protocol behavior All the extended services are Z39.50-only. The database create, drop and commit services are privately defined operations. Refer to esadmin.asn in YAZ for the ASN.1 definitions.
Options Most &zoom; objects provide a way to specify options to change behavior. From an implementation point of view a set of options is just like an associative array / hash. ZOOM_options ZOOM_options_create(void); ZOOM_options ZOOM_options_create_with_parent(ZOOM_options parent); void ZOOM_options_destroy(ZOOM_options opt); const char *ZOOM_options_get(ZOOM_options opt, const char *name); void ZOOM_options_set(ZOOM_options opt, const char *name, const char *v); typedef const char *(*ZOOM_options_callback) (void *handle, const char *name); ZOOM_options_callback ZOOM_options_set_callback(ZOOM_options opt, ZOOM_options_callback c, void *handle); Events If you're developing non-blocking applications, you have to deal with events. int ZOOM_event(int no, ZOOM_connection *cs); The ZOOM_event executes pending events for a number of connections. Supply the number of connections in no and an array of connections in cs (cs[0] ... cs[no-1]). A pending event could be a sending a search, receiving a response, etc. When an event has occurred for one of the connections, this function returns a positive integer n denoting that an event occurred for connection cs[n-1]. When no events are pending for the connections, a value of zero is returned. To ensure that all outstanding requests are performed call this function repeatedly until zero is returned. If ZOOM_event returns and returns non-zero, the last event that occurred can be expected. int ZOOM_connection_last_event(ZOOM_connection cs); ZOOM_connection_last_event returns an event type (integer) for the last event. ZOOM Event IDs Event Description ZOOM_EVENT_NONE No event has occurred ZOOM_EVENT_CONNECT TCP/IP connect has initiated ZOOM_EVENT_SEND_DATA Data has been transmitted (sending) ZOOM_EVENT_RECV_DATA Data has been received) ZOOM_EVENT_TIMEOUT Timeout ZOOM_EVENT_UNKNOWN Unknown event ZOOM_EVENT_SEND_APDU An APDU has been transmitted (sending) ZOOM_EVENT_RECV_APDU An APDU has been received ZOOM_EVENT_RECV_RECORD A result-set record has been received ZOOM_EVENT_RECV_SEARCH A search result been received
yaz-4.2.30/doc/yaz-config.html0000644000175000017500000000760311741237744013045 00000000000000yaz-config

Name

yaz-config — Script to get information about YAZ.

Synopsis

yaz-config [--prefix[=DIR]] [--version] [--libs] [--lalibs] [--cflags] [--comp] [-V] [libraries...]

DESCRIPTION

yaz-config is a script that returns information that your own software should use to build software that uses YAZ.

The following libraries are supported:

threads

Use the threaded version of YAZ.

OPTIONS

--prefix[=DIR]

Returns prefix of YAZ or assume a different one if DIR is specified.

--version

Returns version of YAZ.

--libs

Library specification be used when using YAZ.

--lalibs

Return library specification.

--cflags

Return C Compiler flags.

--comp

Returns full path to YAZ' ASN.1 compiler: yaz-asncomp.

-V

veturns YAZ SHA1 ID (from Git) and version.

FILES

/usr/local/bin/yaz-config

/usr/local/lib/libyaz*.a

/usr/local/include/yaz/*.h

SEE ALSO

yaz(7)

Section "How to make apps using YAZ on UNIX" in the YAZ manual.

yaz-4.2.30/doc/comstack.ssl.html0000644000175000017500000000564111741237744013403 000000000000007. SSL

7. SSL

     void *cs_get_ssl(COMSTACK cs);
    

Returns the SSL handle, SSL * for comstack. If comstack is not of type SSL, NULL is returned.

     int cs_set_ssl_ctx(COMSTACK cs, void *ctx);
    

Sets SSL context for comstack. The parameter is expected to be of type SSL_CTX *. This function should be called just after comstack has been created (before connect, bind, etc). This function returns 1 for success; 0 for failure.

     int cs_set_ssl_certificate_file(COMSTACK cs, const char *fname);
    

Sets SSL certificate for comstack as a PEM file. This function returns 1 for success; 0 for failure.

     int cs_get_ssl_peer_certificate_x509(COMSTACK cs, char **buf, int *len);
    

This function returns the peer certificate. If successful, *buf and *len holds X509 buffer and length respectively. Buffer should be freed with xfree. This function returns 1 for success; 0 for failure.

yaz-4.2.30/doc/yaz-client-commands.xml0000644000175000017500000005736311733047144014513 00000000000000 open zurl Opens a connection to a server. The syntax for zurl is the same as described above for connecting from the command line. Syntax: [(tcp|ssl|unix|http)':']host [:port][/base] quit Quits YAZ client find query Sends a Search Request using the query given. By default the query is assumed to be PQF. See command querytype for more information. delete setname Deletes result set with name setname on the server. base base1 base2 ... Sets the name(s) of the database(s) to search. One or more databases may be specified separated by blanks. This commands overrides the database given in zurl. show [start[+number]] Fetches records by sending a Present Request from the start position given by start a number of records given by number. If start is not given, then the client will fetch from position of the last retrieved record plus 1. If number is not given, then one record will be fetched at a time. scan term Scans database index for a term. The syntax resembles the syntax for find. If you want to scan for the word water you could write scan water but if you want to scan only in, say the title field, you would write scan @attr 1=4 water setscan set term Scans database index for a term within a result set. This is similar to the scan command but has a result set as its first argument. scanpos pos Sets preferred position for scan. This value is used in next scan. By default position is 1. scansize size Sets number of entries to be returned by scan. Default number of entries is 20. scanstep step Set step-size for scan. This value is used in next scan sent to the target. By default step-size is 0. sort sortspecs Sorts a result set. The sort command takes a sequence of space-separated sort specifications, with each sort specification consisting of two space-separated words (so that the whole specification list is made up of an even number of words). The first word of each specification holds a field (sort criterion) and the second holds flags. If the sort criterion includes = it is assumed that the SortKey is of type sortAttributes using Bib-1: in this case the integer before = is the attribute type and the integer following = is the attribute value. If no = is in the criterion it is treated as a sortfield of type InternationalString. The flags word of each sort specification must consist of s for case sensitive or i for case insensitive, and < for ascending order or > for descending order. sort+ Same as sort but stores the sorted result set in a new result set. authentication openauth Sets up a authentication string if a server requires authentication (v2 OpenStyle). The authentication string is first sent to the server when the open command is issued and the Z39.50 Initialize Request is sent, so this command must be used before open in order to be effective. A common convention for the authopen string is that the username - and password is separated by a slash, e.g. myusername/mysecret. sru method version Selects Web Service method and version. Must be one of POST, GET, SOAP (default) or SOLR. Version should be either 1.1 or 1.2 for SRU. Other versions are allowed - for testing purposes (version negotiation with SRU server). The version is currently not used for SOLR Web Services list_all This command displays status and values for many settings. lslb n Sets the limit for when no records should be returned together with the search result. See the Z39.50 standard on set bounds for more details. ssub n Sets the limit for when all records should be returned with the search result. See the Z39.50 standard on set bounds for more details. mspn n Sets the number of records should be returned if the number of records in the result set is between the values of lslb and ssub. See the Z39.50 standard on set bounds for more details. status Displays the values of lslb, ssub and mspn. setname Switches named result sets on and off. Default is on. cancel Sends a Trigger Resource Control Request to the target. format oid Sets the preferred transfer syntax for retrieved records. yaz-client supports all the record syntaxes that currently are registered. See Z39.50 Record Syntax Identifiers for more details. Commonly used records syntaxes include usmarc, sutrs and xml. elements e Sets the element set name for the records. Many targets support element sets are B (for brief) and F (for full). close Sends a Z39.50 Close APDU and closes connection with the peer querytype type Sets the query type as used by command find. The following is supported: prefix for Prefix Query Notation (Type-1 Query); ccl for CCL search (Type-2 Query), cql for CQL (Type-104 search with CQL OID), ccl2rpn for CCL to RPN conversion (Type-1 Query). cql2rpn for CQL to RPN conversion (Type-1 Query). attributeset set Sets attribute set OID for prefix queries (RPN, Type-1). refid id Sets reference ID for Z39.50 Request(s). itemorder type no Sends an Item Order Request using the ILL External. type is either 1 or 2 which corresponds to ILL-Profile 1 and 2 respectively. The no is the Result Set position of the record to be ordered. update action recid doc Sends Item Update Request. The action argument must be the action type: one of insert, replace, delete and update. The second argument, recid, is the record identifier (any string). Third argument which is optional is the record document for the request. If doc is preceded with "<", then the following characters are treated as a filename with the records to be updated. Otherwise doc is treated as a document itself. The doc may also be quited in double quotes. If doc is omitted, the last received record (as part of present response or piggybacked search response) is used for the update. source filename Executes list of commands from file filename, just like source on most UNIX shells. A single dot (.) can be used as an alternative. ! args Executes command args in subshell using the system call. push_command command The push_command takes another command as its argument. That command is then added to the history information (so you can retrieve it later). The command itself is not executed. This command only works if you have GNU readline/history enabled. set_apdufile filename Sets that APDU should be logged to file filename. Another way to achieve APDU log is by using command-line option -a. set_auto_reconnect flag Specifies whether YAZ client automatically reconnect if target closes connection (Z39.50 only). flag must be either on or off. set_auto_wait flag Specifies whether YAZ client should wait for response protocol packages after a request. By default YAZ client waits (on) for response packages immediately after a command (find, show) has been issued. If off is used, YAZ client does not attempt to receive packages automatically. These will have to be manually received when command wait_response is used. flag must be either on or off. set_marcdump filename Specifies that all retrieved records should be appended to file filename. This command does the thing as option -m. schema schemaid Specifies schema for retrieval. Schema may be specified as an OID for Z39.50. For SRU, schema is a simple string URI. charset negotiationcharset [displaycharset] [[marccharset]] Specifies character set (encoding) for Z39.50 negotiation / SRU encoding and/or character set for output (terminal). negotiationcharset is the name of the character set to be negotiated by the server. The special name - for negotiationcharset specifies no character set to be negotiated. If displaycharset is given, it specifies name of the character set of the output (on the terminal on which YAZ client is running). To disable conversion of characters to the output encoding, the special name - (dash) can be used. If the special name auto is given, YAZ client will convert strings to the encoding of the terminal as returned by nl_langinfo call. If marcharset is given, it specifies name of the character set of retrieved MARC records from server. See also marcharset command. Since character set negotation takes effect in the Z39.50 Initialize Request you should issue this command before command open is used. MARC records are not covered by Z39.50 character set negotiation, so that's why there is a separate character that must be known in order to do meaningful conversion(s). negcharset charset Specifies character set for negotiation (Z39.50). The argument is the same as second argument for command charset. displaycharset charset Specifies character set for output (display). The argument is the same as second argument for command charset. marccharset charset Specifies character set for retrieved MARC records so that YAZ client can display them in a character suitable for your display. See charset command. If auto is given, YAZ will assume that MARC21/USMARC is using MARC8/UTF8 and ISO-8859-1 for all other MARC variants. The charset argument is the same as third argument for command charset. querycharset charset Specifies character set for query terms for Z39.50 RPN queries and Z39.50 Scan Requests (termListAndStartPoint). This is a pure client-side conversion which converts from displayCharset to queryCharset. set_cclfile filename Specifies that CCL fields should be read from file file filename. This command does the thing as option -c. set_cqlfile filename Specifies that CQL fields should be read from file file filename. This command does the thing as option -q. register_oid name class OID This command allows you to register your own object identifier - so that instead of entering a long dot-notation you can use a short name instead. The name is your name for the OID, class is the class, and OID is the raw OID in dot notation. Class is one appctx, absyn, attet, transyn, diagset, recsyn, resform, accform, extserv, userinfo, elemspec, varset, schema, tagset, general. If you're in doubt use the general class. register_tab command string This command registers a TAB completion string for the command given. sleep seconds This command makes YAZ client sleep (be idle) for the number of seconds given. wait_response [ number] This command makes YAZ client wait for a number of response packages from target. If number is omitted, 1 is assumed. This command is rarely used and is only useful if command set_auto_wait is set to off. xmles OID doc Sends XML Extended Services request using the OID and doc given. zversion ver This command sets Z39.50 version for negotiation. Should be used before open. By default 3 (version 3) is used. options op1 op2.. This command sets Z39.50 options for negotiation. Should be used before open. The following options are supported: search, present, delSet, resourceReport, triggerResourceCtrl, resourceCtrl, accessCtrl, scan, sort, extendedServices, level_1Segmentation, level_2Segmentation, concurrentOperations, namedResultSets, encapsulation, resultCount, negotiationModel, duplicationDetection, queryType104, pQESCorrection, stringSchema. yaz-4.2.30/doc/installation.html0000644000175000017500000001236311741237744013477 00000000000000Chapter 2. Compilation and Installation

Chapter 2. Compilation and Installation

1. Introduction

The latest version of the software will generally be found at:

http://ftp.indexdata.com/pub/yaz/

We have tried our best to keep the software portable, and on many platforms, you should be able to compile everything with little or no changes.

The software is regularly tested on Debian GNU/Linux, Redhat Linux, Ubuntu Linux, FreeBSD (i386), MAC OSX, SunOS 5.10 (sparc), Windows 2000, Windows 2003 server.

Some versions have be known to work on HP/UX, DEC Unix, NetBSD, OpenBSD, IBM AIX, Data General DG/UX (with some CFLAGS tinkering), SGI/IRIX, DDE Supermax, Apple Macintosh (using the Codewarrior programming environment and the GUSI socket libraries), IBM AS/400 .

If you move the software to other platforms, we'd be grateful if you'd let us know about it. If you run into difficulties, we will try to help if we can, and if you solve the problems, we would be happy to include your fixes in the next release. So far, we have mostly avoided #ifdefs for individual platforms, and we'd like to keep it that way as far as it makes sense.

We maintain a mailing-list for the purpose of announcing new releases and bug-fixes, as well as general discussion. Subscribe by filling-in the form here. General questions and problems can be directed at mailto:yaz-help@indexdata.dk, or the address given at the top of this document.

yaz-4.2.30/doc/yaz-json-parse-man.xml0000644000175000017500000000420211733047144014250 00000000000000 %local; %entities; %idcommon; ]> YAZ &version; Index Data yaz-json-parse 1 Commands yaz-json-parse YAZ JSON parser yaz-json-parse -p DESCRIPTION yaz-json-parse is utility which demonstrates the JSON API of YAZ. (yaz/json.h). The program attempts to parse a JSON from standard input (stdin). It will return exit code 1 if parsing fails and the parsing error message will be printed to standard error (stderr). The program returns exit code 0 parsing succeeds and return no output, unless -p is given (see below). OPTIONS -p Makes the JSON parser echo the JSON result string to standard output - if parsing from stdin was successful. SEE ALSO yaz 7 yaz-4.2.30/doc/installation.unix.html0000644000175000017500000004316711741237744014467 000000000000002. UNIX

2. UNIX

We provide Debian GNU/Linux and Redhat packages for YAZ. Only i386 binary packages are available. You should be able to create packages for other CPUs by building them from the source package.

2.1. Compiling from source on Unix

Note that if your system doesn't have a native ANSI C compiler, you may have to acquire one separately. We recommend GCC.

If you wish to use character set conversion facilities in YAZ or if you are compiling YAZ for use with Zebra it is a good idea to ensure that the iconv library is installed. Some Unixes today already have it - if not, we suggest GNU libiconv.

YAZ 3.0.16 and later includes a wrapper for the ICU (International Components for Unicode). In order to use this, the developer version of the ICU library must be available.

The libxslt, libxml2 librararies are required if YAZ is to support SRU. These libraries are very portable and should compile out-of-the box on virtually all Unix platforms. It is available in binary forms for Linux and others.

The GNU tools Autoconf, Automake and Libtool are used to generate Makefiles and configure YAZ for the system. You do not these tools unless you're using the CVS version of YAZ.

The CQL parser for YAZ is built using GNU Bison. This tool is only needed if you're using the CVS version of YAZ.

YAZ includes a tiny ASN.1 compiler. This compiler is written in Tcl. But as for Bison you do not need it unless you're using CVS version of YAZ or you're using the compiler to built own codecs for private ASN.1.

Generally it should be sufficient to run configure without options, like this:

     ./configure
    

The configure script attempts to use use the C compiler specified by the CC environment variable. If not set, GNU C will be used if it is available. The CFLAGS environment variable holds options to be passed to the C compiler. If you're using Bourne-compatible shell you may pass something like this to use a particular C compiler with optimization enabled:

     CC=/opt/ccs/bin/cc CFLAGS=-O ./configure
    

To customize YAZ, the configure script also accepts a set of options. The most important are:

--prefix=prefix

Specifies installation prefix for YAZ. This is only needed if you run make install later to perform a "system" installation. The prefix is /usr/local if not specified.

--enable-tcpd

The front end server will be built using Wietse's TCP wrapper library. It allows you to allow/deny clients depending on IP number. The TCP wrapper library is often used in GNU/Linux and BSD distributions. See hosts_access(5) and tcpd(8).

--enable-threads

YAZ will be built using POSIX threads. Specifically, _REENTRANT will be defined during compilation.

--disable-shared

The make process will not create shared libraries (also known as shared objects .so). By default, shared libraries are created - equivalent to --enable-shared.

--disable-shared

The make process will not create static libraries (.a). By default, static libraries are created - equivalent to --enable-static.

--with-iconv[=prefix]

Compile YAZ with iconv library in directory prefix. By default configure will search for iconv on the system. Use this option if it doesn't find iconv. Alternatively, --without-iconv, can be uset to force YAZ not to use iconv.

--with-xslt[=prefix]

Compile YAZ with libxslt in directory prefix. Use this option if you want XSLT and XML support. By default, configure will search for libxslt on the system. Use this option if it libxslt is not found automatically. Alternatively, --without-xslt, can be used to force YAZ not to use libxslt.

--with-xml2[=prefix]

Compile YAZ with libxml2 in directory prefix. Use this option if you want YAZ to use XML and support SRU. By default, configure will search for libxml2 on the system. Use this option if it libxml2 is not found automatically. Alternatively, --without-xml2, can be used to force YAZ not to use libxml2.

Note that option --with-xslt also enables libxml2.

--with-gnutls[=prefix]

YAZ will be linked with the GNU TLS libraries and an SSL COMSTACK will be provided. By default configure enables SSL support for YAZ if the GNU TLS development libraries are found on the system.

--with-openssl[=prefix]

YAZ will be linked with the OpenSSL libraries and an SSL COMSTACK will be provided. If OpenSSL is enabled, GNU TLS is automatically disabled.

--with-icu[=prefix]

YAZ will be linked the ICU library in the prefix if given. If prefix is not given, the libraries exposed by the script icu-config will be used if found.

When configured, build the software by typing:

      make
     

The following files are generated by the make process:

src/libyaz.la

Main YAZ library. This is no ordinary library. It's a Libtool archive. By default, YAZ creates a static library in lib/.libs/libyaz.a.

src/libyaz_server.la

Generic Frontend server. This is an add-on for libyaz.la. Code in this library uses POSIX threads functions - if POSIX threads are available on the platform.

src/libyaz_icu.la

Functions that wrap the ICU library.

ztest/yaz-ztest

Test Z39.50 server.

client/yaz-client

Z39.50 client for testing the protocol. See chapter YAZ client for more information.

util/yaz-config

A Bourne-shell script, generated by configure, that specifies how external applications should compile - and link with YAZ.

util/yaz-asncomp

The ASN.1 compiler for YAZ. Requires the Tcl Shell, tclsh, in PATH to operate.

util/yaz-iconv

This program converts data in one character set to another. This command exercises the YAZ character set conversion API.

util/yaz-marcdump

This program parses ISO2709 encoded MARC records and prints them in line-format or XML.

util/yaz-icu

This program exposes the ICU wrapper library if that is enabled for YAZ. Only if ICU is available this program is useful.

zoom/zoomsh

A simple shell implemented on top of the ZOOM functions. The shell is a command line application that allows you to enter simple commands to perform ZOOM operations.

zoom/zoomtst1, zoom/zoomtst2, ..

Several small applications that demonstrates the ZOOM API.

If you wish to install YAZ in system directories /usr/local/bin, /usr/local/lib .. etc, you can type:

     make install
    

You probably need to have root access in order to perform this. You must specify the --prefix option for configure if you wish to install YAZ in other directories than the default /usr/local/.

If you wish to perform an un-installation of YAZ, use:

     make uninstall
    

This will only work if you haven't reconfigured YAZ (and therefore changed installation prefix). Note that uninstall will not remove directories created by make install, e.g. /usr/local/include/yaz.

2.2. How to make apps using YAZ on UNIX

This section describes how to compile - and link your own applications using the YAZ toolkit. If you're used to Makefiles this shouldn't be hard. As for other libraries you have used before, you have to set a proper include path for your C/C++ compiler and specify the location of YAZ libraries. You can do it by hand, but generally we suggest you use the yaz-config that is generated by configure. This is especially important if you're using the threaded version of YAZ which require you to pass more options to your linker/compiler.

The yaz-config script accepts command line options that makes the yaz-config script print options that you should use in your make process. The most important ones are: --cflags, --libs which prints C compiler flags, and linker flags respectively.

A small and complete Makefile for a C application consisting of one source file, myprog.c, may look like this:

      YAZCONFIG=/usr/local/bin/yaz-config
      CFLAGS=`$(YAZCONFIG) --cflags`
      LIBS=`$(YAZCONFIG) --libs`
      myprog: myprog.o
         $(CC) $(CFLAGS) -o myprog myprog.o $(LIBS)
      

The CFLAGS variable consists of a C compiler directive that will set the include path to the parent directory of yaz. That is, if YAZ header files were installed in /usr/local/include/yaz, then include path is set to /usr/local/include. Therefore, in your applications you should use

      #include <yaz/proto.h>
     

and not

      #include <proto.h>
     

For Libtool users, the yaz-config script provides a different variant of option --libs, called --lalibs that returns the name of the Libtool archive(s) for YAZ rather than the ordinary ones.

For applications using the threaded version of YAZ, specify threads after the other options. When threads is given, more flags and linker flags will be printed by yaz-config. If our previous example was using threads, you'd have to modify the lines that set CFLAGS and LIBS as follows:

      CFLAGS=`$(YAZCONFIG) --cflags threads`
      LIBS=`$(YAZCONFIG) --libs threads`
     

There is no need specify POSIX thread libraries in your Makefile. The LIBS variable includes that as well.

yaz-4.2.30/doc/yaz-log.html0000644000175000017500000002705011741237744012357 00000000000000yaz-log

Name

yaz-log — Log handling in all yaz-based programs

Synopsis

yaz-XXXX [-v loglevel,...] [-l logfile]

DESCRIPTION

All YAZ-based programs use a common log subsystem, and should support common command line options for controlling it. This man page documents those.

OPTIONS

-l logfile

Specify the file where the log is to be written. If none is specified, stderr is used. The log is appended to this file. If the file grows overly large, it is silently rotated: It is renamed to logfile.1, logfile.2, .., 9 (old such file is deleted), and a new file is opened. The limit defaults to 1GB, but can be set by the program. The rotating limit can be specified with option -r for the YAZ frontend server (yaz-ztest).

Rotation can also be implicitly enabled by using a filename which gets changed for a given date, due to substitutions as given by the strftime(3) function.

-v loglevel

Specify the logging level. The argument is a set of log level names, separated by commas (no whitespace!), optionally preceded by a '-' to negate that level. Most programs have their own default, often containing fatal,warn,log, and some application-specific values. The default list can be cleared with the word none, or individual bits can be removed by prefixing them with a dash '-'.

LOG LEVELS TO CONTROL LOGGING

Some of the log levels control the way the log is written.

flush causes the log to be flushed after every write. This can have serious implications to performance, and should not be used in production. On the other hand, when debugging a program crash, this can be extremely useful. The option debug implies flush as well.

notime prevents the writing of time stamps. This is intended for automatic test scripts, which should produce predictable log files that are easy to compare.

GENERAL LOG LEVELS IN YAZ ITSELF

YAZ itself uses the following log levels:

fatal for fatal errors, that prevent further execution of the program.

warn for warnings about things that should be corrected.

debug for debugging. This flag may be used temporarily when developing or debugging yaz, or a program that uses yaz. It is practically deprecated, you should be defining and using your own log levels (see below).

all turns on almost all hard-coded log levels.

loglevel logs information about the log levels used by the program. Every time the log level is changed, lists all bits that are on. Every time a module asks for its log bits, this is logged. This can be used for getting an idea of what log levels are available in any program that uses yaz-log. Start the program with -v none,loglevel, and do some common operations with it. Another way is to grep for yaz_log_module_level in the source code, as in

      find . -name '*.[ch]' -print | 
         xargs grep yaz_log_module_level | 
         grep '"' |
         cut -d'"' -f2 | 
         sort -u   
   

eventl, malloc, nmem, odr are used internally for debugging yaz.

LOG LEVELS FOR CLIENTS

zoom logs the calls to the zoom API, which may be useful in debugging client applications.

LOG LEVELS FOR SERVERS

server logs the server functions on a high level, starting up, listening on a port, etc.

session logs individual sessions (connections).

request logs a one-liner for each request (init, search, etc).

requestdetail logs the details of every request, before it is passed to the back-end, and the results received from it.

Each server program (zebra, etc) is supposed to define its own log levels in addition to these. As they depend on the server in question, they can not be described here. See above how to find out about them.

LOGGING EXAMPLES

See what log levels yaz-ztest is using:

    yaz-ztest -1 -v none,loglevel
    14:43:29-23/11 [loglevel] Setting log level to 4096 = 0x00001000
    14:43:29-23/11 [loglevel] Static  log bit 00000001 'fatal' is off
    14:43:29-23/11 [loglevel] Static  log bit 00000002 'debug' is off
    14:43:29-23/11 [loglevel] Static  log bit 00000004 'warn' is off
    14:43:29-23/11 [loglevel] Static  log bit 00000008 'log' is off
    14:43:29-23/11 [loglevel] Static  log bit 00000080 'malloc' is off
    14:43:29-23/11 [loglevel] Static  log bit 00000800 'flush' is off
    14:43:29-23/11 [loglevel] Static  log bit 00001000 'loglevel' is ON
    14:43:29-23/11 [loglevel] Static  log bit 00002000 'server' is off
    14:43:29-23/11 [loglevel] Dynamic log bit 00004000 'session' is off
    14:43:29-23/11 [loglevel] Dynamic log bit 00008000 'request' is off
    14:44:13-23/11 yaz-ztest [loglevel] returning log bit 0x4000 for 'session'
    14:44:13-23/11 yaz-ztest [loglevel] returning log bit 0x2000 for 'server'
    14:44:13-23/11 yaz-ztest [loglevel] returning NO log bit for 'eventl'
    14:44:20-23/11 yaz-ztest [loglevel] returning log bit 0x4000 for 'session'
    14:44:20-23/11 yaz-ztest [loglevel] returning log bit 0x8000 for 'request'
    14:44:20-23/11 yaz-ztest [loglevel] returning NO log bit for 'requestdetail'
    14:44:20-23/11 yaz-ztest [loglevel] returning NO log bit for 'odr'
    14:44:20-23/11 yaz-ztest [loglevel] returning NO log bit for 'ztest'
   

See the details of the requests for yaz-ztest

   ./yaz-ztest -1 -v requestdetail
   14:45:35-23/11 yaz-ztest [server] Adding static Z3950 listener on tcp:@:9999
   14:45:35-23/11 yaz-ztest [server] Starting server ./yaz-ztest pid=32200
   14:45:38-23/11 yaz-ztest [session] Starting session from tcp:127.0.0.1 (pid=32200)
   14:45:38-23/11 yaz-ztest [requestdetail] Got initRequest
   14:45:38-23/11 yaz-ztest [requestdetail] Id:        81
   14:45:38-23/11 yaz-ztest [requestdetail] Name:      YAZ
   14:45:38-23/11 yaz-ztest [requestdetail] Version:   2.0.28
   14:45:38-23/11 yaz-ztest [requestdetail] Negotiated to v3: srch prst del extendedServices namedresults scan sort
   14:45:38-23/11 yaz-ztest [request] Init from 'YAZ' (81) (ver 2.0.28) OK
   14:45:39-23/11 yaz-ztest [requestdetail] Got SearchRequest.
   14:45:39-23/11 yaz-ztest [requestdetail] ResultSet '1'
   14:45:39-23/11 yaz-ztest [requestdetail] Database 'Default'
   14:45:39-23/11 yaz-ztest [requestdetail] RPN query. Type: Bib-1
   14:45:39-23/11 yaz-ztest [requestdetail]  term 'foo' (general)
   14:45:39-23/11 yaz-ztest [requestdetail] resultCount: 7
   14:45:39-23/11 yaz-ztest [request] Search Z: @attrset Bib-1 foo  OK:7 hits
   14:45:41-23/11 yaz-ztest [requestdetail] Got PresentRequest.
   14:45:41-23/11 yaz-ztest [requestdetail] Request to pack 1+1 1
   14:45:41-23/11 yaz-ztest [requestdetail] pms=1048576, mrs=1048576
   14:45:41-23/11 yaz-ztest [request] Present: [1] 1+1  OK 1 records returned
   

LOG FILENAME EXAMPLES

A file with format my_YYYYMMDD.log is where Y, M, D is year, month, and day digits is given as follows -l my_%Y%m%d.log . And since the filename is depending on day, rotaion will occur on midnight.

A weekly log could be specified as -l my_%Y%U.log.

FILES

prefix/include/yaz/log.h prefix/src/log.c

SEE ALSO

yaz(7) yaz-ztest(8) yaz-client(1) strftime(3)

yaz-4.2.30/doc/introduction.html0000644000175000017500000002040611741237744013514 00000000000000Chapter 1. Introduction

Chapter 1. Introduction

YAZ is a C/C++ library for information retrieval applications using the Z39.50/SRU/SOLR protocols for information retrieval.

Properties of YAZ:

  • Complete Z39.50 version 3 support. Amendments and Z39.50-2002 revision is supported.

  • Supports SRU GET/POST/SOAP version 1.2 (over HTTP and HTTPS).

  • Includes BER encoders/decoders for the ISO ILL protocol.

  • Supports SOLR Web Service version 1.4.x (client side only)

  • Supports the following transports: BER over TCP/IP (RFC1729), BER over unix local socket, and HTTP 1.1.

  • Secure Socket Layer support using GNU TLS or OpenSSL. If enabled, YAZ uses HTTPS transport (for SOAP) or "Secure BER" (for Z39.50).

  • Offers ZOOM C API implementing Z39.50, SRU and SOLR Web Service.

  • The YAZ library offers a set of useful utilities related to the protocols, such as MARC (ISO2709) parser, CCL (ISO8777) parser, CQL parser, memory management routines, character set conversion.

  • Portable code. YAZ compiles out-of-the box on most Unixes and on Windows using Microsoft Visual C++.

  • Fast operation. The C based BER encoders/decoders as well as the server component of YAZ is very fast.

  • Liberal license that allows for commercial use of YAZ.

1. Reading this Manual

Most implementors only need to read a fraction of the material in thie manual, so a quick walkthrough of the chapters is in order.

  • Chapter 2, Compilation and Installation contains installation instructions for YAZ. You don't need reading this if you expect to download YAZ binaries. However, the chapter contains information about how to make your application link with YAZ.

  • Chapter 3, ZOOM describes the ZOOM API of YAZ. This is definitely worth a read if you wish to develop a Z39.50/SRU client.

  • Chapter 4, Generic server describes the generic frontend server and explains how to develop server Z39.50/SRU applications for YAZ. Obviously worth reading if you're to develop a server.

  • yaz-client(1) describes how to use the YAZ Z39.50 client. If you're developer and wish to test your server or a server from another party, you might find this chapter useful.

  • Chapter 5, The Z39.50 ASN.1 Module documents the most commonly used Z39.50 C data structures offered by the YAZ API. Client developers using ZOOM and non-Z39.50 implementors may skip this.

  • Chapter 6, SOAP and SRU describes how SRU and SOAP is used in YAZ. Only if you're developing SRU applications this section is a must.

  • Chapter 7, Supporting Tools contains sections for the various tools offered by YAZ. Scan through the material quickly and see what's relevant to you! SRU implementors might find the CQL section particularly useful.

  • Chapter 8, The ODR Module goes through the details of the ODR module which is the work horse that encodes and decodes BER packages. Implementors using ZOOM only, do not need reading this. Most other Z39.50 implementors only need to read the first two sections (Section 1, “Introduction” and Section 2, “Using ODR”).

  • Chapter 9, The COMSTACK Module describes the network layer module COMSTACK. Implementors using ZOOM or the generic frontend server may skip this. Others, presumably, handling client/server communication on their own should read this.

yaz-4.2.30/doc/gfs-synopsis.xml0000644000175000017500000000340211733047144013262 00000000000000 &gfs-synopsis-app; listener-spec yaz-4.2.30/doc/zoom.records.html0000644000175000017500000002625111741237744013423 000000000000004. Records

4. Records

A record object is a retrieval record on the client side - created from result sets.

     void ZOOM_resultset_records(ZOOM_resultset r,
                                 ZOOM_record *recs,
                                 size_t start, size_t count);
     ZOOM_record ZOOM_resultset_record(ZOOM_resultset s, size_t pos);

     const char *ZOOM_record_get(ZOOM_record rec, const char *type,
                                 size_t *len);

     int ZOOM_record_error(ZOOM_record rec, const char **msg,
                           const char **addinfo, const char **diagset);

     ZOOM_record ZOOM_record_clone(ZOOM_record rec);

     void ZOOM_record_destroy(ZOOM_record rec);
   

References to temporary records are returned by functions ZOOM_resultset_records or ZOOM_resultset_record.

If a persistent reference to a record is desired ZOOM_record_clone should be used. It returns a record reference that should be destroyed by a call to ZOOM_record_destroy.

A single record is returned by function ZOOM_resultset_record that takes a position as argument. First record has position zero. If no record could be obtained NULL is returned.

Error information for a record can be checked with ZOOM_record_error which returns non-zero (error code) if record is in error, called Surrogate Diagnostics in Z39.50.

Function ZOOM_resultset_records retrieves a number of records from a result set. Parameter start and count specifies the range of records to be returned. Upon completion array recs[0], ..recs[count-1] holds record objects for the records. The array of records recs should be allocated prior the call ZOOM_resultset_records. Note that for those records that couldn't be retrieved from the target recs[ ..] is set to NULL.

In order to extract information about a single record, ZOOM_record_get is provided. The function returns a pointer to certain record information. The nature (type) of the pointer depends on the parameter, type.

The type is a string of the format:

format[;charset=from[/opacfrom][,to]][;format=v]

where format specifies the format of the returned record, from specifies the character set of the record in its original form (as returned by the server), to specifies the output (returned) character set encoding. If to is omitted UTF-8 is assumed. If charset is not given, then no character set conversion takes place.

OPAC records may be returned in a different set from the bibliographic MARC record. If this is this the case, opacfrom should be set to the character set of the OPAC record part.

Note

Specifying the OPAC record character set requires YAZ 4.1.5 or later.

The format argument controls whether record data should be XML pretty-printed (post process operation). It is enabled only if format value v is 1 and the record content is XML well-formed.

In addition, for certain types, the length len passed will be set to the size in bytes of the returned information.

The following are the supported values for form.

database

Database of record is returned as a C null-terminated string. Return type const char *.

syntax

The transfer syntax of the record is returned as a C null-terminated string containing the symbolic name of the record syntax, e.g. Usmarc. Return type is const char *.

schema

The schema of the record is returned as a C null-terminated string. Return type is const char *.

render

The record is returned in a display friendly format. Upon completion buffer is returned (type const char *) and length is stored in *len.

raw

The record is returned in the internal YAZ specific format. For GRS-1, Explain, and others, the raw data is returned as type Z_External * which is just the type for the member retrievalRecord in type NamePlusRecord. For SUTRS and octet aligned record (including all MARCs) the octet buffer is returned and the length of the buffer.

xml

The record is returned in XML if possible. SRU, SOLR and Z39.50 records with transfer syntax XML are returned verbatim. MARC records are returned in MARCXML (converted from ISO2709 to MARCXML by YAZ). OPAC records are also converted to XML and the bibliographic record is converted to MARCXML (when possible). GRS-1 records are not supported for this form. Upon completion, the XML buffer is returned (type const char *) and length is stored in *len.

opac

OPAC information for record is returned in XML if an OPAC record is present at the position given. If no OPAC record is present, a NULL pointer is returned.

txml

The record is returned in TurboMARC if possible. SRU and Z39.50 records with transfer syntax XML are returned verbatim. MARC records are returned in TurboMARC (converted from ISO2709 to TurboMARC by YAZ). Upon completion, the XML buffer is returned (type const char *) and length is stored in *len.

Most MARC21 records uses the MARC-8 character set encoding. An application that wishes to display in Latin-1 would use

     render; charset=marc8,iso-8859-1
    

4.1. Z39.50 Protocol behavior

The functions ZOOM_resultset_record and ZOOM_resultset_records inspects the client-side record cache. Records not found in cache are fetched using Present. The functions may block (and perform network I/O) - even though option async is 1, because they return records objects. (and there's no way to return records objects without retrieving them!).

There is a trick, however, in the usage of function ZOOM_resultset_records that allows for delayed retrieval (and makes it non-blocking). By using a null pointer for recs you're indicating you're not interested in getting records objects now.

4.2. SRU/SOLR Protocol behavior

The ZOOM driver for SRU/SOLR treats records returned by a SRU/SOLR server as if they where Z39.50 records with transfer syntax XML and no element set name or database name.

yaz-4.2.30/doc/yaz.html0000644000175000017500000001113311741237744011573 00000000000000yaz

Name

yaz — Z39.50 toolkit.

DESCRIPTION

YAZ is a C/C++ programmer's toolkit supporting the development of Z39.50v3 clients and servers. The YAZ toolkit offers several different levels of access to the ISO23950/Z39.50, SRU SOLR (client only) and ILL protocols. The level that you need to use depends on your requirements, and the role (server or client) that you want to implement.

COPYRIGHT

Copyright © 1995-2012 Index Data.

All rights reserved.

Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met:

  • Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer.

  • Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution.

  • Neither the name of Index Data nor the names of its contributors may be used to endorse or promote products derived from this software without specific prior written permission.

THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS AND CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.

SEE ALSO

yaz-client(1), yaz-ztest(8), yaz-config(8), zoomsh(1) bib1-attr(7)

YAZ manual ( /usr/local/share/doc/yaz)

YAZ home page.

Z39.50 Maintenance Agency Page.

yaz-4.2.30/doc/index.html0000644000175000017500000005657211741237744012117 00000000000000YAZ User's Guide and Reference

YAZ User's Guide and Reference

Sebastian Hammer

Adam Dickmeiss

Mike Taylor

Heikki Levanto

4.2.30

Abstract

This document is the programmer's guide and reference to the YAZ package version 4.2.30. YAZ is a compact toolkit that provides access to the Z39.50 and SRW/SRU protocols, as well as a set of higher-level tools for implementing the server and client roles, respectively. The documentation can be used on its own, or as a reference when looking at the example applications provided with the package.


Table of Contents

1. Introduction
1. Reading this Manual
2. The API
2. Compilation and Installation
1. Introduction
2. UNIX
2.1. Compiling from source on Unix
2.2. How to make apps using YAZ on UNIX
3. WIN32
3.1. Compiling from Source on WIN32
3.2. How to make apps using YAZ on WIN32
3. ZOOM
1. Connections
1.1. Z39.50 Protocol behavior
1.2. SRU/SOLR Protocol behavior
2. Queries
2.1. Protocol behavior
3. Result sets
3.1. Z39.50 Protocol behavior
3.2. SRU Protocol behavior
4. Records
4.1. Z39.50 Protocol behavior
4.2. SRU/SOLR Protocol behavior
5. Facets
6. Scan
7. Extended Services
7.1. Item Order
7.2. Record Update
7.3. Database Create
7.4. Database Drop
7.5. Commit Operation
7.6. Protocol behavior
8. Options
9. Events
4. Generic server
1. Introduction
2. The Database Frontend
3. The Backend API
4. Your main() Routine
5. The Backend Functions
5.1. Init
5.2. Search and Retrieve
5.3. Delete
5.4. Scan
6. Application Invocation
7. GFS Configuration and Virtual Hosts
5. The Z39.50 ASN.1 Module
1. Introduction
2. Preparing PDUs
3. EXTERNAL Data
4. PDU Contents Table
6. SOAP and SRU
1. Introduction
2. HTTP
3. SOAP Packages
4. SRU
7. Supporting Tools
1. Query Syntax Parsers
1.1. Prefix Query Format
1.1.1. Using Proximity Operators with PQF
1.1.2. PQF queries
1.2. CCL
1.2.1. CCL Syntax
1.2.2. CCL Qualifiers
1.2.3. CCL API
1.3. CQL
1.3.1. CQL parsing
1.3.2. CQL tree
1.3.3. CQL to PQF conversion
1.3.4. Specification of CQL to RPN mappings
1.3.5. CQL to XCQL conversion
2. Object Identifiers
2.1. OID database
2.2. Standard OIDs
3. Nibble Memory
4. Log
5. MARC
5.1. TurboMARC
6. Retrieval Facility
6.1. Retrieval XML format
6.2. Retrieval Facility Examples
6.3. API
8. The ODR Module
1. Introduction
2. Using ODR
2.1. ODR Streams
2.2. Memory Management
2.3. Encoding and Decoding Data
2.4. Printing
2.5. Diagnostics
2.6. Summary and Synopsis
3. Programming with ODR
3.1. The Primitive ASN.1 Types
3.1.1. INTEGER
3.1.2. BOOLEAN
3.1.3. REAL
3.1.4. NULL
3.1.5. OCTET STRING
3.1.6. BIT STRING
3.1.7. OBJECT IDENTIFIER
3.2. Tagging Primitive Types
3.3. Constructed Types
3.4. Tagging Constructed Types
3.4.1. Implicit Tagging
3.4.2. Explicit Tagging
3.5. SEQUENCE OF
3.6. CHOICE Types
4. Debugging
9. The COMSTACK Module
1. Synopsis (blocking mode)
2. Introduction
3. Common Functions
3.1. Managing Endpoints
3.2. Data Exchange
4. Client Side
5. Server Side
6. Addresses
7. SSL
8. Diagnostics
9. Summary and Synopsis
10. Future Directions
I. Reference
yaz-client — Z39.50/SRU client for implementors
yaz-ztest — Z39.50/SRU Test Server
yaz-config — Script to get information about YAZ.
yaz — Z39.50 toolkit.
zoomsh — ZOOM shell
yaz-asncomp — YAZ ASN.1 compiler
yaz-marcdump — MARC record dump utility
yaz-iconv — YAZ Character set conversion utility
yaz-log — Log handling in all yaz-based programs
yaz-illclient — ILL client
yaz-icu — YAZ ICU utility
yaz-url — YAZ URL fetch utility
Bib-1 Attribute Set — Bib-1 Attribute Set
yaz-json-parse — YAZ JSON parser
A. List of Object Identifiers
B. License
1. Index Data Copyright
C. About Index Data
D. Credits

List of Figures

1.1. YAZ layers
yaz-4.2.30/doc/indexdata.html0000644000175000017500000000642711741237744012743 00000000000000Appendix C. About Index Data

Appendix C. About Index Data

Index Data is a consulting and software-development enterprise that specializes in library and information management systems. Our interests and expertise span a broad range of related fields, and one of our primary, long-term objectives is the development of a powerful information management system with open network interfaces and hyper-media capabilities.

We make this software available free of charge, on a fairly unrestrictive license; as a service to the networking community, and to further the development of quality software for open network communication.

We'll be happy to answer questions about the software, and about ourselves in general.


    Index Data ApS
    Købmagergade 43 2.
    1150 Copenhagen K
    Denmark
    Phone +45 3341 0100
    Fax +45 3341 0101
    Email 
   

The Hacker's Jargon File has the following to say about the use of the prefix "YA" in the name of a software product.

[ Yet Another. adj. 1. Of your own work: A humorous allusion often used in titles to acknowledge that the topic is not original, though the content is. As in "Yet Another AI Group" or "Yet Another Simulated Annealing Algorithm". 2. Of others' work: Describes something of which there are already far too many. ]

yaz-4.2.30/doc/yaz-marcdump.10000644000175000017500000001276011741237740012600 00000000000000'\" t .\" Title: yaz-marcdump .\" Author: Index Data .\" Generator: DocBook XSL Stylesheets v1.76.1 .\" Date: 04/11/2012 .\" Manual: Commands .\" Source: YAZ 4.2.30 .\" Language: English .\" .TH "YAZ\-MARCDUMP" "1" "04/11/2012" "YAZ 4.2.30" "Commands" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" yaz-marcdump \- MARC record dump utility .SH "SYNOPSIS" .HP \w'\fByaz\-marcdump\fR\ 'u \fByaz\-marcdump\fR [\fB\-i\ \fR\fB\fIformat\fR\fR] [\fB\-o\ \fR\fB\fIformat\fR\fR] [\fB\-f\ \fR\fB\fIfrom\fR\fR] [\fB\-t\ \fR\fB\fIto\fR\fR] [\fB\-l\ \fR\fB\fIspec\fR\fR] [\fB\-c\ \fR\fB\fIcfile\fR\fR] [\fB\-s\ \fR\fB\fIprefix\fR\fR] [\fB\-C\ \fR\fB\fIsize\fR\fR] [\fB\-n\fR] [\fB\-p\fR] [\fB\-v\fR] [\fB\-V\fR] [file...] .SH "DESCRIPTION" .PP \fByaz\-marcdump\fR reads MARC records from one or more files\&. It parses each record and supports output in line\-format, ISO2709, MARCXML, MarcXchange as well as Hex output\&. .PP This utility parses records ISO2709(raw MARC) as well as XML if that is structured as MARCXML/MarcXchange\&. .if n \{\ .sp .\} .RS 4 .it 1 an-trap .nr an-no-space-flag 1 .nr an-break-flag 1 .br .ps +1 \fBNote\fR .ps -1 .br .PP As of YAZ 2\&.1\&.18, OAI\-MARC is no longer supported\&. OAI\-MARC is deprecated\&. Use MARCXML instead\&. .sp .5v .RE .PP By default, each record is written to standard output in a line format with newline for each field, $x for each subfield x\&. The output format may be changed with option \-o, .PP \fByaz\-marcdump\fR can also be requested to perform character set conversion of each record\&. .SH "OPTIONS" .PP \-i \fIformat\fR .RS 4 Specifies input format\&. Must be one of marcxml, marc (ISO2709), marcxchange (ISO25577), line (line mode MARC), or turbomarc (Turbo MARC)\&. .RE .PP \-o \fIformat\fR .RS 4 Specifies output format\&. Must be one of marcxml, marc (ISO2709), marcxchange (ISO25577), line (line mode MARC), or turbomarc (Turbo MARC)\&. .RE .PP \-f \fIfrom\fR .RS 4 Specify the character set \fIfrom\fR of the input MARC record\&. Should be used in conjunction with option \-t\&. Refer to the yaz\-iconv man page for supported character sets\&. .RE .PP \-t \fIto\fR .RS 4 Specify the character set \fIof\fR of the output\&. Should be used in conjunction with option \-f\&. Refer to the yaz\-iconv man page for supported character sets\&. .RE .PP \-l \fIleaderspec\fR .RS 4 Specify a simple modification string for MARC leader\&. The \fIleaderspec\fR is a list of pos=value pairs, where pos is an integer offset (0 \- 23) for leader\&. Value is either a quoted string or an integer (character value in decimal)\&. Pairs are comma separated\&. For example, to set leader at offset 9 to a, use 9=\*(Aqa\*(Aq\&. .RE .PP \-s \fIprefix\fR .RS 4 Writes a chunk of records to a separate file with prefix given, i\&.e\&. splits a record batch into files with only at most "chunk" ISO2709 record per file\&. By default chunk is 1 (one record per file)\&. See option \-C\&. .RE .PP \-C \fIchunksize\fR .RS 4 Specifies chunk size; to be used conjunction with option \-s\&. .RE .PP \-p .RS 4 Makes yaz\-marcdump prints record number and input file offset of each record read\&. .RE .PP \-n .RS 4 MARC output is omitted so that MARC input is only checkecd\&. .RE .PP \-v .RS 4 Writes more information about the parsing process\&. Useful if you have ill\-formatted ISO2709 records as input\&. .RE .PP \-V .RS 4 Prints YAZ version\&. .RE .SH "EXAMPLES" .PP The following command converts MARC21/USMARC in MARC\-8 encoding to MARC21/USMARC in UTF\-8 encoding\&. Leader offset 9 is set to \*(Aqa\*(Aq\&. Both input and output records are ISO2709 encoded\&. .sp .if n \{\ .RS 4 .\} .nf yaz\-marcdump \-f MARC\-8 \-t UTF\-8 \-o marc \-l 9=97 marc21\&.raw >marc21\&.utf8\&.raw .fi .if n \{\ .RE .\} .PP The same records may be converted to MARCXML instead in UTF\-8: .sp .if n \{\ .RS 4 .\} .nf yaz\-marcdump \-f MARC\-8 \-t UTF\-8 \-o marcxml marc21\&.raw >marcxml\&.xml .fi .if n \{\ .RE .\} .PP Turbo MARC is a compact XML notation with same semantics as MARCXML, but which allows for faster processing via XSLT\&. In order to generate Turbo MARC records encoded in UTF\-8 from MARC21 (ISO), one could use: .sp .if n \{\ .RS 4 .\} .nf yaz\-marcdump \-f MARC8 \-t UTF8 \-o turbomarc \-i marc marc21\&.raw >out\&.xml .fi .if n \{\ .RE .\} .sp .SH "FILES" .PP \fIprefix\fR/bin/yaz\-marcdump .PP \fIprefix\fR/include/yaz/marcdisp\&.h .SH "SEE ALSO" .PP \fByaz\fR(7) .PP \fByaz-iconv\fR(1) .PP \m[blue]\fBMARCXML\fR\m[]\&\s-2\u[1]\d\s+2\&. .PP \m[blue]\fBISO25577\fR\m[]\&\s-2\u[2]\d\s+2\&. .SH "NOTES" .IP " 1." 4 MARCXML .RS 4 \%http://www.loc.gov/standards/marcxml/ .RE .IP " 2." 4 ISO25577 .RS 4 \%http://www.loc.gov/standards/iso25577/ .RE yaz-4.2.30/doc/yaz-man.xml0000644000175000017500000001020411733047144012170 00000000000000 %local; %entities; %idcommon; ]> YAZ &version; Index Data yaz 7 Conventions and miscellaneous yaz Z39.50 toolkit. DESCRIPTION YAZ is a C/C++ programmer's toolkit supporting the development of Z39.50v3 clients and servers. The YAZ toolkit offers several different levels of access to the ISO23950/Z39.50, SRU SOLR (client only) and ILL protocols. The level that you need to use depends on your requirements, and the role (server or client) that you want to implement. COPYRIGHT Copyright © ©right-year; Index Data. All rights reserved. Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. Neither the name of Index Data nor the names of its contributors may be used to endorse or promote products derived from this software without specific prior written permission. THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS AND CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. SEE ALSO yaz-client 1 , yaz-ztest 8 , yaz-config 8 , zoomsh 1 bib1-attr 7 YAZ manual ( &prefix;/share/doc/yaz) YAZ home page. Z39.50 Maintenance Agency Page. yaz-4.2.30/doc/yaz-illclient.10000644000175000017500000000421311741237741012742 00000000000000'\" t .\" Title: yaz-illclient .\" Author: Index Data .\" Generator: DocBook XSL Stylesheets v1.76.1 .\" Date: 04/11/2012 .\" Manual: Commands .\" Source: YAZ 4.2.30 .\" Language: English .\" .TH "YAZ\-ILLCLIENT" "1" "04/11/2012" "YAZ 4.2.30" "Commands" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" yaz-illclient \- ILL client .SH "SYNOPSIS" .HP \w'\fByaz\-illclient\fR\ 'u \fByaz\-illclient\fR [\fB\-f\ \fR\fB\fIfilename\fR\fR] [\fB\-v\ \fR\fB\fIloglevel\fR\fR] [\fB\-D\fR\ \fIname=value\fR...] [\fB\-o\fR] [\fB\-u\ \fR\fB\fIuser\fR\fR] [\fB\-p\ \fR\fB\fIpassword\fR\fR] [\fB\-V\fR] [server\-addr] .SH "DESCRIPTION" .PP \fByaz\-illclient\fR is an client which sends an ISO ILL request to a remote server and decodes the response from it\&. Exactly one server address ( \fIserver\-addr\fR ) must be specified\&. .SH "OPTIONS" .PP \-f \fIfilename\fR] .RS 4 Specify filename\&. .RE .PP \-v \fIloglevel\fR] .RS 4 Specify the log level .RE .PP \-D \fIname=value\fR] .RS 4 Defines name & value pair\&. .RE .PP \-o .RS 4 Enable OCLC authentication\&. .RE .PP \-u \fIuser\fR] .RS 4 Specify user\&. .RE .PP \-p \fIpassword\fR] .RS 4 Specify password\&. .RE .PP \-V .RS 4 Show yaz\-illclient version\&. .RE .SH "EXAMPLES" .PP None yet\&. .SH "FILES" .PP None yet\&. .SH "SEE ALSO" .PP yaz(7) yaz-4.2.30/doc/server.main.html0000644000175000017500000002045411741237744013227 000000000000004. Your main() Routine

4. Your main() Routine

As mentioned, your main() routine can be quite brief. If you want to initialize global parameters, or read global configuration tables, this is the place to do it. At the end of the routine, you should call the function

int statserv_main(int argc, char **argv,
                  bend_initresult *(*bend_init)(bend_initrequest *r),
                  void (*bend_close)(void *handle));
   

The third and fourth arguments are pointers to handlers. Handler bend_init is called whenever the server receives an Initialize Request, so it serves as a Z39.50 session initializer. The bend_close handler is called when the session is closed.

statserv_main will establish listening sockets according to the parameters given. When connection requests are received, the event handler will typically fork() and create a sub-process to handle a new connection. Alternatively the server may be setup to create threads for each connection. If you do use global variables and forking, you should be aware, then, that these cannot be shared between associations, unless you explicitly disable forking by command line parameters.

The server provides a mechanism for controlling some of its behavior without using command-line options. The function

    statserv_options_block *statserv_getcontrol(void);
   

will return a pointer to a struct statserv_options_block describing the current default settings of the server. The structure contains these elements:

int dynamic

A boolean value, which determines whether the server will fork on each incoming request (TRUE), or not (FALSE). Default is TRUE. This flag is only read by UNIX-based servers (WIN32 based servers doesn't fork).

int threads

A boolean value, which determines whether the server will create a thread on each incoming request (TRUE), or not (FALSE). Default is FALSE. This flag is only read by UNIX-based servers that offer POSIX Threads support. WIN32-based servers always operate in threaded mode.

int inetd

A boolean value, which determines whether the server will operates under a UNIX INET daemon (inetd). Default is FALSE.

char logfile[ODR_MAXNAME+1]

File for diagnostic output ("": stderr).

char apdufile[ODR_MAXNAME+1]

Name of file for logging incoming and outgoing APDUs ("": don't log APDUs, "-": stderr).

char default_listen[1024]

Same form as the command-line specification of listener address. "": no default listener address. Default is to listen at "tcp:@:9999". You can only specify one default listener address in this fashion.

enum oid_proto default_proto;

Either PROTO_Z3950 or PROTO_SR. Default is PROTO_Z39_50.

int idle_timeout;

Maximum session idle-time, in minutes. Zero indicates no (infinite) timeout. Default is 15 minutes.

int maxrecordsize;

Maximum permissible record (message) size. Default is 1Mb. This amount of memory will only be allocated if a client requests a very large amount of records in one operation (or a big record). Set it to a lower number if you are worried about resource consumption on your host system.

char configname[ODR_MAXNAME+1]

Passed to the backend when a new connection is received.

char setuid[ODR_MAXNAME+1]

Set user id to the user specified, after binding the listener addresses.

void (*bend_start)(struct statserv_options_block *p)

Pointer to function which is called after the command line options have been parsed - but before the server starts listening. For forked UNIX servers this handler is called in the mother process; for threaded servers this handler is called in the main thread. The default value of this pointer is NULL in which case it isn't invoked by the frontend server. When the server operates as an NT service this handler is called whenever the service is started.

void (*bend_stop)(struct statserv_options_block *p)

Pointer to function which is called whenever the server has stopped listening for incoming connections. This function pointer has a default value of NULL in which case it isn't called. When the server operates as an NT service this handler is called whenever the service is stopped.

void *handle

User defined pointer (default value NULL). This is a per-server handle that can be used to specify "user-data". Do not confuse this with the session-handle as returned by bend_init.

The pointer returned by statserv_getcontrol points to a static area. You are allowed to change the contents of the structure, but the changes will not take effect before you call

void statserv_setcontrol(statserv_options_block *block);
   

Note

that you should generally update this structure before calling statserv_main().

yaz-4.2.30/doc/yaz-icu.10000644000175000017500000001224611741237741011550 00000000000000'\" t .\" Title: yaz-icu .\" Author: Index Data .\" Generator: DocBook XSL Stylesheets v1.76.1 .\" Date: 04/11/2012 .\" Manual: Commands .\" Source: YAZ 4.2.30 .\" Language: English .\" .TH "YAZ\-ICU" "1" "04/11/2012" "YAZ 4.2.30" "Commands" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" yaz-icu \- YAZ ICU utility .SH "SYNOPSIS" .HP \w'\fByaz\-icu\fR\ 'u \fByaz\-icu\fR [\-c\ \fIconfig\fR] [\-p\ \fIopt\fR] [\-s] [\-x] [infile] .SH "DESCRIPTION" .PP \fByaz\-icu\fR is utility which demonstrates the ICU chain module of yaz\&. (yaz/icu\&.h)\&. .PP The utility can be used in two ways\&. It may read some text using an XML configuration for configuring ICU and show text analysis\&. This mode is triggered by option \-c which specififies the configuration to be used\&. The input file is read from standard input or from a file if infile is specified\&. .PP The utility may also show ICU information\&. This is triggered by option \-p\&. .SH "OPTIONS" .PP \-c \fIconfig\fR .RS 4 Specifies the file containing ICU chain configuration which is XML based\&. .RE .PP \-p \fItype\fR .RS 4 Specifies extra information to be printed about the ICU system\&. If \fItype\fR is c then ICU converters are printed\&. If \fItype\fR is l available locales are printed\&. If \fItype\fR is t available transliterators are printed\&. .RE .PP \-s .RS 4 Specifies that output should include sort key as well\&. Note that sort key differs between ICU versions\&. .RE .PP \-x .RS 4 Specifies that output should be XML based rather than "text" based\&. .RE .SH "ICU CHAIN CONFIGURATION" .PP The ICU chain configuration speicifies one or more rules to convert text data into tokens\&. The configuration format is XML based\&. .PP The toplevel element must be named icu_chain\&. The icu_chain element has one required attribute locale which specifies the ICU locale to be used in the conversion steps\&. .PP The icu_chain element must include elements where each element specifies a conversion step\&. The conversion is performed in the order in which the conversion steps are specified\&. Each conversion element takes one attribute: rule which serves as argument to the conversion step\&. .PP The following conversion elements are available: .PP casemap .RS 4 Converts case and rule specifies how: .PP l .RS 4 Lowercase using ICU function u_strToLower\&. .RE .PP u .RS 4 Upper case using ICU function u_strToUpper\&. .RE .PP t .RS 4 To title using UCU function u_strToTitle\&. .RE .PP f .RS 4 Fold case using ICU function u_strFoldCase\&. .RE .sp .RE .PP display .RS 4 This is a meta step which specifies that a term/token is to be displayed\&. This term is retrieved in an application using function icu_chain_token_display (yaz/icu\&.h)\&. .RE .PP transform .RS 4 Specifies an ICU transform rule using a transliterator Identifier\&. The rule attribute is the transliterator Identifier\&. See \m[blue]\fBICU Transforms\fR\m[]\&\s-2\u[1]\d\s+2 for more information\&. .RE .PP transliterate .RS 4 Specifies a rule\-based transliterator\&. The rule attribute is the custom transformation rule to be used\&. See \m[blue]\fBICU Transforms\fR\m[]\&\s-2\u[1]\d\s+2 for more information\&. .RE .PP tokenize .RS 4 Breaks / tokenizes a string into components using ICU functions ubrk_open, ubrk_setText, \&.\&. \&. The rule is one of: .PP l .RS 4 Line\&. ICU: UBRK_LINE\&. .RE .PP s .RS 4 Sentence\&. ICU: UBRK_SENTENCE\&. .RE .PP w .RS 4 Word\&. ICU: UBRK_WORD\&. .RE .PP c .RS 4 Character\&. ICU: UBRK_CHARACTER\&. .RE .PP t .RS 4 Title\&. ICU: UBRK_TITLE\&. .RE .sp .RE .SH "EXAMPLES" .PP The following command analyzes text in file text using ICU chain configuration chain\&.xml: .sp .if n \{\ .RS 4 .\} .nf cat text | yaz\-icu \-c chain\&.xml .fi .if n \{\ .RE .\} .sp The chain\&.xml might look as follows: .sp .if n \{\ .RS 4 .\} .nf .fi .if n \{\ .RE .\} .sp .SH "SEE ALSO" .PP \fByaz\fR(7) .PP \m[blue]\fBICU Home\fR\m[]\&\s-2\u[2]\d\s+2 .PP \m[blue]\fBICU Transforms\fR\m[]\&\s-2\u[1]\d\s+2 .SH "NOTES" .IP " 1." 4 ICU Transforms .RS 4 \%http://userguide.icu-project.org/transforms/general .RE .IP " 2." 4 ICU Home .RS 4 \%http://www.icu-project.org/ .RE yaz-4.2.30/doc/Makefile.am0000644000175000017500000000650711733047144012141 00000000000000## This file is part of the YAZ toolkit. ## Copyright (C) 1995-2012 Index Data SUBDIRS = common XMLFILES=bookinfo.xml introduction.xml installation.xml \ indexdata.xml \ asn.xml tools.xml odr.xml comstack.xml server.xml license.xml \ future.xml zoom.xml credits.xml gfs-options.xml \ yaz.xml yaz-client-commands.xml soap.xml gfs-virtual.xml gfs-synopsis.xml \ std-oid-table.xml manref.xml HTMLFILES = index.html MANFILES=yaz-client.1 yaz-ztest.8 \ yaz-config.1 yaz.7 zoomsh.1 yaz-asncomp.1 \ yaz-marcdump.1 yaz-iconv.1 yaz-log.7 \ yaz-illclient.1 yaz-icu.1 yaz-url.1 bib1-attr.7 \ yaz-json-parse.1 REFFILES=yaz-client-man.xml yaz-ztest-man.xml yaz-config-man.xml \ yaz-man.xml zoomsh-man.xml yaz-asncomp-man.xml \ yaz-marcdump-man.xml yaz-iconv-man.xml yaz-log-man.xml \ yaz-illclient-man.xml yaz-icu-man.xml yaz-url-man.xml \ bib1-attr-man.xml yaz-json-parse-man.xml SUPPORTFILES=entities.ent apilayer.obj local.ent.in doc_DATA = $(HTMLFILES) apilayer.png man_MANS = $(MANFILES) EXTRA_DIST = $(XMLFILES) $(SUPPORTFILES) $(man_MANS) $(REFFILES) \ $(doc_DATA) std-oid-table.xml: $(srcdir)/../src/oid.csv $(TCLSH) $(srcdir)/../src/oidtoc.tcl $(srcdir) $(srcdir)/../src/oid.csv std-oid-table.xml yaz-client.1: $(srcdir)/yaz-client-man.xml $(srcdir)/yaz-client-commands.xml $(MAN_COMPILE) $(srcdir)/yaz-client-man.xml yaz-ztest.8: yaz-ztest-man.xml gfs-options.xml gfs-synopsis.xml gfs-virtual.xml $(MAN_COMPILE) $(srcdir)/yaz-ztest-man.xml yaz-config.1: yaz-config-man.xml $(MAN_COMPILE) $(srcdir)/yaz-config-man.xml yaz.7: yaz-man.xml $(MAN_COMPILE) $(srcdir)/yaz-man.xml bib1-attr.7: bib1-attr-man.xml $(MAN_COMPILE) $(srcdir)/bib1-attr-man.xml zoomsh.1: zoomsh-man.xml $(MAN_COMPILE) $(srcdir)/zoomsh-man.xml yaz-asncomp.1: yaz-asncomp-man.xml $(MAN_COMPILE) $(srcdir)/yaz-asncomp-man.xml yaz-marcdump.1: yaz-marcdump-man.xml $(MAN_COMPILE) $(srcdir)/yaz-marcdump-man.xml yaz-iconv.1: yaz-iconv-man.xml $(MAN_COMPILE) $(srcdir)/yaz-iconv-man.xml yaz-illclient.1: yaz-illclient-man.xml $(MAN_COMPILE) $(srcdir)/yaz-illclient-man.xml yaz-log.7: yaz-log-man.xml $(MAN_COMPILE) $(srcdir)/yaz-log-man.xml yaz-icu.1: yaz-icu-man.xml $(MAN_COMPILE) $(srcdir)/yaz-icu-man.xml yaz-url.1: yaz-url-man.xml $(MAN_COMPILE) $(srcdir)/yaz-url-man.xml yaz-json-parse.1: yaz-json-parse-man.xml $(MAN_COMPILE) $(srcdir)/yaz-json-parse-man.xml $(HTMLFILES): $(XMLFILES) rm -f *.html $(HTML_COMPILE) $(srcdir)/yaz.xml yaz.pdf: $(XMLFILES) $(PDF_COMPILE) $(srcdir)/yaz.xml yazj.pdf: jade -E14 -D $(srcdir) -d common/print.dsl -t tex $(srcdir)/common/xml.dcl $(srcdir)/yaz.xml rm -f yazj.pdf cp yaz.tex yazj.tex pdfjadetex yazj.tex pdfjadetex yazj.tex >/dev/null pdfjadetex yazj.tex >/dev/null manref.xml: $(REFFILES) $(srcdir)/common/stripref.xsl rm -f manref.xml for i in $(REFFILES); do \ xsltproc $(srcdir)/common/stripref.xsl $(srcdir)/$$i | sed 1d >>manref.xml; \ done apilayer.png: tgif -print -xbm apilayer.obj xbmtopbm apilayer.png dist-hook: if test -f index.html; then d=.; else d="$(srcdir)"; fi; \ for p in $$d/*.html; do \ cp $$p $(distdir); \ done doc-clean: rm -f manref.xml *.html *.[0-9] *.pdf install-data-hook: if test -f index.html; then d=.; else d="$(srcdir)"; fi; \ for p in $$d/*.html; do \ $(INSTALL_DATA) $$p $(DESTDIR)$(docdir); \ done uninstall-hook: rm -r $(DESTDIR)$(docdir) yaz-4.2.30/doc/yaz-json-parse.html0000644000175000017500000000552611741237744013663 00000000000000yaz-json-parse

Name

yaz-json-parse — YAZ JSON parser

Synopsis

yaz-json-parse [-p]

DESCRIPTION

yaz-json-parse is utility which demonstrates the JSON API of YAZ. (yaz/json.h).

The program attempts to parse a JSON from standard input (stdin). It will return exit code 1 if parsing fails and the parsing error message will be printed to standard error (stderr). The program returns exit code 0 parsing succeeds and return no output, unless -p is given (see below).

OPTIONS

-p

Makes the JSON parser echo the JSON result string to standard output - if parsing from stdin was successful.

SEE ALSO

yaz(7)

yaz-4.2.30/doc/comstack.addresses.html0000644000175000017500000001030411741237744014547 000000000000006. Addresses

6. Addresses

The low-level format of the addresses are different depending on the mode of communication you have chosen. A function is provided by each of the lower layers to map a user-friendly string-form address to the binary form required by the lower layers.

    void *cs_straddr(COMSTACK handle, const char *str);
   

The format for TCP/IP and SSL addresses is:

    <host> [ ':' <portnum> ]
   

The hostname can be either a domain name or an IP address. The port number, if omitted, defaults to 210.

For TCP/IP and SSL transport modes, the special hostname "@" is mapped to any local address (the manifest constant INADDR_ANY). It is used to establish local listening endpoints in the server role.

For UNIX sockets, the format of an address is the socket filename.

When a connection has been established, you can use

    const char *cs_addrstr(COMSTACK h);
   

to retrieve the host name of the peer system. The function returns a pointer to a static area, which is overwritten on the next call to the function.

A fairly recent addition to the COMSTACK module is the utility function

    COMSTACK cs_create_host (const char *str, int blocking, void **vp);
   

which is just a wrapper for cs_create and cs_straddr. The str is similar to that described for cs_straddr but with a prefix denoting the COMSTACK type. Prefixes supported are tcp:, unix: and ssl: for TCP/IP, UNIX and SSL respectively. If no prefix is given, then TCP/IP is used. The blocking is passed to function cs_create. The third parameter vp is a pointer to COMSTACK stack type specific values. For SSL (ssl_type) vp is an already create OpenSSL CTX. For TCP/IP and UNIX vp is unused (can be set to NULL.

yaz-4.2.30/doc/local.ent.in0000644000175000017500000000007211654451754012313 00000000000000 yaz-4.2.30/doc/zoomsh.10000644000175000017500000000652611741237740011511 00000000000000'\" t .\" Title: zoomsh .\" Author: Index Data .\" Generator: DocBook XSL Stylesheets v1.76.1 .\" Date: 04/11/2012 .\" Manual: Commands .\" Source: YAZ 4.2.30 .\" Language: English .\" .TH "ZOOMSH" "1" "04/11/2012" "YAZ 4.2.30" "Commands" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" zoomsh \- ZOOM shell .SH "SYNOPSIS" .HP \w'\fBzoomsh\fR\ 'u \fBzoomsh\fR [\fB\-e\fR] [\fB\-v\ \fR\fB\fIloglevel\fR\fR] [commands...] .SH "DESCRIPTION" .PP \fBzoomsh\fR is a ZOOM client with a simple command line interface\&. The client demonstrates the ZOOM API and is useful for testing targets\&. .PP You may pass one or more commands to \fBzoomsh\fR\&. These commands are invoked first\&. .SH "OPTIONS" .PP \-e .RS 4 Makes zoomsh stop processing commands as soon as an error occur\&. The exit code of zoomsh is 1 if error occurs; 0 otherwise\&. .RE .PP \-v \fIloglevel\fR .RS 4 Sets YAZ log level\&. .RE .SH "EXAMPLES" .PP If you start the \fByaz\-ztest\fR in one console you can use the ZOOM shell as follows: .sp .if n \{\ .RS 4 .\} .nf $ zoomsh ZOOM>connect localhost:9999 ZOOM>search computer localhost:9999: 7 hits ZOOM>show 0 1 1 Default USmarc 001 11224466 003 DLC 005 00000000000000\&.0 008 910710c19910701nju 00010 eng 010 $a 11224466 040 $a DLC $c DLC 050 00 $a 123\-xyz 100 10 $a Jack Collins 245 10 $a How to program a computer 260 1 $a Penguin 263 $a 8710 300 $a p\&. cm\&. ZOOM>quit .fi .if n \{\ .RE .\} .PP You can also achieve the same result by passing the commands as arguments on a single command line: .PP $ zoomsh "connect localhost:9999" "search computer" "show 0 1" quit .SH "COMMANDS" .PP connect \fIzurl\fR .RS 4 Connects to the target given by \fIzurl\fR\&. .RE .PP close [\fIzurl\fR] .RS 4 Closes connection to target given by \fIzurl\fR or all targets if \fIzurl\fR was omitted\&. .RE .PP show [\fIstart\fR [\fIcount\fR]] .RS 4 Displays count records starting at offset given by \fIstart\fR\&. First records has offset 0 (unlike the Z39\&.50 protocol)\&. .RE .PP quit .RS 4 Quits \fBzoomsh\fR\&. .RE .PP set \fIname\fR [\fIvalue\fR] .RS 4 Sets option \fIname\fR to \fIvalue\fR\&. .RE .PP get \fIname\fR .RS 4 Prints value of option \fIname\fR\&. .RE .PP help .RS 4 Prints list of available commands\&. .RE .SH "SEE ALSO" .PP \fByaz\fR(7), \fByaz-ztest\fR(8), .PP Section "Building clients with ZOOM" in the YAZ manual\&. .PP \m[blue]\fBZOOM home page\fR\m[]\&\s-2\u[1]\d\s+2\&. .SH "NOTES" .IP " 1." 4 ZOOM home page .RS 4 \%http://zoom.z3950.org/ .RE yaz-4.2.30/doc/odr.programming.html0000644000175000017500000006612611741237744014111 000000000000003. Programming with ODR

3. Programming with ODR

The API of ODR is designed to reflect the structure of ASN.1, rather than BER itself. Future releases may be able to represent data in other external forms.

Tip

There is an ASN.1 tutorial available at this site. This site also has standards for ASN.1 (X.680) and BER (X.690) online.

The ODR interface is based loosely on that of the Sun Microsystems XDR routines. Specifically, each function which corresponds to an ASN.1 primitive type has a dual function. Depending on the settings of the ODR stream which is supplied as a parameter, the function may be used either to encode or decode data. The functions that can be built using these primitive functions, to represent more complex data types, share this quality. The result is that you only have to enter the definition for a type once - and you have the functionality of encoding, decoding (and pretty-printing) all in one unit. The resulting C source code is quite compact, and is a pretty straightforward representation of the source ASN.1 specification.

In many cases, the model of the XDR functions works quite well in this role. In others, it is less elegant. Most of the hassle comes from the optional SEQUENCE members which don't exist in XDR.

3.1. The Primitive ASN.1 Types

ASN.1 defines a number of primitive types (many of which correspond roughly to primitive types in structured programming languages, such as C).

3.1.1. INTEGER

The ODR function for encoding or decoding (or printing) the ASN.1 INTEGER type looks like this:

      int odr_integer(ODR o, Odr_int **p, int optional, const char *name);
     

The Odr_int is just a simple integer.

This form is typical of the primitive ODR functions. They are named after the type of data that they encode or decode. They take an ODR stream, an indirect reference to the type in question, and an optional flag (corresponding to the OPTIONAL keyword of ASN.1) as parameters. They all return an integer value of either one or zero. When you use the primitive functions to construct encoders for complex types of your own, you should follow this model as well. This ensures that your new types can be reused as elements in yet more complex types.

The o parameter should obviously refer to a properly initialized ODR stream of the right type (encoding/decoding/printing) for the operation that you wish to perform.

When encoding or printing, the function first looks at * p. If * p (the pointer pointed to by p) is a null pointer, this is taken to mean that the data element is absent. If the optional parameter is nonzero, the function will return one (signifying success) without any further processing. If the optional is zero, an internal error flag is set in the ODR stream, and the function will return 0. No further operations can be carried out on the stream without a call to the function odr_reset().

If *p is not a null pointer, it is expected to point to an instance of the data type. The data will be subjected to the encoding rules, and the result will be placed in the buffer held by the ODR stream.

The other ASN.1 primitives have similar functions that operate in similar manners:

3.1.2. BOOLEAN

int odr_bool(ODR o, Odr_bool **p, int optional, const char *name);
     

3.1.3. REAL

Not defined.

3.1.4. NULL

int odr_null(ODR o, Odr_null **p, int optional, const char *name);
     

In this case, the value of **p is not important. If *p is different from the null pointer, the null value is present, otherwise it's absent.

3.1.5. OCTET STRING

typedef struct odr_oct
{
    unsigned char *buf;
    int len;
    int size;
} Odr_oct;

int odr_octetstring(ODR o, Odr_oct **p, int optional,
                    const char *name);
     

The buf field should point to the character array that holds the octetstring. The len field holds the actual length, while the size field gives the size of the allocated array (not of interest to you, in most cases). The character array need not be null terminated.

To make things a little easier, an alternative is given for string types that are not expected to contain embedded NULL characters (eg. VisibleString):

      int odr_cstring(ODR o, char **p, int optional, const char *name);
     

Which encoded or decodes between OCTETSTRING representations and null-terminates C strings.

Functions are provided for the derived string types, eg:

int odr_visiblestring(ODR o, char **p, int optional,
                      const char *name);
     

3.1.6. BIT STRING

int odr_bitstring(ODR o, Odr_bitmask **p, int optional,
                  const char *name);
     

The opaque type Odr_bitmask is only suitable for holding relatively brief bit strings, eg. for options fields, etc. The constant ODR_BITMASK_SIZE multiplied by 8 gives the maximum possible number of bits.

A set of macros are provided for manipulating the Odr_bitmask type:

void ODR_MASK_ZERO(Odr_bitmask *b);

void ODR_MASK_SET(Odr_bitmask *b, int bitno);

void ODR_MASK_CLEAR(Odr_bitmask *b, int bitno);

int ODR_MASK_GET(Odr_bitmask *b, int bitno);
     

The functions are modeled after the manipulation functions that accompany the fd_set type used by the select(2) call. ODR_MASK_ZERO should always be called first on a new bitmask, to initialize the bits to zero.

3.1.7. OBJECT IDENTIFIER

int odr_oid(ODR o, Odr_oid **p, int optional, const char *name);
     

The C OID representation is simply an array of integers, terminated by the value -1 (the Odr_oid type is synonymous with the short type). We suggest that you use the OID database module (see Section 2.1, “OID database”) to handle object identifiers in your application.

3.2. Tagging Primitive Types

The simplest way of tagging a type is to use the odr_implicit_tag() or odr_explicit_tag() macros:

int odr_implicit_tag(ODR o, Odr_fun fun, int class, int tag,
                     int optional, const char *name);

int odr_explicit_tag(ODR o, Odr_fun fun, int class, int tag,
                     int optional, const char *name);
    

To create a type derived from the integer type by implicit tagging, you might write:

     MyInt ::= [210] IMPLICIT INTEGER
    

In the ODR system, this would be written like:

int myInt(ODR o, Odr_int **p, int optional, const char *name)
{
    return odr_implicit_tag(o, odr_integer, p,
			    ODR_CONTEXT, 210, optional, name);
}
    

The function myInt() can then be used like any of the primitive functions provided by ODR. Note that the behavior of odr_explicit_tag() and odr_implicit_tag() macros act exactly the same as the functions they are applied to - they respond to error conditions, etc, in the same manner - they simply have three extra parameters. The class parameter may take one of the values: ODR_CONTEXT, ODR_PRIVATE, ODR_UNIVERSAL, or /ODR_APPLICATION.

3.3. Constructed Types

Constructed types are created by combining primitive types. The ODR system only implements the SEQUENCE and SEQUENCE OF constructions (although adding the rest of the container types should be simple enough, if the need arises).

For implementing SEQUENCEs, the functions

int odr_sequence_begin(ODR o, void *p, int size, const char *name);
int odr_sequence_end(ODR o);
    

are provided.

The odr_sequence_begin() function should be called in the beginning of a function that implements a SEQUENCE type. Its parameters are the ODR stream, a pointer (to a pointer to the type you're implementing), and the size of the type (typically a C structure). On encoding, it returns 1 if * p is a null pointer. The size parameter is ignored. On decoding, it returns 1 if the type is found in the data stream. size bytes of memory are allocated, and *p is set to point to this space. odr_sequence_end() is called at the end of the complex function. Assume that a type is defined like this:

MySequence ::= SEQUENCE {
     intval INTEGER,
     boolval BOOLEAN OPTIONAL
}
    

The corresponding ODR encoder/decoder function and the associated data structures could be written like this:

typedef struct MySequence
{
    Odr_int *intval;
    Odr_bool *boolval;
} MySequence;
     
int mySequence(ODR o, MySequence **p, int optional, const char *name)
{
    if (odr_sequence_begin(o, p, sizeof(**p), name) == 0)
        return optional && odr_ok(o);
    return
        odr_integer(o, &(*p)->intval, 0, "intval") &&
        odr_bool(o, &(*p)->boolval, 1, "boolval") &&
        odr_sequence_end(o);
}

    

Note the 1 in the call to odr_bool(), to mark that the sequence member is optional. If either of the member types had been tagged, the macros odr_implicit_tag() or odr_explicit_tag() could have been used. The new function can be used exactly like the standard functions provided with ODR. It will encode, decode or pretty-print a data value of the MySequence type. We like to name types with an initial capital, as done in ASN.1 definitions, and to name the corresponding function with the first character of the name in lower case. You could, of course, name your structures, types, and functions any way you please - as long as you're consistent, and your code is easily readable. odr_ok is just that - a predicate that returns the state of the stream. It is used to ensure that the behavior of the new type is compatible with the interface of the primitive types.

3.4. Tagging Constructed Types

Note

See Section 3.2, “Tagging Primitive Types” for information on how to tag the primitive types, as well as types that are already defined.

3.4.1. Implicit Tagging

Assume the type above had been defined as

MySequence ::= [10] IMPLICIT SEQUENCE {
      intval INTEGER,
      boolval BOOLEAN OPTIONAL
}
     

You would implement this in ODR by calling the function

int odr_implicit_settag(ODR o, int class, int tag);
     

which overrides the tag of the type immediately following it. The macro odr_implicit_tag() works by calling odr_implicit_settag() immediately before calling the function pointer argument. Your type function could look like this:

int mySequence(ODR o, MySequence **p, int optional, const char *name)
{
    if (odr_implicit_settag(o, ODR_CONTEXT, 10) == 0 ||
        odr_sequence_begin(o, p, sizeof(**p), name) == 0)
        return optional && odr_ok(o);
    return
        odr_integer(o, &(*p)->intval, 0, "intval") &&
        odr_bool(o, &(*p)->boolval, 1, "boolval") &&
        odr_sequence_end(o);
}
     

The definition of the structure MySequence would be the same.

3.4.2. Explicit Tagging

Explicit tagging of constructed types is a little more complicated, since you are in effect adding a level of construction to the data.

Assume the definition:

MySequence ::= [10] IMPLICIT SEQUENCE {
   intval INTEGER,
   boolval BOOLEAN OPTIONAL
}
     

Since the new type has an extra level of construction, two new functions are needed to encapsulate the base type:

int odr_constructed_begin(ODR o, void *p, int class, int tag,
                          const char *name);

int odr_constructed_end(ODR o);
     

Assume that the IMPLICIT in the type definition above were replaced with EXPLICIT (or that the IMPLICIT keyword were simply deleted, which would be equivalent). The structure definition would look the same, but the function would look like this:

int mySequence(ODR o, MySequence **p, int optional, const char *name)
{
    if (odr_constructed_begin(o, p, ODR_CONTEXT, 10, name) == 0)
        return optional && odr_ok(o);
    if (o->direction == ODR_DECODE)
        *p = odr_malloc(o, sizeof(**p));
    if (odr_sequence_begin(o, p, sizeof(**p), 0) == 0)
    {
        *p = 0; /* this is almost certainly a protocol error */
        return 0;
    }
    return
        odr_integer(o, &(*p)->intval, 0, "intval") &&
        odr_bool(o, &(*p)->boolval, 1, "boolval") &&
        odr_sequence_end(o) &&
        odr_constructed_end(o);
}
     

Notice that the interface here gets kind of nasty. The reason is simple: Explicitly tagged, constructed types are fairly rare in the protocols that we care about, so the esthetic annoyance (not to mention the dangers of a cluttered interface) is less than the time that would be required to develop a better interface. Nevertheless, it is far from satisfying, and it's a point that will be worked on in the future. One option for you would be to simply apply the odr_explicit_tag() macro to the first function, and not have to worry about odr_constructed_* yourself. Incidentally, as you might have guessed, the odr_sequence_ functions are themselves implemented using the /odr_constructed_ functions.

3.5. SEQUENCE OF

To handle sequences (arrays) of a specific type, the function

int odr_sequence_of(ODR o, int (*fun)(ODR o, void *p, int optional),
                    void *p, int *num, const char *name);
    

The fun parameter is a pointer to the decoder/encoder function of the type. p is a pointer to an array of pointers to your type. num is the number of elements in the array.

Assume a type

MyArray ::= SEQUENCE OF INTEGER
    

The C representation might be

typedef struct MyArray
{
    int num_elements;
    Odr_int **elements;
} MyArray;
    

And the function might look like

int myArray(ODR o, MyArray **p, int optional, const char *name)
{
    if (o->direction == ODR_DECODE)
        *p = odr_malloc(o, sizeof(**p));
    if (odr_sequence_of(o, odr_integer, &(*p)->elements,
        &(*p)->num_elements, name))
        return 1;
    *p = 0;
        return optional && odr_ok(o);
}
    

3.6. CHOICE Types

The choice type is used fairly often in some ASN.1 definitions, so some work has gone into streamlining its interface.

CHOICE types are handled by the function:

int odr_choice(ODR o, Odr_arm arm[], void *p, void *whichp,
               const char *name);
    

The arm array is used to describe each of the possible types that the CHOICE type may assume. Internally in your application, the CHOICE type is represented as a discriminated union. That is, a C union accompanied by an integer (or enum) identifying the active 'arm' of the union. whichp is a pointer to the union discriminator. When encoding, it is examined to determine the current type. When decoding, it is set to reference the type that was found in the input stream.

The Odr_arm type is defined thus:

typedef struct odr_arm
{
    int tagmode;
    int class;
    int tag;
    int which;
    Odr_fun fun;
    char *name;
} Odr_arm;
    

The interpretation of the fields are:

tagmode

Either ODR_IMPLICIT, ODR_EXPLICIT, or ODR_NONE (-1) to mark no tagging.

which

The value of the discriminator that corresponds to this CHOICE element. Typically, it will be a #defined constant, or an enum member.

fun

A pointer to a function that implements the type of the CHOICE member. It may be either a standard ODR type or a type defined by yourself.

name

Name of tag.

A handy way to prepare the array for use by the odr_choice() function is to define it as a static, initialized array in the beginning of your decoding/encoding function. Assume the type definition:

MyChoice ::= CHOICE {
    untagged INTEGER,
    tagged   [99] IMPLICIT INTEGER,
    other    BOOLEAN
}
    

Your C type might look like

typedef struct MyChoice
{
    enum
    {
        MyChoice_untagged,
        MyChoice_tagged,
        MyChoice_other
    } which;
    union
    {
        Odr_int *untagged;
        Odr_int *tagged;
        Odr_bool *other;
    } u;
};
    

And your function could look like this:

int myChoice(ODR o, MyChoice **p, int optional, const char *name)
{
    static Odr_arm arm[] =
    {
      {-1, -1, -1, MyChoice_untagged, odr_integer, "untagged"},
      {ODR_IMPLICIT, ODR_CONTEXT, 99, MyChoice_tagged, odr_integer,
      "tagged"},
      {-1, -1, -1, MyChoice_other, odr_boolean, "other"},
      {-1, -1, -1, -1, 0}
    };

    if (o->direction == ODR_DECODE)
        *p = odr_malloc(o, sizeof(**p);
    else if (!*p)
        return optional && odr_ok(o);

    if (odr_choice(o, arm, &(*p)->u, &(*p)->which), name)
        return 1;
    *p = 0;
        return optional && odr_ok(o);
}
    

In some cases (say, a non-optional choice which is a member of a sequence), you can "embed" the union and its discriminator in the structure belonging to the enclosing type, and you won't need to fiddle with memory allocation to create a separate structure to wrap the discriminator and union.

The corresponding function is somewhat nicer in the Sun XDR interface. Most of the complexity of this interface comes from the possibility of declaring sequence elements (including CHOICEs) optional.

The ASN.1 specifications naturally requires that each member of a CHOICE have a distinct tag, so they can be told apart on decoding. Sometimes it can be useful to define a CHOICE that has multiple types that share the same tag. You'll need some other mechanism, perhaps keyed to the context of the CHOICE type. In effect, we would like to introduce a level of context-sensitiveness to our ASN.1 specification. When encoding an internal representation, we have no problem, as long as each CHOICE member has a distinct discriminator value. For decoding, we need a way to tell the choice function to look for a specific arm of the table. The function

void odr_choice_bias(ODR o, int what);
    

provides this functionality. When called, it leaves a notice for the next call to odr_choice() to be called on the decoding stream o that only the arm entry with a which field equal to what should be tried.

The most important application (perhaps the only one, really) is in the definition of application-specific EXTERNAL encoders/decoders which will automatically decode an ANY member given the direct or indirect reference.

yaz-4.2.30/doc/bib1.html0000644000175000017500000001577611741237744011626 00000000000000Bib-1 Attribute Set

Name

bib1-attr — Bib-1 Attribute Set

DESCRIPTION

This reference entry lists the Bib-1 attribute set types and values.

TYPES

The Bib-1 attribute defines six attribute types: Use (1), Relation (2), Position (3), Structure (4), Truncation (5) and completeness (6).

USE (1)

    1     Personal-name
    2     Corporate-name
    3     Conference-name
    4     Title
    5     Title-series
    6     Title-uniform
    7     ISBN
    8     ISSN
    9     LC-card-number
    10    BNB-card-number
    11    BGF-number
    12    Local-number
    13    Dewey-classification
    14    UDC-classification
    15    Bliss-classification
    16    LC-call-number
    17    NLM-call-number
    18    NAL-call-number
    19    MOS-call-number
    20    Local-classification
    21    Subject-heading
    22    Subject-Rameau
    23    BDI-index-subject
    24    INSPEC-subject
    25    MESH-subject
    26    PA-subject
    27    LC-subject-heading
    28    RVM-subject-heading
    29    Local-subject-index
    30    Date
    31    Date-of-publication
    32    Date-of-acquisition
    33    Title-key
    34    Title-collective
    35    Title-parallel
    36    Title-cover
    37    Title-added-title-page
    38    Title-caption
    39    Title-running
    40    Title-spine
    41    Title-other-variant
    42    Title-former
    43    Title-abbreviated
    44    Title-expanded
    45    Subject-precis
    46    Subject-rswk
    47    Subject-subdivision
    48    Number-natl-biblio
    49    Number-legal-deposit
    50    Number-govt-pub
    51    Number-music-publisher
    52    Number-db
    53    Number-local-call
    54    Code-language
    55    Code-geographic
    56    Code-institution
    57    Name-and-title
    58    Name-geographic
    59    Place-publication
    60    CODEN
    61    Microform-generation
    62    Abstract
    63    Note
    1000  Author-title
    1001  Record-type
    1002  Name
    1003  Author
    1004  Author-name-personal
    1005  Author-name-corporate
    1006  Author-name-conference
    1007  Identifier-standard
    1008  Subject-LC-childrens
    1009  Subject-name-personal
    1010  Body-of-text
    1011  Date/time-added-to-db
    1012  Date/time-last-modified
    1013  Authority/format-id
    1014  Concept-text
    1015  Concept-reference
    1016  Any
    1017  Server-choice
    1018  Publisher
    1019  Record-source
    1020  Editor
    1021  Bib-level
    1022  Geographic-class
    1023  Indexed-by
    1024  Map-scale
    1025  Music-key
    1026  Related-periodical
    1027  Report-number
    1028  Stock-number
    1030  Thematic-number
    1031  Material-type
    1032  Doc-id
    1033  Host-item
    1034  Content-type
    1035  Anywhere
    1036  Author-Title-Subject
   

RELATION (2)

    1 Less than
    2 Less than or equal
    3 Equal
    4 Greater or equal
    5 Greater than
    6 Not equal
    100 Phonetic
    101 Stem
    102 Relevance
    103 AlwaysMatches
   

POSITION (3)

    1 First in field
    2 First in subfield
    3 Any position in field
   

STRUCTURE (4)

    1 Phrase
    2 Word
    3 Key
    4 Year
    5 Date (normalized)
    6 Word list
    100 Date (un-normalized)
    101 Name (normalized)
    102 Name (un-normalized)
    103 Structure
    104 Urx
    105 Free-form-text
    106 Document-text
    107 Local-number
    108 String
    109 Numeric-string
   

TRUNCATION (5)

    1 Right truncation
    2 Left truncation
    3 Left and right truncation
    100 Do not truncate
    101 Process # in search term  . regular #=.*
    102 RegExpr-1
    103 RegExpr-2
    104 Process # ?n . regular: #=., ?n=.{0,n} or ?=.* Z39.58
   

Thw 105-106 truncation attributes below are only supported by Index Data's Zebra server.

    105 Process * ! regular: *=.*, !=. and right truncate
    106 Process * ! regular: *=.*, !=.
   

COMPLETENSS (6)

    1 Incomplete subfield
    2 Complete subfield
    3 Complete field
   

SORTING (7)

    1 ascending
    2 descending
   

Type 7 is an Index Data extension to RPN queries that allows embedding a sort critieria into a query.

yaz-4.2.30/doc/yaz-marcdump.html0000644000175000017500000002100211741237744013375 00000000000000yaz-marcdump

Name

yaz-marcdump — MARC record dump utility

Synopsis

yaz-marcdump [-i format] [-o format] [-f from] [-t to] [-l spec] [-c cfile] [-s prefix] [-C size] [-n] [-p] [-v] [-V] [file...]

DESCRIPTION

yaz-marcdump reads MARC records from one or more files. It parses each record and supports output in line-format, ISO2709, MARCXML, MarcXchange as well as Hex output.

This utility parses records ISO2709(raw MARC) as well as XML if that is structured as MARCXML/MarcXchange.

Note

As of YAZ 2.1.18, OAI-MARC is no longer supported. OAI-MARC is deprecated. Use MARCXML instead.

By default, each record is written to standard output in a line format with newline for each field, $x for each subfield x. The output format may be changed with option -o,

yaz-marcdump can also be requested to perform character set conversion of each record.

OPTIONS

-i format

Specifies input format. Must be one of marcxml, marc (ISO2709), marcxchange (ISO25577), line (line mode MARC), or turbomarc (Turbo MARC).

-o format

Specifies output format. Must be one of marcxml, marc (ISO2709), marcxchange (ISO25577), line (line mode MARC), or turbomarc (Turbo MARC).

-f from

Specify the character set from of the input MARC record. Should be used in conjunction with option -t. Refer to the yaz-iconv man page for supported character sets.

-t to

Specify the character set of of the output. Should be used in conjunction with option -f. Refer to the yaz-iconv man page for supported character sets.

-l leaderspec

Specify a simple modification string for MARC leader. The leaderspec is a list of pos=value pairs, where pos is an integer offset (0 - 23) for leader. Value is either a quoted string or an integer (character value in decimal). Pairs are comma separated. For example, to set leader at offset 9 to a, use 9='a'.

-s prefix

Writes a chunk of records to a separate file with prefix given, i.e. splits a record batch into files with only at most "chunk" ISO2709 record per file. By default chunk is 1 (one record per file). See option -C.

-C chunksize

Specifies chunk size; to be used conjunction with option -s.

-p

Makes yaz-marcdump prints record number and input file offset of each record read.

-n

MARC output is omitted so that MARC input is only checkecd.

-v

Writes more information about the parsing process. Useful if you have ill-formatted ISO2709 records as input.

-V

Prints YAZ version.

EXAMPLES

The following command converts MARC21/USMARC in MARC-8 encoding to MARC21/USMARC in UTF-8 encoding. Leader offset 9 is set to 'a'. Both input and output records are ISO2709 encoded.

    yaz-marcdump -f MARC-8 -t UTF-8 -o marc -l 9=97 marc21.raw >marc21.utf8.raw
   

The same records may be converted to MARCXML instead in UTF-8:

    yaz-marcdump -f MARC-8 -t UTF-8 -o marcxml marc21.raw >marcxml.xml
   

Turbo MARC is a compact XML notation with same semantics as MARCXML, but which allows for faster processing via XSLT. In order to generate Turbo MARC records encoded in UTF-8 from MARC21 (ISO), one could use:

    yaz-marcdump -f MARC8 -t UTF8 -o turbomarc -i marc marc21.raw >out.xml
   

FILES

prefix/bin/yaz-marcdump

prefix/include/yaz/marcdisp.h

SEE ALSO

yaz(7)

yaz-iconv(1)

MARCXML.

ISO25577.

yaz-4.2.30/doc/yaz-config-man.xml0000644000175000017500000000716711733047144013451 00000000000000 %local; %entities; %idcommon; ]> YAZ &version; Index Data yaz-config 1 Commands yaz-config Script to get information about YAZ. yaz-config libraries DESCRIPTION yaz-config is a script that returns information that your own software should use to build software that uses YAZ. The following libraries are supported: threads Use the threaded version of YAZ. OPTIONS --prefix[=DIR] Returns prefix of YAZ or assume a different one if DIR is specified. --version Returns version of YAZ. --libs Library specification be used when using YAZ. --lalibs Return library specification. --cflags Return C Compiler flags. --comp Returns full path to YAZ' ASN.1 compiler: yaz-asncomp. -V veturns YAZ SHA1 ID (from Git) and version. FILES &prefix;/bin/yaz-config &prefix;/lib/libyaz*.a &prefix;/include/yaz/*.h SEE ALSO yaz(7) Section "How to make apps using YAZ on UNIX" in the YAZ manual. yaz-4.2.30/doc/bib1-attr-man.xml0000644000175000017500000001373711733047144013170 00000000000000 %local; %entities; %idcommon; ]> YAZ &version; Index Data Bib-1 Attribute Set 7 Conventions and miscellaneous bib1-attr Bib-1 Attribute Set DESCRIPTION This reference entry lists the Bib-1 attribute set types and values. TYPES The Bib-1 attribute defines six attribute types: Use (1), Relation (2), Position (3), Structure (4), Truncation (5) and completeness (6). USE (1) 1 Personal-name 2 Corporate-name 3 Conference-name 4 Title 5 Title-series 6 Title-uniform 7 ISBN 8 ISSN 9 LC-card-number 10 BNB-card-number 11 BGF-number 12 Local-number 13 Dewey-classification 14 UDC-classification 15 Bliss-classification 16 LC-call-number 17 NLM-call-number 18 NAL-call-number 19 MOS-call-number 20 Local-classification 21 Subject-heading 22 Subject-Rameau 23 BDI-index-subject 24 INSPEC-subject 25 MESH-subject 26 PA-subject 27 LC-subject-heading 28 RVM-subject-heading 29 Local-subject-index 30 Date 31 Date-of-publication 32 Date-of-acquisition 33 Title-key 34 Title-collective 35 Title-parallel 36 Title-cover 37 Title-added-title-page 38 Title-caption 39 Title-running 40 Title-spine 41 Title-other-variant 42 Title-former 43 Title-abbreviated 44 Title-expanded 45 Subject-precis 46 Subject-rswk 47 Subject-subdivision 48 Number-natl-biblio 49 Number-legal-deposit 50 Number-govt-pub 51 Number-music-publisher 52 Number-db 53 Number-local-call 54 Code-language 55 Code-geographic 56 Code-institution 57 Name-and-title 58 Name-geographic 59 Place-publication 60 CODEN 61 Microform-generation 62 Abstract 63 Note 1000 Author-title 1001 Record-type 1002 Name 1003 Author 1004 Author-name-personal 1005 Author-name-corporate 1006 Author-name-conference 1007 Identifier-standard 1008 Subject-LC-childrens 1009 Subject-name-personal 1010 Body-of-text 1011 Date/time-added-to-db 1012 Date/time-last-modified 1013 Authority/format-id 1014 Concept-text 1015 Concept-reference 1016 Any 1017 Server-choice 1018 Publisher 1019 Record-source 1020 Editor 1021 Bib-level 1022 Geographic-class 1023 Indexed-by 1024 Map-scale 1025 Music-key 1026 Related-periodical 1027 Report-number 1028 Stock-number 1030 Thematic-number 1031 Material-type 1032 Doc-id 1033 Host-item 1034 Content-type 1035 Anywhere 1036 Author-Title-Subject RELATION (2) 1 Less than 2 Less than or equal 3 Equal 4 Greater or equal 5 Greater than 6 Not equal 100 Phonetic 101 Stem 102 Relevance 103 AlwaysMatches POSITION (3) 1 First in field 2 First in subfield 3 Any position in field STRUCTURE (4) 1 Phrase 2 Word 3 Key 4 Year 5 Date (normalized) 6 Word list 100 Date (un-normalized) 101 Name (normalized) 102 Name (un-normalized) 103 Structure 104 Urx 105 Free-form-text 106 Document-text 107 Local-number 108 String 109 Numeric-string TRUNCATION (5) 1 Right truncation 2 Left truncation 3 Left and right truncation 100 Do not truncate 101 Process # in search term . regular #=.* 102 RegExpr-1 103 RegExpr-2 104 Process # ?n . regular: #=., ?n=.{0,n} or ?=.* Z39.58 Thw 105-106 truncation attributes below are only supported by Index Data's Zebra server. 105 Process * ! regular: *=.*, !=. and right truncate 106 Process * ! regular: *=.*, !=. COMPLETENSS (6) 1 Incomplete subfield 2 Complete subfield 3 Complete field SORTING (7) 1 ascending 2 descending Type 7 is an Index Data extension to RPN queries that allows embedding a sort critieria into a query. SEE ALSO Bib-1 Attribute Set Attibute Set Bib-1 Semantics. yaz-4.2.30/doc/yaz-client.10000644000175000017500000004670611741237740012255 00000000000000'\" t .\" Title: yaz-client .\" Author: Index Data .\" Generator: DocBook XSL Stylesheets v1.76.1 .\" Date: 04/11/2012 .\" Manual: Commands .\" Source: YAZ 4.2.30 .\" Language: English .\" .TH "YAZ\-CLIENT" "1" "04/11/2012" "YAZ 4.2.30" "Commands" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" yaz-client \- Z39\&.50/SRU client for implementors .SH "SYNOPSIS" .HP \w'\fByaz\-client\fR\ 'u \fByaz\-client\fR [\fB\-a\ \fR\fB\fIapdulog\fR\fR] [\fB\-b\ \fR\fB\fIberdump\fR\fR] [\fB\-c\ \fR\fB\fIcclfile\fR\fR] [\fB\-d\ \fR\fB\fIdump\fR\fR] [\fB\-f\ \fR\fB\fIcmdfile\fR\fR] [\fB\-k\ \fR\fB\fIsize\fR\fR] [\fB\-m\ \fR\fB\fImarclog\fR\fR] [\fB\-p\ \fR\fB\fIproxy\-addr\fR\fR] [\fB\-q\ \fR\fB\fIcqlfile\fR\fR] [\fB\-t\ \fR\fB\fIdispcharset\fR\fR] [\fB\-u\ \fR\fB\fIauth\fR\fR] [\fB\-v\ \fR\fB\fIloglevel\fR\fR] [\fB\-V\fR] [\fB\-x\fR] [server\-addr] .SH "DESCRIPTION" .PP \fByaz\-client\fR is a \m[blue]\fBZ39\&.50\fR\m[]\&\s-2\u[1]\d\s+2/\m[blue]\fBSRU\fR\m[]\&\s-2\u[2]\d\s+2 client (origin) with a simple command line interface that allows you to test behavior and performance of Z39\&.50 targets and SRU servers\&. .PP From YAZ version 4\&.1\&.0 \fByaz\-client\fR may also operate as a \m[blue]\fBSOLR\fR\m[]\&\s-2\u[3]\d\s+2 Web Service client\&. .PP If the \fIserver\-addr\fR is specified, the client creates a connection to the Z39\&.50/SRU target at the address given\&. .PP When \fByaz\-client\fR is started it tries to read commands from one of the following files: .sp .RS 4 .ie n \{\ \h'-04'\(bu\h'+03'\c .\} .el \{\ .sp -1 .IP \(bu 2.3 .\} Command file if it is given by option \-f\&. .RE .sp .RS 4 .ie n \{\ \h'-04'\(bu\h'+03'\c .\} .el \{\ .sp -1 .IP \(bu 2.3 .\} \&.yazclientrc in current working directory\&. .RE .sp .RS 4 .ie n \{\ \h'-04'\(bu\h'+03'\c .\} .el \{\ .sp -1 .IP \(bu 2.3 .\} \&.yazclientrc in the user\*(Aqs home directory\&. The value of the HOME is used to determine the home directory\&. Normally, HOME is only set on POSIX systems such as Linux, FreeBSD, Solaris\&. .RE .sp .SH "OPTIONS" .PP \-a \fIfilename\fR .RS 4 If specified, logging of protocol packages will be appended file given\&. If \fIfilename\fR is specified as \-, the output is written to stdout\&. .RE .PP \-b \fIfilename\fR .RS 4 If specified, YAZ will dump BER data in readable notation to the file specified\&. If \fIfilename\fR is specified as \- the output is written to stdout\&. .RE .PP \-c \fIfilename\fR .RS 4 If specified, CCL configuration will be read from the file given\&. .RE .PP \-d \fIdump\fR .RS 4 If specified, YAZ will dump BER data for all PDUs sent and received to individual files, named \fIdump\fR\&.DDD\&.raw, where DDD is 001, 002, 003, \&.\&. .RE .PP \-f \fIcmdfile\fR .RS 4 Reads commands from \fIcmdfile\fR\&. When this option is used, YAZ client does not read \&.yazclientrc from current directory or home directory\&. .RE .PP \-k \fIsize\fR .RS 4 Sets preferred messages and maximum record size for Initialize Request in kilobytes\&. Default value is 1024 (1 MB)\&. .RE .PP \-m \fIfilename\fR .RS 4 If specified, retrieved records will be appended to the file given\&. .RE .PP \-p \fIproxy\-addr\fR .RS 4 If specified, the client will use the proxy at the address given\&. YAZ client will connect to a proxy on the address and port given\&. The actual target will be specified as part of the InitRequest to inform the proxy about actual target\&. .RE .PP \-q \fIfilename\fR .RS 4 If specified, CQL configuration will be read from the file given\&. .RE .PP \-t \fIdisplaycharset\fR .RS 4 If displaycharset is given, it specifies name of the character set of the output (on the terminal on which YAZ client is running)\&. .RE .PP \-u \fIauth\fR .RS 4 If specified, the \fIauth\fR string will be used for authentication\&. .RE .PP \-v \fIlevel\fR .RS 4 Sets the LOG level to \fIlevel\fR\&. Level is a sequence of tokens separated by comma\&. Each token is a integer or a named LOG item \- one of fatal, debug, warn, log, malloc, all, none\&. .RE .PP \-V .RS 4 Prints YAZ version\&. .RE .PP \-x .RS 4 Makes the YAZ client print hex dumps of packages sent and received on standard output\&. .RE .SH "COMMANDS" .PP The YAZ client accepts the following commands\&. .PP open \fIzurl\fR .RS 4 Opens a connection to a server\&. The syntax for \fIzurl\fR is the same as described above for connecting from the command line\&. .sp Syntax: .sp [(tcp|ssl|unix|http)\*(Aq:\*(Aq]\fIhost\fR [:\fIport\fR][/\fIbase\fR] .RE .PP quit .RS 4 Quits YAZ client .RE .PP find \fIquery\fR .RS 4 Sends a Search Request using the \fIquery\fR given\&. By default the query is assumed to be PQF\&. See command querytype for more information\&. .RE .PP delete \fIsetname\fR .RS 4 Deletes result set with name \fIsetname\fR on the server\&. .RE .PP base \fIbase1\fR \fIbase2\fR \&.\&.\&. .RS 4 Sets the name(s) of the database(s) to search\&. One or more databases may be specified separated by blanks\&. This commands overrides the database given in \fIzurl\fR\&. .RE .PP show [\fIstart\fR[+\fInumber\fR]] .RS 4 Fetches records by sending a Present Request from the start position given by \fIstart\fR a number of records given by \fInumber\fR\&. If \fIstart\fR is not given, then the client will fetch from position of the last retrieved record plus 1\&. If \fInumber\fR is not given, then one record will be fetched at a time\&. .RE .PP scan \fIterm\fR .RS 4 Scans database index for a term\&. The syntax resembles the syntax for find\&. If you want to scan for the word water you could write .sp .if n \{\ .RS 4 .\} .nf scan water .fi .if n \{\ .RE .\} .sp but if you want to scan only in, say the title field, you would write .sp .if n \{\ .RS 4 .\} .nf scan @attr 1=4 water .fi .if n \{\ .RE .\} .RE .PP setscan \fIset\fR \fIterm\fR .RS 4 Scans database index for a term within a result set\&. This is similar to the scan command but has a result set as its first argument\&. .RE .PP scanpos \fIpos\fR .RS 4 Sets preferred position for scan\&. This value is used in next scan\&. By default position is 1\&. .RE .PP scansize \fIsize\fR .RS 4 Sets number of entries to be returned by scan\&. Default number of entries is 20\&. .RE .PP scanstep \fIstep\fR .RS 4 Set step\-size for scan\&. This value is used in next scan sent to the target\&. By default step\-size is 0\&. .RE .PP sort \fIsortspecs\fR .RS 4 Sorts a result set\&. The sort command takes a sequence of space\-separated sort specifications, with each sort specification consisting of two space\-separated words (so that the whole specification list is made up of an even number of words)\&. The first word of each specification holds a field (sort criterion) and the second holds flags\&. If the sort criterion includes = it is assumed that the SortKey is of type sortAttributes using Bib\-1: in this case the integer before = is the attribute type and the integer following = is the attribute value\&. If no = is in the criterion it is treated as a sortfield of type InternationalString\&. The flags word of each sort specification must consist of s for case sensitive or i for case insensitive, and < for ascending order or > for descending order\&. .RE .PP sort+ .RS 4 Same as sort but stores the sorted result set in a new result set\&. .RE .PP authentication \fIopenauth\fR .RS 4 Sets up a authentication string if a server requires authentication (v2 OpenStyle)\&. The authentication string is first sent to the server when the open command is issued and the Z39\&.50 Initialize Request is sent, so this command must be used before open in order to be effective\&. A common convention for the \fIauthopen\fR string is that the username \- and password is separated by a slash, e\&.g\&. myusername/mysecret\&. .RE .PP sru \fImethod\fR \fIversion\fR .RS 4 Selects Web Service method and version\&. Must be one of POST, GET, SOAP (default) or SOLR\&. Version should be either 1\&.1 or 1\&.2 for SRU\&. Other versions are allowed \- for testing purposes (version negotiation with SRU server)\&. The version is currently not used for SOLR Web Services .RE .PP list_all .RS 4 This command displays status and values for many settings\&. .RE .PP lslb \fIn\fR .RS 4 Sets the limit for when no records should be returned together with the search result\&. See the \m[blue]\fBZ39\&.50 standard on set bounds\fR\m[]\&\s-2\u[4]\d\s+2 for more details\&. .RE .PP ssub \fIn\fR .RS 4 Sets the limit for when all records should be returned with the search result\&. See the \m[blue]\fBZ39\&.50 standard on set bounds\fR\m[]\&\s-2\u[4]\d\s+2 for more details\&. .RE .PP mspn \fIn\fR .RS 4 Sets the number of records should be returned if the number of records in the result set is between the values of lslb and ssub\&. See the \m[blue]\fBZ39\&.50 standard on set bounds\fR\m[]\&\s-2\u[4]\d\s+2 for more details\&. .RE .PP status .RS 4 Displays the values of lslb, ssub and mspn\&. .RE .PP setname .RS 4 Switches named result sets on and off\&. Default is on\&. .RE .PP cancel .RS 4 Sends a Trigger Resource Control Request to the target\&. .RE .PP format \fIoid\fR .RS 4 Sets the preferred transfer syntax for retrieved records\&. yaz\-client supports all the record syntaxes that currently are registered\&. See \m[blue]\fBZ39\&.50 Record Syntax Identifiers\fR\m[]\&\s-2\u[5]\d\s+2 for more details\&. Commonly used records syntaxes include usmarc, sutrs and xml\&. .RE .PP elements \fIe\fR .RS 4 Sets the element set name for the records\&. Many targets support element sets are B (for brief) and F (for full)\&. .RE .PP close .RS 4 Sends a Z39\&.50 Close APDU and closes connection with the peer .RE .PP querytype \fItype\fR .RS 4 Sets the query type as used by command find\&. The following is supported: prefix for Prefix Query Notation (Type\-1 Query); ccl for CCL search (Type\-2 Query), cql for CQL (Type\-104 search with CQL OID), ccl2rpn for CCL to RPN conversion (Type\-1 Query)\&. cql2rpn for CQL to RPN conversion (Type\-1 Query)\&. .RE .PP attributeset \fIset\fR .RS 4 Sets attribute set OID for prefix queries (RPN, Type\-1)\&. .RE .PP refid \fIid\fR .RS 4 Sets reference ID for Z39\&.50 Request(s)\&. .RE .PP itemorder \fItype\fR \fIno\fR .RS 4 Sends an Item Order Request using the ILL External\&. \fItype\fR is either 1 or 2 which corresponds to ILL\-Profile 1 and 2 respectively\&. The \fIno\fR is the Result Set position of the record to be ordered\&. .RE .PP update \fIaction\fR \fIrecid\fR \fIdoc\fR .RS 4 Sends Item Update Request\&. The \fIaction\fR argument must be the action type: one of insert, replace, delete and update\&. The second argument, \fIrecid\fR, is the record identifier (any string)\&. Third argument which is optional is the record document for the request\&. If doc is preceded with "<", then the following characters are treated as a filename with the records to be updated\&. Otherwise doc is treated as a document itself\&. The doc may also be quited in double quotes\&. If doc is omitted, the last received record (as part of present response or piggybacked search response) is used for the update\&. .RE .PP source \fIfilename\fR .RS 4 Executes list of commands from file \fIfilename\fR, just like source on most UNIX shells\&. A single dot (\&.) can be used as an alternative\&. .RE .PP ! \fIargs\fR .RS 4 Executes command \fIargs\fR in subshell using the system call\&. .RE .PP push_command \fIcommand\fR .RS 4 The push_command takes another command as its argument\&. That command is then added to the history information (so you can retrieve it later)\&. The command itself is not executed\&. This command only works if you have GNU readline/history enabled\&. .RE .PP set_apdufile \fIfilename\fR .RS 4 Sets that APDU should be logged to file \fIfilename\fR\&. Another way to achieve APDU log is by using command\-line option \-a\&. .RE .PP set_auto_reconnect \fIflag\fR .RS 4 Specifies whether YAZ client automatically reconnect if target closes connection (Z39\&.50 only)\&. .sp \fIflag\fR must be either on or off\&. .RE .PP set_auto_wait \fIflag\fR .RS 4 Specifies whether YAZ client should wait for response protocol packages after a request\&. By default YAZ client waits (on) for response packages immediately after a command (find, show) has been issued\&. If off is used, YAZ client does not attempt to receive packages automatically\&. These will have to be manually received when command wait_response is used\&. .sp \fIflag\fR must be either on or off\&. .RE .PP set_marcdump \fIfilename\fR .RS 4 Specifies that all retrieved records should be appended to file \fIfilename\fR\&. This command does the thing as option \-m\&. .RE .PP schema \fIschemaid\fR .RS 4 Specifies schema for retrieval\&. Schema may be specified as an OID for Z39\&.50\&. For SRU, schema is a simple string URI\&. .RE .PP charset \fInegotiationcharset\fR [\fIdisplaycharset\fR] [[\fImarccharset\fR]] .RS 4 Specifies character set (encoding) for Z39\&.50 negotiation / SRU encoding and/or character set for output (terminal)\&. .sp \fInegotiationcharset\fR is the name of the character set to be negotiated by the server\&. The special name \- for \fInegotiationcharset\fR specifies \fIno\fR character set to be negotiated\&. .sp If \fIdisplaycharset\fR is given, it specifies name of the character set of the output (on the terminal on which YAZ client is running)\&. To disable conversion of characters to the output encoding, the special name \- (dash) can be used\&. If the special name auto is given, YAZ client will convert strings to the encoding of the terminal as returned by \fBnl_langinfo\fR call\&. .sp If \fImarcharset\fR is given, it specifies name of the character set of retrieved MARC records from server\&. See also marcharset command\&. .if n \{\ .sp .\} .RS 4 .it 1 an-trap .nr an-no-space-flag 1 .nr an-break-flag 1 .br .ps +1 \fBNote\fR .ps -1 .br Since character set negotation takes effect in the Z39\&.50 Initialize Request you should issue this command before command open is used\&. .sp .5v .RE .if n \{\ .sp .\} .RS 4 .it 1 an-trap .nr an-no-space-flag 1 .nr an-break-flag 1 .br .ps +1 \fBNote\fR .ps -1 .br MARC records are not covered by Z39\&.50 character set negotiation, so that\*(Aqs why there is a separate character that must be known in order to do meaningful conversion(s)\&. .sp .5v .RE .RE .PP negcharset \fIcharset\fR .RS 4 Specifies character set for negotiation (Z39\&.50)\&. The argument is the same as second argument for command charset\&. .RE .PP displaycharset \fIcharset\fR .RS 4 Specifies character set for output (display)\&. The argument is the same as second argument for command charset\&. .RE .PP marccharset \fIcharset\fR .RS 4 Specifies character set for retrieved MARC records so that YAZ client can display them in a character suitable for your display\&. See charset command\&. If auto is given, YAZ will assume that MARC21/USMARC is using MARC8/UTF8 and ISO\-8859\-1 for all other MARC variants\&. The charset argument is the same as third argument for command charset\&. .RE .PP querycharset \fIcharset\fR .RS 4 Specifies character set for query terms for Z39\&.50 RPN queries and Z39\&.50 Scan Requests (termListAndStartPoint)\&. This is a pure client\-side conversion which converts from displayCharset to queryCharset\&. .RE .PP set_cclfile \fIfilename\fR .RS 4 Specifies that CCL fields should be read from file file \fIfilename\fR\&. This command does the thing as option \-c\&. .RE .PP set_cqlfile \fIfilename\fR .RS 4 Specifies that CQL fields should be read from file file \fIfilename\fR\&. This command does the thing as option \-q\&. .RE .PP register_oid \fIname\fR \fIclass\fR \fIOID\fR .RS 4 This command allows you to register your own object identifier \- so that instead of entering a long dot\-notation you can use a short name instead\&. The \fIname\fR is your name for the OID, \fIclass\fR is the class, and \fIOID\fR is the raw OID in dot notation\&. Class is one appctx, absyn, attet, transyn, diagset, recsyn, resform, accform, extserv, userinfo, elemspec, varset, schema, tagset, general\&. If you\*(Aqre in doubt use the general class\&. .RE .PP register_tab \fIcommand\fR \fIstring\fR .RS 4 This command registers a TAB completion string for the command given\&. .RE .PP sleep \fIseconds\fR .RS 4 This command makes YAZ client sleep (be idle) for the number of seconds given\&. .RE .PP wait_response [ \fInumber\fR] .RS 4 This command makes YAZ client wait for a number of response packages from target\&. If \fInumber\fR is omitted, 1 is assumed\&. .sp This command is rarely used and is only useful if command set_auto_wait is set to off\&. .RE .PP xmles \fIOID\fR \fIdoc\fR .RS 4 Sends XML Extended Services request using the OID and doc given\&. .RE .PP zversion \fIver\fR .RS 4 This command sets Z39\&.50 version for negotiation\&. Should be used before open\&. By default 3 (version 3) is used\&. .RE .PP options \fIop1 op2\&.\&.\fR .RS 4 This command sets Z39\&.50 options for negotiation\&. Should be used before open\&. .sp The following options are supported: search, present, delSet, resourceReport, triggerResourceCtrl, resourceCtrl, accessCtrl, scan, sort, extendedServices, level_1Segmentation, level_2Segmentation, concurrentOperations, namedResultSets, encapsulation, resultCount, negotiationModel, duplicationDetection, queryType104, pQESCorrection, stringSchema\&. .RE .SH "EXAMPLE" .PP The simplest example of a Prefix Query would be something like .sp .if n \{\ .RS 4 .\} .nf f knuth .fi .if n \{\ .RE .\} .sp or .sp .if n \{\ .RS 4 .\} .nf f "donald knuth" .fi .if n \{\ .RE .\} .sp In those queries no attributes was specified\&. This leaves it up to the server what fields to search but most servers will search in all fields\&. Some servers does not support this feature though, and require that some attributes are defined\&. To add one attribute you could do: .sp .if n \{\ .RS 4 .\} .nf f @attr 1=4 computer .fi .if n \{\ .RE .\} .sp where we search in the title field, since the use(1) is title(4)\&. If we want to search in the author field \fIand\fR in the title field, and in the title field using right truncation it could look something like this: .sp .if n \{\ .RS 4 .\} .nf f @and @attr 1=1003 knuth @attr 1=4 @attr 5=1 computer .fi .if n \{\ .RE .\} .sp Finally using a mix of Bib\-1 and GILS attributes could look something like this: .sp .if n \{\ .RS 4 .\} .nf f @attrset Bib\-1 @and @attr GILS 1=2008 Washington @attr 1=21 weather .fi .if n \{\ .RE .\} .sp .SH "FILES" .PP yaz\-/client/client\&.c .PP $HOME/\&.yazclientrc .PP $HOME/\&.yazclient\&.history .SH "SEE ALSO" .PP \fByaz\fR(7) \fBbib1-attr\fR(7) .SH "NOTES" .IP " 1." 4 Z39.50 .RS 4 \%http://www.loc.gov/z3950/agency/ .RE .IP " 2." 4 SRU .RS 4 \%http://www.loc.gov/standards/sru/ .RE .IP " 3." 4 SOLR .RS 4 \%http://lucene.apache.org/solr/ .RE .IP " 4." 4 Z39.50 standard on set bounds .RS 4 \%http://www.loc.gov/z3950/agency/markup/04.html#3.2.2.1.6 .RE .IP " 5." 4 Z39.50 Record Syntax Identifiers .RS 4 \%http://www.loc.gov/z3950/agency/defns/oids.html#5 .RE yaz-4.2.30/doc/odr.use.html0000644000175000017500000005102111741237744012347 000000000000002. Using ODR

2. Using ODR

2.1. ODR Streams

Conceptually, the ODR stream is the source of encoded data in the decoding mode; when encoding, it is the receptacle for the encoded data. Before you can use an ODR stream it must be allocated. This is done with the function

     ODR odr_createmem(int direction);
    

The odr_createmem() function takes as argument one of three manifest constants: ODR_ENCODE, ODR_DECODE, or ODR_PRINT. An ODR stream can be in only one mode - it is not possible to change its mode once it's selected. Typically, your program will allocate at least two ODR streams - one for decoding, and one for encoding.

When you're done with the stream, you can use

     void odr_destroy(ODR o);
    

to release the resources allocated for the stream.

2.2. Memory Management

Two forms of memory management take place in the ODR system. The first one, which has to do with allocating little bits of memory (sometimes quite large bits of memory, actually) when a protocol package is decoded, and turned into a complex of interlinked structures. This section deals with this system, and how you can use it for your own purposes. The next section deals with the memory management which is required when encoding data - to make sure that a large enough buffer is available to hold the fully encoded PDU.

The ODR module has its own memory management system, which is used whenever memory is required. Specifically, it is used to allocate space for data when decoding incoming PDUs. You can use the memory system for your own purposes, by using the function

     void *odr_malloc(ODR o, size_t size);
    

You can't use the normal free(2) routine to free memory allocated by this function, and ODR doesn't provide a parallel function. Instead, you can call

     void odr_reset(ODR o);
    

when you are done with the memory: Everything allocated since the last call to odr_reset() is released. The odr_reset() call is also required to clear up an error condition on a stream.

The function

     size_t odr_total(ODR o);
    

returns the number of bytes allocated on the stream since the last call to odr_reset().

The memory subsystem of ODR is fairly efficient at allocating and releasing little bits of memory. Rather than managing the individual, small bits of space, the system maintains a free-list of larger chunks of memory, which are handed out in small bits. This scheme is generally known as a nibble memory system. It is very useful for maintaining short-lived constructions such as protocol PDUs.

If you want to retain a bit of memory beyond the next call to odr_reset(), you can use the function

     ODR_MEM odr_extract_mem(ODR o);
    

This function will give you control of the memory recently allocated on the ODR stream. The memory will live (past calls to odr_reset()), until you call the function

     void odr_release_mem(ODR_MEM p);
    

The opaque ODR_MEM handle has no other purpose than referencing the memory block for you until you want to release it.

You can use odr_extract_mem() repeatedly between allocating data, to retain individual control of separate chunks of data.

2.3. Encoding and Decoding Data

When encoding data, the ODR stream will write the encoded octet string in an internal buffer. To retrieve the data, use the function

     char *odr_getbuf(ODR o, int *len, int *size);
    

The integer pointed to by len is set to the length of the encoded data, and a pointer to that data is returned. *size is set to the size of the buffer (unless size is null, signaling that you are not interested in the size). The next call to a primitive function using the same ODR stream will overwrite the data, unless a different buffer has been supplied using the call

     void odr_setbuf(ODR o, char *buf, int len, int can_grow);
    

which sets the encoding (or decoding) buffer used by o to buf, using the length len. Before a call to an encoding function, you can use odr_setbuf() to provide the stream with an encoding buffer of sufficient size (length). The can_grow parameter tells the encoding ODR stream whether it is allowed to use realloc(2) to increase the size of the buffer when necessary. The default condition of a new encoding stream is equivalent to the results of calling

     odr_setbuf(stream, 0, 0, 1);
    

In this case, the stream will allocate and reallocate memory as necessary. The stream reallocates memory by repeatedly doubling the size of the buffer - the result is that the buffer will typically reach its maximum, working size with only a small number of reallocation operations. The memory is freed by the stream when the latter is destroyed, unless it was assigned by the user with the can_grow parameter set to zero (in this case, you are expected to retain control of the memory yourself).

To assume full control of an encoded buffer, you must first call odr_getbuf() to fetch the buffer and its length. Next, you should call odr_setbuf() to provide a different buffer (or a null pointer) to the stream. In the simplest case, you will reuse the same buffer over and over again, and you will just need to call odr_getbuf() after each encoding operation to get the length and address of the buffer. Note that the stream may reallocate the buffer during an encoding operation, so it is necessary to retrieve the correct address after each encoding operation.

It is important to realize that the ODR stream will not release this memory when you call odr_reset(): It will merely update its internal pointers to prepare for the encoding of a new data value. When the stream is released by the odr_destroy() function, the memory given to it by odr_setbuf will be released only if the can_grow parameter to odr_setbuf() was nonzero. The can_grow parameter, in other words, is a way of signaling who is to own the buffer, you or the ODR stream. If you never call odr_setbuf() on your encoding stream, which is typically the case, the buffer allocated by the stream will belong to the stream by default.

When you wish to decode data, you should first call odr_setbuf(), to tell the decoding stream where to find the encoded data, and how long the buffer is (the can_grow parameter is ignored by a decoding stream). After this, you can call the function corresponding to the data you wish to decode (eg, odr_integer() odr z_APDU()).

Example 8.1. Encoding and decoding functions

      int odr_integer(ODR o, Odr_int **p, int optional, const char *name);
      
      int z_APDU(ODR o, Z_APDU **p, int optional, const char *name);
     

If the data is absent (or doesn't match the tag corresponding to the type), the return value will be either 0 or 1 depending on the optional flag. If optional is 0 and the data is absent, an error flag will be raised in the stream, and you'll need to call odr_reset() before you can use the stream again. If optional is nonzero, the pointer pointed to/ by p will be set to the null value, and the function will return 1. The name argument is used to pretty-print the tag in question. It may be set to NULL if pretty-printing is not desired.

If the data value is found where it's expected, the pointer pointed to by the p argument will be set to point to the decoded type. The space for the type will be allocated and owned by the ODR stream, and it will live until you call odr_reset() on the stream. You cannot use free(2) to release the memory. You can decode several data elements (by repeated calls to odr_setbuf() and your decoding function), and new memory will be allocated each time. When you do call odr_reset(), everything decoded since the last call to odr_reset() will be released.

Example 8.2. Encoding and decoding of an integer

The use of the double indirection can be a little confusing at first (its purpose will become clear later on, hopefully), so an example is in order. We'll encode an integer value, and immediately decode it again using a different stream. A useless, but informative operation.

void do_nothing_useful(Odr_int value)
{
    ODR encode, decode;
    Odr_int *valp, *resvalp;
    char *bufferp;
    int len;
     
    /* allocate streams */
    if (!(encode = odr_createmem(ODR_ENCODE)))
        return;
    if (!(decode = odr_createmem(ODR_DECODE)))
        return;

    valp = &value;
    if (odr_integer(encode, &valp, 0, 0) == 0)
    {
        printf("encoding went bad\n");
        return;
    }
    bufferp = odr_getbuf(encode, &len, 0);
    printf("length of encoded data is %d\n", len);

    /* now let's decode the thing again */
    odr_setbuf(decode, bufferp, len, 0);
    if (odr_integer(decode, &resvalp, 0, 0) == 0)
    {
        printf("decoding went bad\n");
        return;
    }
    /* ODR_INT_PRINTF format for printf (such as %d) */
    printf("the value is " ODR_INT_PRINTF "\n", *resvalp);

    /* clean up */
    odr_destroy(encode);
    odr_destroy(decode);
}

     

This looks like a lot of work, offhand. In practice, the ODR streams will typically be allocated once, in the beginning of your program (or at the beginning of a new network session), and the encoding and decoding will only take place in a few, isolated places in your program, so the overhead is quite manageable.


2.4. Printing

When an ODR stream is created of type ODR_PRINT the ODR module will print the contents of a PDU in a readable format. By default output is written to the stderr stream. This behavior can be changed, however, by calling the function

      odr_setprint(ODR o, FILE *file);
     

before encoders or decoders are being invoked. It is also possible to direct the output to a buffer (of indeed another file), by using the more generic mechanism:

      void odr_set_stream(ODR o, void *handle,
                         void (*stream_write)(ODR o, void *handle, int type,
                                              const char *buf, int len),
                         void (*stream_close)(void *handle));
     

Here the user provides an opaque handle and two handlers, stream_write for writing, and stream_close which is supposed to close/free resources associated with handle. The stream_close handler is optional and if NULL for the function is provided, it will not be invoked. The stream_write takes the ODR handle as parameter, the user defined handle, a type ODR_OCTETSTRING, ODR_VISIBLESTRING which indicates the type of contents is being written.

Another utility useful for diagnostics (error handling) or as part of the printing facilities is:

      const char **odr_get_element_path(ODR o);
     

which returns a list of current elements that ODR deals with at the moment. For the returned array, say ar, ar[0] is the top level element, ar[n] is the last. The last element has the property that ar[n+1] == NULL.

Example 8.3. Element Path for record

For a database record part of a PresentResponse the array returned by odr_get_element is presentResponse, databaseOrSurDiagnostics, ?, record, ?, databaseRecord . The question mark appears due to unnamed constructions.


2.5. Diagnostics

The encoding/decoding functions all return 0 when an error occurs. Until you call odr_reset(), you cannot use the stream again, and any function called will immediately return 0.

To provide information to the programmer or administrator, the function

     void odr_perror(ODR o, char *message);
    

is provided, which prints the message argument to stderr along with an error message from the stream.

You can also use the function

     int odr_geterror(ODR o);
    

to get the current error number from the screen. The number will be one of these constants:

Table 8.1. ODR Error codes

codeDescription
OMEMORYMemory allocation failed.
OSYSERRA system- or library call has failed. The standard diagnostic variable errno should be examined to determine the actual error.
OSPACENo more space for encoding. This will only occur when the user has explicitly provided a buffer for an encoding stream without allowing the system to allocate more space.
OREQUIREDThis is a common protocol error; A required data element was missing during encoding or decoding.
OUNEXPECTEDAn unexpected data element was found during decoding.
OOTHEROther error. This is typically an indication of misuse of the ODR system by the programmer, and also that the diagnostic system isn't as good as it should be, yet.

The character string array

     char *odr_errlist[]
    

can be indexed by the error code to obtain a human-readable representation of the problem.

2.6. Summary and Synopsis

     #include <yaz/odr.h>

     ODR odr_createmem(int direction);

     void odr_destroy(ODR o);

     void odr_reset(ODR o);

     char *odr_getbuf(ODR o, int *len, int *size);

     void odr_setbuf(ODR o, char *buf, int len, int can_grow);

     void *odr_malloc(ODR o, int size);

     NMEM odr_extract_mem(ODR o);

     int odr_geterror(ODR o);

     void odr_perror(ODR o, const char *message);

     extern char *odr_errlist[];
    
yaz-4.2.30/doc/comstack.server.html0000644000175000017500000000743311741237744014111 000000000000005. Server Side

5. Server Side

To establish a server under the inetd server, you can use

    COMSTACK cs_createbysocket(int socket, CS_TYPE type, int blocking,
                               int protocol);
   

The socket parameter is an established socket (when your application is invoked from inetd, the socket will typically be 0. The following parameters are identical to the ones for cs_create.

    int cs_bind(COMSTACK handle, void *address, int mode)
   

Binds a local address to the endpoint. Read about addresses below. The mode parameter should be either CS_CLIENT or CS_SERVER.

    int cs_listen(COMSTACK handle, char *addr, int *addrlen);
   

Call this to process incoming events on an endpoint that has been bound in listening mode. It will return 0 to indicate that the connect request has been received, 1 to signal a partial reception, and -1 to indicate an error condition.

    COMSTACK cs_accept(COMSTACK handle);
   

This finalizes the server-side association establishment, after cs_listen has completed successfully. It returns a new connection endpoint, which represents the new association. The application will typically wish to fork off a process to handle the association at this point, and continue listen for new connections on the old handle.

You can use the call

    const char *cs_addrstr(COMSTACK);
   

on an established connection to retrieve the host-name of the remote host.

Note

You may need to use this function with some care if your name server service is slow or unreliable

yaz-4.2.30/doc/asn.xml0000644000175000017500000010212411733047144011400 00000000000000 The Z39.50 ASN.1 Module Introduction The &asn; module provides you with a set of C struct definitions for the various PDUs of the Z39.50 protocol, as well as for the complex types appearing within the PDUs. For the primitive data types, the C representation often takes the form of an ordinary C language type, such as Odr_int which is equivalent to an integral C integer. For ASN.1 constructs that have no direct representation in C, such as general octet strings and bit strings, the &odr; module (see section The ODR Module) provides auxiliary definitions. The &asn; module is located in sub directory z39.50. There you'll find C files that implements encoders and decoders for the Z39.50 types. You'll also find the protocol definitions: z3950v3.asn, esupdate.asn, and others. Preparing PDUs A structure representing a complex ASN.1 type doesn't in itself contain the members of that type. Instead, the structure contains pointers to the members of the type. This is necessary, in part, to allow a mechanism for specifying which of the optional structure (SEQUENCE) members are present, and which are not. It follows that you will need to somehow provide space for the individual members of the structure, and set the pointers to refer to the members. The conversion routines don't care how you allocate and maintain your C structures - they just follow the pointers that you provide. Depending on the complexity of your application, and your personal taste, there are at least three different approaches that you may take when you allocate the structures. You can use static or automatic local variables in the function that prepares the PDU. This is a simple approach, and it provides the most efficient form of memory management. While it works well for flat PDUs like the InitReqest, it will generally not be sufficient for say, the generation of an arbitrarily complex RPN query structure. You can individually create the structure and its members using the malloc(2) function. If you want to ensure that the data is freed when it is no longer needed, you will have to define a function that individually releases each member of a structure before freeing the structure itself. You can use the odr_malloc() function (see for details). When you use odr_malloc(), you can release all of the allocated data in a single operation, independent of any pointers and relations between the data. odr_malloc() is based on a "nibble-memory" scheme, in which large portions of memory are allocated, and then gradually handed out with each call to odr_malloc(). The next time you call odr_reset(), all of the memory allocated since the last call is recycled for future use (actually, it is placed on a free-list). You can combine all of the methods described here. This will often be the most practical approach. For instance, you might use odr_malloc() to allocate an entire structure and some of its elements, while you leave other elements pointing to global or per-session default variables. The &asn; module provides an important aid in creating new PDUs. For each of the PDU types (say, Z_InitRequest), a function is provided that allocates and initializes an instance of that PDU type for you. In the case of the InitRequest, the function is simply named zget_InitRequest(), and it sets up reasonable default value for all of the mandatory members. The optional members are generally initialized to null pointers. This last aspect is very important: it ensures that if the PDU definitions are extended after you finish your implementation (to accommodate new versions of the protocol, say), you won't get into trouble with uninitialized pointers in your structures. The functions use odr_malloc() to allocate the PDUs and its members, so you can free everything again with a single call to odr_reset(). We strongly recommend that you use the zget_* functions whenever you are preparing a PDU (in a C++ API, the zget_ functions would probably be promoted to constructors for the individual types). The prototype for the individual PDU types generally look like this: Z_<type> *zget_<type>(ODR o); eg.: Z_InitRequest *zget_InitRequest(ODR o); The &odr; handle should generally be your encoding stream, but it needn't be. As well as the individual PDU functions, a function zget_APDU() is provided, which allocates a top-level Z-APDU of the type requested: Z_APDU *zget_APDU(ODR o, int which); The which parameter is (of course) the discriminator belonging to the Z_APDU CHOICE type. All of the interface described here is provided by the &asn; module, and you access it through the proto.h header file. EXTERNAL Data In order to achieve extensibility and adaptability to different application domains, the new version of the protocol defines many structures outside of the main ASN.1 specification, referencing them through ASN.1 EXTERNAL constructs. To simplify the construction and access to the externally referenced data, the &asn; module defines a specialized version of the EXTERNAL construct, called Z_External.It is defined thus: typedef struct Z_External { Odr_oid *direct_reference; int *indirect_reference; char *descriptor; enum { /* Generic types */ Z_External_single = 0, Z_External_octet, Z_External_arbitrary, /* Specific types */ Z_External_SUTRS, Z_External_explainRecord, Z_External_resourceReport1, Z_External_resourceReport2 ... } which; union { /* Generic types */ Odr_any *single_ASN1_type; Odr_oct *octet_aligned; Odr_bitmask *arbitrary; /* Specific types */ Z_SUTRS *sutrs; Z_ExplainRecord *explainRecord; Z_ResourceReport1 *resourceReport1; Z_ResourceReport2 *resourceReport2; ... } u; } Z_External; When decoding, the &asn; module will attempt to determine which syntax describes the data by looking at the reference fields (currently only the direct-reference). For ASN.1 structured data, you need only consult the which field to determine the type of data. You can the access the data directly through the union. When constructing data for encoding, you set the union pointer to point to the data, and set the which field accordingly. Remember also to set the direct (or indirect) reference to the correct OID for the data type. For non-ASN.1 data such as MARC records, use the octet_aligned arm of the union. Some servers return ASN.1 structured data values (eg. database records) as BER-encoded records placed in the octet-aligned branch of the EXTERNAL CHOICE. The ASN-module will not automatically decode these records. To help you decode the records in the application, the function Z_ext_typeent *z_ext_gettypebyref(const oid *oid); Can be used to retrieve information about the known, external data types. The function return a pointer to a static area, or NULL, if no match for the given direct reference is found. The Z_ext_typeent is defined as: typedef struct Z_ext_typeent { int oid[OID_SIZE]; /* the direct-reference OID. */ int what; /* discriminator value for the external CHOICE */ Odr_fun fun; /* decoder function */ } Z_ext_typeent; The what member contains the Z_External union discriminator value for the given type: For the SUTRS record syntax, the value would be Z_External_sutrs. The fun member contains a pointer to the function which encodes/decodes the given type. Again, for the SUTRS record syntax, the value of fun would be z_SUTRS (a function pointer). If you receive an EXTERNAL which contains an octet-string value that you suspect of being an ASN.1-structured data value, you can use z_ext_gettypebyref to look for the provided direct-reference. If the return value is different from NULL, you can use the provided function to decode the BER string (see ). If you want to send EXTERNALs containing ASN.1-structured values in the occtet-aligned branch of the CHOICE, this is possible too. However, on the encoding phase, it requires a somewhat involved juggling around of the various buffers involved. If you need to add new, externally defined data types, you must update the struct above, in the source file prt-ext.h, as well as the encoder/decoder in the file prt-ext.c. When changing the latter, remember to update both the arm arrary and the list type_table, which drives the CHOICE biasing that is necessary to tell the different, structured types apart on decoding. Eventually, the EXTERNAL processing will most likely automatically insert the correct OIDs or indirect-refs. First, however, we need to determine how application-context management (specifically the presentation-context-list) should fit into the various modules. PDU Contents Table We include, for reference, a listing of the fields of each top-level PDU, as well as their default settings. Default settings for PDU Initialize Request Field Type Default Value referenceIdZ_ReferenceIdNULL protocolVersionOdr_bitmaskEmpty bitmask optionsOdr_bitmaskEmpty bitmask preferredMessageSizeOdr_int30*1024 maximumRecordSizeOdr_int30*1024 idAuthenticationZ_IdAuthenticationNULL implementationIdchar*"81" implementationNamechar*"YAZ" implementationVersionchar*YAZ_VERSION userInformationFieldZ_UserInformationNULL otherInfoZ_OtherInformationNULL
Default settings for PDU Initialize Response Field Type Default Value referenceIdZ_ReferenceIdNULL protocolVersionOdr_bitmaskEmpty bitmask optionsOdr_bitmaskEmpty bitmask preferredMessageSizeOdr_int30*1024 maximumRecordSizeOdr_int30*1024 resultOdr_boolTRUE implementationIdchar*"id)" implementationNamechar*"YAZ" implementationVersionchar*YAZ_VERSION userInformationFieldZ_UserInformationNULL otherInfoZ_OtherInformationNULL
Default settings for PDU Search Request Field Type Default Value referenceIdZ_ReferenceIdNULL smallSetUpperBoundOdr_int0 largeSetLowerBoundOdr_int1 mediumSetPresentNumberOdr_int0 replaceIndicatorOdr_boolTRUE resultSetNamechar *"default" num_databaseNamesOdr_int0 databaseNameschar **NULL smallSetElementSetNamesZ_ElementSetNames NULL mediumSetElementSetNamesZ_ElementSetNames NULL preferredRecordSyntaxOdr_oidNULL queryZ_QueryNULL additionalSearchInfoZ_OtherInformation NULL otherInfoZ_OtherInformationNULL
Default settings for PDU Search Response Field Type Default Value referenceIdZ_ReferenceIdNULL resultCountOdr_int0 numberOfRecordsReturnedOdr_int0 nextResultSetPositionOdr_int0 searchStatusOdr_boolTRUE resultSetStatusOdr_intNULL presentStatusOdr_intNULL recordsZ_RecordsNULL additionalSearchInfo Z_OtherInformationNULL otherInfoZ_OtherInformationNULL
Default settings for PDU Present Request Field Type Default Value referenceIdZ_ReferenceIdNULL resultSetIdchar*"default" resultSetStartPointOdr_int1 numberOfRecordsRequestedOdr_int10 num_rangesOdr_int0 additionalRangesZ_RangeNULL recordCompositionZ_RecordCompositionNULL preferredRecordSyntaxOdr_oidNULL maxSegmentCountOdr_intNULL maxRecordSizeOdr_intNULL maxSegmentSizeOdr_intNULL otherInfoZ_OtherInformationNULL
Default settings for PDU Present Response Field Type Default Value referenceIdZ_ReferenceIdNULL numberOfRecordsReturnedOdr_int0 nextResultSetPositionOdr_int0 presentStatusOdr_intZ_PresentStatus_success recordsZ_RecordsNULL otherInfoZ_OtherInformationNULL
Default settings for Delete Result Set Request Field Type Default Value referenceId Z_ReferenceIdNULL deleteFunctionOdr_intZ_DeleteResultSetRequest_list num_idsOdr_int0 resultSetListchar**NULL otherInfoZ_OtherInformationNULL
Default settings for Delete Result Set Response Field Type Default Value referenceIdZ_ReferenceIdNULL deleteOperationStatusOdr_int Z_DeleteStatus_success num_statusesOdr_int0 deleteListStatusesZ_ListStatus**NULL numberNotDeletedOdr_intNULL num_bulkStatusesOdr_int0 bulkStatusesZ_ListStatusNUL L deleteMessagechar*NULL otherInfoZ_OtherInformationNULL
Default settings for Scan Request Field Type Default Value referenceIdZ_ReferenceIdNULL num_databaseNamesOdr_int0 databaseNameschar**NULL attributeSetOdr_oidNULL termListAndStartPointZ_AttributesPlus... NULL stepSizeOdr_intNULL numberOfTermsRequestedOdr_int20 preferredPositionInResponseOdr_intNULL otherInfoZ_OtherInformationNULL
Default settings for Scan Response Field Type Default Value referenceIdZ_ReferenceIdNULL stepSizeOdr_intNULL scanStatusOdr_intZ_Scan_success numberOfEntriesReturnedOdr_int0 positionOfTermOdr_intNULL entriesZ_ListEntrisNULL attributeSetOdr_oidNULL otherInfoZ_OtherInformationNULL
Default settings for Trigger Resource Control Request Field Type Default Value referenceIdZ_ReferenceIdNULL requestedActionOdr_int Z_TriggerResourceCtrl_resou.. prefResourceReportFormatOdr_oidNULL resultSetWantedOdr_boolNULL otherInfoZ_OtherInformationNULL
Default settings for Resource Control Request Field Type Default Value referenceIdZ_ReferenceIdNULL suspendedFlagOdr_boolNULL resourceReportZ_ExternalNULL partialResultsAvailableOdr_intNULL responseRequiredOdr_boolFALSE triggeredRequestFlagOdr_boolNULL otherInfoZ_OtherInformationNULL
Default settings for Resource Control Response Field Type Default Value referenceIdZ_ReferenceIdNULL continueFlagbool_tTRUE resultSetWantedbool_tNULL otherInfoZ_OtherInformationNULL
Default settings for Access Control Request Field Type Default Value referenceIdZ_ReferenceIdNULL whichenumZ_AccessRequest_simpleForm; uunionNULL otherInfoZ_OtherInformationNULL
Default settings for Access Control Response Field Type Default Value referenceIdZ_ReferenceIdNULL whichenumZ_AccessResponse_simpleForm uunionNULL diagnosticZ_DiagRecNULL otherInfoZ_OtherInformationNULL
Default settings for Segment Field Type Default Value referenceIdZ_ReferenceIdNULL numberOfRecordsReturnedOdr_intvalue=0 num_segmentRecordsOdr_int0 segmentRecordsZ_NamePlusRecordNULL otherInfoZ_OtherInformationNULL
Default settings for Close Field Type Default Value referenceIdZ_ReferenceIdNULL closeReasonOdr_intZ_Close_finished diagnosticInformationchar*NULL resourceReportFormatOdr_oidNULL resourceFormatZ_ExternalNULL otherInfoZ_OtherInformationNULL
yaz-4.2.30/doc/zoom.resultsets.html0000644000175000017500000003052611741237744014177 000000000000003. Result sets

3. Result sets

The result set object is a container for records returned from a target.

     ZOOM_resultset ZOOM_connection_search(ZOOM_connection, ZOOM_query q);

     ZOOM_resultset ZOOM_connection_search_pqf(ZOOM_connection c,
                                               const char *q);
     void ZOOM_resultset_destroy(ZOOM_resultset r);
   

Function ZOOM_connection_search creates a result set given a connection and query. Destroy a result set by calling ZOOM_resultset_destroy. Simple clients may using PQF only may use function ZOOM_connection_search_pqf in which case creating query objects is not necessary.

     void ZOOM_resultset_option_set(ZOOM_resultset r,
                                    const char *key, const char *val);

     const char *ZOOM_resultset_option_get(ZOOM_resultset r, const char *key);

     size_t ZOOM_resultset_size(ZOOM_resultset r);
   

Functions ZOOM_resultset_options_set and ZOOM_resultset_get sets and gets an option for a result set similar to ZOOM_connection_option_get and ZOOM_connection_option_set.

The number of hits also called result-count is returned by function ZOOM_resultset_size.

Table 3.2. ZOOM Result set Options

OptionDescriptionDefault
startOffset of first record to be retrieved from target. First record has offset 0 unlike the protocol specifications where first record has position 1. This option affects ZOOM_resultset_search and ZOOM_resultset_search_pqf and must be set before any of these functions are invoked. If a range of records must be fetched manually after search, function ZOOM_resultset_records should be used. 0
countNumber of records to be retrieved. This option affects ZOOM_resultset_search and ZOOM_resultset_search_pqf and must be set before any of these functions are invoked. 0
presentChunkThe number of records to be requested from the server in each chunk (present request). The value 0 means to request all the records in a single chunk. (The old step option is also supported for the benefit of old applications.) 0
elementSetNameElement-Set name of records. Most targets should honor element set name B and F for brief and full respectively. none
preferredRecordSyntaxPreferred Syntax, such as USMARC, SUTRS, etc. none
schemaSchema for retrieval, such as Gils-schema, Geo-schema, etc. none
setnameName of Result Set (Result Set ID). If this option isn't set, the ZOOM module will automatically allocate a result set name. default
rpnCharsetCharacter set for RPN terms. If this is set, ZOOM C will assume that the ZOOM application is running UTF-8. Terms in RPN queries are then converted to the rpnCharset. If this is unset, ZOOM C will not assume any encoding of RPN terms and no conversion is performed. none

For servers that support Search Info report, the following options may be read using ZOOM_resultset_get. This detailed information is read after a successful search has completed.

This information is a list of of items, where each item is information about a term or subquery. All items in the list are prefixed by SearchResult.no where no presents the item number (0=first, 1=second). Read searchresult.size to determine the number of items.

Table 3.3. Search Info Report Options

OptionDescription
searchresult.size number of search result entries. This option is-nonexistant if no entries are returned by the server.
searchresult.no.idsub query ID
searchresult.no.countresult count for item (number of hits)
searchresult.no.subquery.termsubquery term
searchresult.no.interpretation.term interpretation term
searchresult.no.recommendation.term recommendation term

3.1. Z39.50 Protocol behavior

The creation of a result set involves at least a SearchRequest - SearchResponse protocol handshake. Following that, if a sort criteria was specified as part of the query, a SortRequest - SortResponse handshake takes place. Note that it is necessary to perform sorting before any retrieval takes place, so no records will be returned from the target as part of the SearchResponse because these would be unsorted. Hence, piggyback is disabled when sort criteria are set. Following Search - and a possible sort - Retrieval takes place - as one or more Present Requests/Response pairs being transferred.

The API allows for two different modes for retrieval. A high level mode which is somewhat more powerful and a low level one. The low level is enabled when searching on a Connection object for which the settings smallSetUpperBound, mediumSetPresentNumber and largeSetLowerBound are set. The low level mode thus allows you to precisely set how records are returned as part of a search response as offered by the Z39.50 protocol. Since the client may be retrieving records as part of the search response, this mode doesn't work well if sorting is used.

The high-level mode allows you to fetch a range of records from the result set with a given start offset. When you use this mode the client will automatically use piggyback if that is possible with the target and perform one or more present requests as needed. Even if the target returns fewer records as part of a present response because of a record size limit, etc. the client will repeat sending present requests. As an example, if option start is 0 (default) and count is 4, and piggyback is 1 (default) and no sorting criteria is specified, then the client will attempt to retrieve the 4 records as part the search response (using piggyback). On the other hand, if either start is positive or if a sorting criteria is set, or if piggyback is 0, then the client will not perform piggyback but send Present Requests instead.

If either of the options mediumSetElementSetName and smallSetElementSetName are unset, the value of option elementSetName is used for piggyback searches. This means that for the high-level mode you only have to specify one elementSetName option rather than three.

3.2. SRU Protocol behavior

Current version of YAZ does not take advantage of a result set id returned by the SRU server. Future versions might do, however. Since, the ZOOM driver does not save result set IDs any present (retrieval) is transformed to a SRU SearchRetrieveRequest with same query but, possibly, different offsets.

Option schema specifies SRU schema for retrieval. However, options elementSetName and preferredRecordSyntax are ignored.

Options start and count are supported by SRU. The remaining options piggyback, smallSetUpperBound, largeSetLowerBound, mediumSetPresentNumber, mediumSetElementSetName, smallSetElementSetName are unsupported.

SRU supports CQL queries, not PQF. If PQF is used, however, the PQF query is transferred anyway using non-standard element pQuery in SRU SearchRetrieveRequest.

SOLR queries has to be done in SOLR query format.

Unfortunately, SRU or SOLR does not define a database setting. Hence, databaseName is unsupported and ignored. However, the path part in host parameter for functions ZOOM_connecton_new and ZOOM_connection_connect acts as a database (at least for the YAZ SRU server).

yaz-4.2.30/doc/soap.xml.html0000644000175000017500000001305311741237744012534 000000000000003. SOAP Packages

3. SOAP Packages

Every SOAP package in YAZ is represented as follows:

#include <yaz/soap.h>

typedef struct {
    char *fault_code;
    char *fault_string;
    char *details;
} Z_SOAP_Fault;

typedef struct {
    int no;
    char *ns;
    void *p;
} Z_SOAP_Generic;

#define Z_SOAP_fault 1
#define Z_SOAP_generic 2
#define Z_SOAP_error 3
typedef struct {
    int which;
    union {
        Z_SOAP_Fault   *fault;
        Z_SOAP_Generic *generic;
        Z_SOAP_Fault   *soap_error;
    } u;
    const char *ns;
} Z_SOAP;
      

The fault and soap_error arms represent both a SOAP fault - struct Z_SOAP_Fault. Any other generic (valid) package is represented by Z_SOAP_Generic.

The ns as part of Z_SOAP is the namespace for SOAP itself and reflects the SOAP version. For version 1.1 it is http://schemas.xmlsoap.org/soap/envelope/, for version 1.2 it is http://www.w3.org/2001/06/soap-envelope.

int z_soap_codec(ODR o, Z_SOAP **pp,
                 char **content_buf, int *content_len,
                 Z_SOAP_Handler *handlers);
    

The content_buf and content_len is XML buffer and length of buffer respectively.

The handlers is a list of SOAP codec handlers - one handler for each service namespace. For SRU SOAP, the namespace would be http://www.loc.gov/zing/srw/v1.0/.

When decoding, the z_soap_codec inspects the XML content and tries to match one of the services namespaces of the supplied handlers. If there is a match a handler function is invoked which decodes that particular SOAP package. If successful, the returned Z_SOAP package will be of type Z_SOAP_Generic. Member no is set the offset of handler that matched; ns is set to namespace of matching handler; the void pointer p is set to the C data structure assocatiated with the handler.

When a NULL namespace is met (member ns bwlow), that specifies end-of-list.

Each handler is defined as follows:

typedef struct {
    char *ns;
    void *client_data;
    Z_SOAP_fun f;
} Z_SOAP_Handler;
      

The ns is namespace of service associated with handler f. client_data is user-defined data which is passed to handler.

The prototype for a SOAP service handler is:

int handler(ODR o, void * ptr, void **handler_data,
            void *client_data, const char *ns);
      

The o specifies the mode (decode/encode) as usual. The second argument, ptr, is a libxml2 tree node pointer (xmlNodePtr) and is a pointer to the Body element of the SOAP package. The handler_data is an opaque pointer to a C definitions associated with the SOAP service. client_data is the pointer which was set as part of the Z_SOAP_handler. Finally, ns the service namespace.

yaz-4.2.30/doc/odr.debugging.html0000644000175000017500000000443111741237744013511 000000000000004. Debugging

4. Debugging

The protocol modules are suffering somewhat from a lack of diagnostic tools at the moment. Specifically ways to pretty-print PDUs that aren't recognized by the system. We'll include something to this end in a not-too-distant release. In the meantime, what we do when we get packages we don't understand is to compile the ODR module with ODR_DEBUG defined. This causes the module to dump tracing information as it processes data units. With this output and the protocol specification (Z39.50), it is generally fairly easy to see what goes wrong.

yaz-4.2.30/doc/odr.xml0000644000175000017500000012640411733047144011412 00000000000000 The ODR Module Introduction &odr; is the BER-encoding/decoding subsystem of &yaz;. Care as been taken to isolate &odr; from the rest of the package - specifically from the transport interface. &odr; may be used in any context where basic ASN.1/BER representations are used. If you are only interested in writing a Z39.50 implementation based on the PDUs that are already provided with &yaz;, you only need to concern yourself with the section on managing ODR streams (). Only if you need to implement ASN.1 beyond that which has been provided, should you worry about the second half of the documentation (). If you use one of the higher-level interfaces, you can skip this section entirely. This is important, so we'll repeat it for emphasis: You do not need to read to implement Z39.50 with &yaz;. If you need a part of the protocol that isn't already in &yaz;, you should contact the authors before going to work on it yourself: We might already be working on it. Conversely, if you implement a useful part of the protocol before us, we'd be happy to include it in a future release. Using ODR ODR Streams Conceptually, the ODR stream is the source of encoded data in the decoding mode; when encoding, it is the receptacle for the encoded data. Before you can use an ODR stream it must be allocated. This is done with the function ODR odr_createmem(int direction); The odr_createmem() function takes as argument one of three manifest constants: ODR_ENCODE, ODR_DECODE, or ODR_PRINT. An &odr; stream can be in only one mode - it is not possible to change its mode once it's selected. Typically, your program will allocate at least two ODR streams - one for decoding, and one for encoding. When you're done with the stream, you can use void odr_destroy(ODR o); to release the resources allocated for the stream. Memory Management Two forms of memory management take place in the &odr; system. The first one, which has to do with allocating little bits of memory (sometimes quite large bits of memory, actually) when a protocol package is decoded, and turned into a complex of interlinked structures. This section deals with this system, and how you can use it for your own purposes. The next section deals with the memory management which is required when encoding data - to make sure that a large enough buffer is available to hold the fully encoded PDU. The &odr; module has its own memory management system, which is used whenever memory is required. Specifically, it is used to allocate space for data when decoding incoming PDUs. You can use the memory system for your own purposes, by using the function void *odr_malloc(ODR o, size_t size); You can't use the normal free(2) routine to free memory allocated by this function, and &odr; doesn't provide a parallel function. Instead, you can call void odr_reset(ODR o); when you are done with the memory: Everything allocated since the last call to odr_reset() is released. The odr_reset() call is also required to clear up an error condition on a stream. The function size_t odr_total(ODR o); returns the number of bytes allocated on the stream since the last call to odr_reset(). The memory subsystem of &odr; is fairly efficient at allocating and releasing little bits of memory. Rather than managing the individual, small bits of space, the system maintains a free-list of larger chunks of memory, which are handed out in small bits. This scheme is generally known as a nibble memory system. It is very useful for maintaining short-lived constructions such as protocol PDUs. If you want to retain a bit of memory beyond the next call to odr_reset(), you can use the function ODR_MEM odr_extract_mem(ODR o); This function will give you control of the memory recently allocated on the ODR stream. The memory will live (past calls to odr_reset()), until you call the function void odr_release_mem(ODR_MEM p); The opaque ODR_MEM handle has no other purpose than referencing the memory block for you until you want to release it. You can use odr_extract_mem() repeatedly between allocating data, to retain individual control of separate chunks of data. Encoding and Decoding Data When encoding data, the ODR stream will write the encoded octet string in an internal buffer. To retrieve the data, use the function char *odr_getbuf(ODR o, int *len, int *size); The integer pointed to by len is set to the length of the encoded data, and a pointer to that data is returned. *size is set to the size of the buffer (unless size is null, signaling that you are not interested in the size). The next call to a primitive function using the same &odr; stream will overwrite the data, unless a different buffer has been supplied using the call void odr_setbuf(ODR o, char *buf, int len, int can_grow); which sets the encoding (or decoding) buffer used by o to buf, using the length len. Before a call to an encoding function, you can use odr_setbuf() to provide the stream with an encoding buffer of sufficient size (length). The can_grow parameter tells the encoding &odr; stream whether it is allowed to use realloc(2) to increase the size of the buffer when necessary. The default condition of a new encoding stream is equivalent to the results of calling odr_setbuf(stream, 0, 0, 1); In this case, the stream will allocate and reallocate memory as necessary. The stream reallocates memory by repeatedly doubling the size of the buffer - the result is that the buffer will typically reach its maximum, working size with only a small number of reallocation operations. The memory is freed by the stream when the latter is destroyed, unless it was assigned by the user with the can_grow parameter set to zero (in this case, you are expected to retain control of the memory yourself). To assume full control of an encoded buffer, you must first call odr_getbuf() to fetch the buffer and its length. Next, you should call odr_setbuf() to provide a different buffer (or a null pointer) to the stream. In the simplest case, you will reuse the same buffer over and over again, and you will just need to call odr_getbuf() after each encoding operation to get the length and address of the buffer. Note that the stream may reallocate the buffer during an encoding operation, so it is necessary to retrieve the correct address after each encoding operation. It is important to realize that the ODR stream will not release this memory when you call odr_reset(): It will merely update its internal pointers to prepare for the encoding of a new data value. When the stream is released by the odr_destroy() function, the memory given to it by odr_setbuf will be released only if the can_grow parameter to odr_setbuf() was nonzero. The can_grow parameter, in other words, is a way of signaling who is to own the buffer, you or the ODR stream. If you never call odr_setbuf() on your encoding stream, which is typically the case, the buffer allocated by the stream will belong to the stream by default. When you wish to decode data, you should first call odr_setbuf(), to tell the decoding stream where to find the encoded data, and how long the buffer is (the can_grow parameter is ignored by a decoding stream). After this, you can call the function corresponding to the data you wish to decode (eg, odr_integer() odr z_APDU()). Encoding and decoding functions int odr_integer(ODR o, Odr_int **p, int optional, const char *name); int z_APDU(ODR o, Z_APDU **p, int optional, const char *name); If the data is absent (or doesn't match the tag corresponding to the type), the return value will be either 0 or 1 depending on the optional flag. If optional is 0 and the data is absent, an error flag will be raised in the stream, and you'll need to call odr_reset() before you can use the stream again. If optional is nonzero, the pointer pointed to/ by p will be set to the null value, and the function will return 1. The name argument is used to pretty-print the tag in question. It may be set to NULL if pretty-printing is not desired. If the data value is found where it's expected, the pointer pointed to by the p argument will be set to point to the decoded type. The space for the type will be allocated and owned by the &odr; stream, and it will live until you call odr_reset() on the stream. You cannot use free(2) to release the memory. You can decode several data elements (by repeated calls to odr_setbuf() and your decoding function), and new memory will be allocated each time. When you do call odr_reset(), everything decoded since the last call to odr_reset() will be released. Encoding and decoding of an integer The use of the double indirection can be a little confusing at first (its purpose will become clear later on, hopefully), so an example is in order. We'll encode an integer value, and immediately decode it again using a different stream. A useless, but informative operation. This looks like a lot of work, offhand. In practice, the &odr; streams will typically be allocated once, in the beginning of your program (or at the beginning of a new network session), and the encoding and decoding will only take place in a few, isolated places in your program, so the overhead is quite manageable. Printing When an ODR stream is created of type ODR_PRINT the ODR module will print the contents of a PDU in a readable format. By default output is written to the stderr stream. This behavior can be changed, however, by calling the function odr_setprint(ODR o, FILE *file); before encoders or decoders are being invoked. It is also possible to direct the output to a buffer (of indeed another file), by using the more generic mechanism: void odr_set_stream(ODR o, void *handle, void (*stream_write)(ODR o, void *handle, int type, const char *buf, int len), void (*stream_close)(void *handle)); Here the user provides an opaque handle and two handlers, stream_write for writing, and stream_close which is supposed to close/free resources associated with handle. The stream_close handler is optional and if NULL for the function is provided, it will not be invoked. The stream_write takes the ODR handle as parameter, the user defined handle, a type ODR_OCTETSTRING, ODR_VISIBLESTRING which indicates the type of contents is being written. Another utility useful for diagnostics (error handling) or as part of the printing facilities is: const char **odr_get_element_path(ODR o); which returns a list of current elements that ODR deals with at the moment. For the returned array, say ar, ar[0] is the top level element, ar[n] is the last. The last element has the property that ar[n+1] == NULL. Element Path for record For a database record part of a PresentResponse the array returned by odr_get_element is presentResponse, databaseOrSurDiagnostics, ?, record, ?, databaseRecord . The question mark appears due to unnamed constructions. Diagnostics The encoding/decoding functions all return 0 when an error occurs. Until you call odr_reset(), you cannot use the stream again, and any function called will immediately return 0. To provide information to the programmer or administrator, the function void odr_perror(ODR o, char *message); is provided, which prints the message argument to stderr along with an error message from the stream. You can also use the function int odr_geterror(ODR o); to get the current error number from the screen. The number will be one of these constants: ODR Error codes code Description OMEMORYMemory allocation failed. OSYSERRA system- or library call has failed. The standard diagnostic variable errno should be examined to determine the actual error. OSPACENo more space for encoding. This will only occur when the user has explicitly provided a buffer for an encoding stream without allowing the system to allocate more space. OREQUIREDThis is a common protocol error; A required data element was missing during encoding or decoding. OUNEXPECTEDAn unexpected data element was found during decoding. OOTHEROther error. This is typically an indication of misuse of the &odr; system by the programmer, and also that the diagnostic system isn't as good as it should be, yet.
The character string array char *odr_errlist[] can be indexed by the error code to obtain a human-readable representation of the problem.
Summary and Synopsis #include <yaz/odr.h> ODR odr_createmem(int direction); void odr_destroy(ODR o); void odr_reset(ODR o); char *odr_getbuf(ODR o, int *len, int *size); void odr_setbuf(ODR o, char *buf, int len, int can_grow); void *odr_malloc(ODR o, int size); NMEM odr_extract_mem(ODR o); int odr_geterror(ODR o); void odr_perror(ODR o, const char *message); extern char *odr_errlist[];
Programming with ODR The API of &odr; is designed to reflect the structure of ASN.1, rather than BER itself. Future releases may be able to represent data in other external forms. There is an ASN.1 tutorial available at this site. This site also has standards for ASN.1 (X.680) and BER (X.690) online. The ODR interface is based loosely on that of the Sun Microsystems XDR routines. Specifically, each function which corresponds to an ASN.1 primitive type has a dual function. Depending on the settings of the ODR stream which is supplied as a parameter, the function may be used either to encode or decode data. The functions that can be built using these primitive functions, to represent more complex data types, share this quality. The result is that you only have to enter the definition for a type once - and you have the functionality of encoding, decoding (and pretty-printing) all in one unit. The resulting C source code is quite compact, and is a pretty straightforward representation of the source ASN.1 specification. In many cases, the model of the XDR functions works quite well in this role. In others, it is less elegant. Most of the hassle comes from the optional SEQUENCE members which don't exist in XDR. The Primitive ASN.1 Types ASN.1 defines a number of primitive types (many of which correspond roughly to primitive types in structured programming languages, such as C). INTEGER The &odr; function for encoding or decoding (or printing) the ASN.1 INTEGER type looks like this: int odr_integer(ODR o, Odr_int **p, int optional, const char *name); The Odr_int is just a simple integer. This form is typical of the primitive &odr; functions. They are named after the type of data that they encode or decode. They take an &odr; stream, an indirect reference to the type in question, and an optional flag (corresponding to the OPTIONAL keyword of ASN.1) as parameters. They all return an integer value of either one or zero. When you use the primitive functions to construct encoders for complex types of your own, you should follow this model as well. This ensures that your new types can be reused as elements in yet more complex types. The o parameter should obviously refer to a properly initialized &odr; stream of the right type (encoding/decoding/printing) for the operation that you wish to perform. When encoding or printing, the function first looks at * p. If * p (the pointer pointed to by p) is a null pointer, this is taken to mean that the data element is absent. If the optional parameter is nonzero, the function will return one (signifying success) without any further processing. If the optional is zero, an internal error flag is set in the &odr; stream, and the function will return 0. No further operations can be carried out on the stream without a call to the function odr_reset(). If *p is not a null pointer, it is expected to point to an instance of the data type. The data will be subjected to the encoding rules, and the result will be placed in the buffer held by the &odr; stream. The other ASN.1 primitives have similar functions that operate in similar manners: BOOLEAN int odr_bool(ODR o, Odr_bool **p, int optional, const char *name); REAL Not defined. NULL int odr_null(ODR o, Odr_null **p, int optional, const char *name); In this case, the value of **p is not important. If *p is different from the null pointer, the null value is present, otherwise it's absent. OCTET STRING typedef struct odr_oct { unsigned char *buf; int len; int size; } Odr_oct; int odr_octetstring(ODR o, Odr_oct **p, int optional, const char *name); The buf field should point to the character array that holds the octetstring. The len field holds the actual length, while the size field gives the size of the allocated array (not of interest to you, in most cases). The character array need not be null terminated. To make things a little easier, an alternative is given for string types that are not expected to contain embedded NULL characters (eg. VisibleString): int odr_cstring(ODR o, char **p, int optional, const char *name); Which encoded or decodes between OCTETSTRING representations and null-terminates C strings. Functions are provided for the derived string types, eg: int odr_visiblestring(ODR o, char **p, int optional, const char *name); BIT STRING int odr_bitstring(ODR o, Odr_bitmask **p, int optional, const char *name); The opaque type Odr_bitmask is only suitable for holding relatively brief bit strings, eg. for options fields, etc. The constant ODR_BITMASK_SIZE multiplied by 8 gives the maximum possible number of bits. A set of macros are provided for manipulating the Odr_bitmask type: void ODR_MASK_ZERO(Odr_bitmask *b); void ODR_MASK_SET(Odr_bitmask *b, int bitno); void ODR_MASK_CLEAR(Odr_bitmask *b, int bitno); int ODR_MASK_GET(Odr_bitmask *b, int bitno); The functions are modeled after the manipulation functions that accompany the fd_set type used by the select(2) call. ODR_MASK_ZERO should always be called first on a new bitmask, to initialize the bits to zero. OBJECT IDENTIFIER int odr_oid(ODR o, Odr_oid **p, int optional, const char *name); The C OID representation is simply an array of integers, terminated by the value -1 (the Odr_oid type is synonymous with the short type). We suggest that you use the OID database module (see ) to handle object identifiers in your application. Tagging Primitive Types The simplest way of tagging a type is to use the odr_implicit_tag() or odr_explicit_tag() macros: int odr_implicit_tag(ODR o, Odr_fun fun, int class, int tag, int optional, const char *name); int odr_explicit_tag(ODR o, Odr_fun fun, int class, int tag, int optional, const char *name); To create a type derived from the integer type by implicit tagging, you might write: MyInt ::= [210] IMPLICIT INTEGER In the &odr; system, this would be written like: int myInt(ODR o, Odr_int **p, int optional, const char *name) { return odr_implicit_tag(o, odr_integer, p, ODR_CONTEXT, 210, optional, name); } The function myInt() can then be used like any of the primitive functions provided by &odr;. Note that the behavior of odr_explicit_tag() and odr_implicit_tag() macros act exactly the same as the functions they are applied to - they respond to error conditions, etc, in the same manner - they simply have three extra parameters. The class parameter may take one of the values: ODR_CONTEXT, ODR_PRIVATE, ODR_UNIVERSAL, or /ODR_APPLICATION. Constructed Types Constructed types are created by combining primitive types. The &odr; system only implements the SEQUENCE and SEQUENCE OF constructions (although adding the rest of the container types should be simple enough, if the need arises). For implementing SEQUENCEs, the functions int odr_sequence_begin(ODR o, void *p, int size, const char *name); int odr_sequence_end(ODR o); are provided. The odr_sequence_begin() function should be called in the beginning of a function that implements a SEQUENCE type. Its parameters are the &odr; stream, a pointer (to a pointer to the type you're implementing), and the size of the type (typically a C structure). On encoding, it returns 1 if * p is a null pointer. The size parameter is ignored. On decoding, it returns 1 if the type is found in the data stream. size bytes of memory are allocated, and *p is set to point to this space. odr_sequence_end() is called at the end of the complex function. Assume that a type is defined like this: MySequence ::= SEQUENCE { intval INTEGER, boolval BOOLEAN OPTIONAL } The corresponding &odr; encoder/decoder function and the associated data structures could be written like this: typedef struct MySequence { Odr_int *intval; Odr_bool *boolval; } MySequence; int mySequence(ODR o, MySequence **p, int optional, const char *name) { if (odr_sequence_begin(o, p, sizeof(**p), name) == 0) return optional && odr_ok(o); return odr_integer(o, &(*p)->intval, 0, "intval") && odr_bool(o, &(*p)->boolval, 1, "boolval") && odr_sequence_end(o); } Note the 1 in the call to odr_bool(), to mark that the sequence member is optional. If either of the member types had been tagged, the macros odr_implicit_tag() or odr_explicit_tag() could have been used. The new function can be used exactly like the standard functions provided with &odr;. It will encode, decode or pretty-print a data value of the MySequence type. We like to name types with an initial capital, as done in ASN.1 definitions, and to name the corresponding function with the first character of the name in lower case. You could, of course, name your structures, types, and functions any way you please - as long as you're consistent, and your code is easily readable. odr_ok is just that - a predicate that returns the state of the stream. It is used to ensure that the behavior of the new type is compatible with the interface of the primitive types. Tagging Constructed Types See for information on how to tag the primitive types, as well as types that are already defined. Implicit Tagging Assume the type above had been defined as MySequence ::= [10] IMPLICIT SEQUENCE { intval INTEGER, boolval BOOLEAN OPTIONAL } You would implement this in &odr; by calling the function int odr_implicit_settag(ODR o, int class, int tag); which overrides the tag of the type immediately following it. The macro odr_implicit_tag() works by calling odr_implicit_settag() immediately before calling the function pointer argument. Your type function could look like this: int mySequence(ODR o, MySequence **p, int optional, const char *name) { if (odr_implicit_settag(o, ODR_CONTEXT, 10) == 0 || odr_sequence_begin(o, p, sizeof(**p), name) == 0) return optional && odr_ok(o); return odr_integer(o, &(*p)->intval, 0, "intval") && odr_bool(o, &(*p)->boolval, 1, "boolval") && odr_sequence_end(o); } The definition of the structure MySequence would be the same. Explicit Tagging Explicit tagging of constructed types is a little more complicated, since you are in effect adding a level of construction to the data. Assume the definition: MySequence ::= [10] IMPLICIT SEQUENCE { intval INTEGER, boolval BOOLEAN OPTIONAL } Since the new type has an extra level of construction, two new functions are needed to encapsulate the base type: int odr_constructed_begin(ODR o, void *p, int class, int tag, const char *name); int odr_constructed_end(ODR o); Assume that the IMPLICIT in the type definition above were replaced with EXPLICIT (or that the IMPLICIT keyword were simply deleted, which would be equivalent). The structure definition would look the same, but the function would look like this: int mySequence(ODR o, MySequence **p, int optional, const char *name) { if (odr_constructed_begin(o, p, ODR_CONTEXT, 10, name) == 0) return optional && odr_ok(o); if (o->direction == ODR_DECODE) *p = odr_malloc(o, sizeof(**p)); if (odr_sequence_begin(o, p, sizeof(**p), 0) == 0) { *p = 0; /* this is almost certainly a protocol error */ return 0; } return odr_integer(o, &(*p)->intval, 0, "intval") && odr_bool(o, &(*p)->boolval, 1, "boolval") && odr_sequence_end(o) && odr_constructed_end(o); } Notice that the interface here gets kind of nasty. The reason is simple: Explicitly tagged, constructed types are fairly rare in the protocols that we care about, so the esthetic annoyance (not to mention the dangers of a cluttered interface) is less than the time that would be required to develop a better interface. Nevertheless, it is far from satisfying, and it's a point that will be worked on in the future. One option for you would be to simply apply the odr_explicit_tag() macro to the first function, and not have to worry about odr_constructed_* yourself. Incidentally, as you might have guessed, the odr_sequence_ functions are themselves implemented using the /odr_constructed_ functions. SEQUENCE OF To handle sequences (arrays) of a specific type, the function int odr_sequence_of(ODR o, int (*fun)(ODR o, void *p, int optional), void *p, int *num, const char *name); The fun parameter is a pointer to the decoder/encoder function of the type. p is a pointer to an array of pointers to your type. num is the number of elements in the array. Assume a type MyArray ::= SEQUENCE OF INTEGER The C representation might be typedef struct MyArray { int num_elements; Odr_int **elements; } MyArray; And the function might look like int myArray(ODR o, MyArray **p, int optional, const char *name) { if (o->direction == ODR_DECODE) *p = odr_malloc(o, sizeof(**p)); if (odr_sequence_of(o, odr_integer, &(*p)->elements, &(*p)->num_elements, name)) return 1; *p = 0; return optional && odr_ok(o); } CHOICE Types The choice type is used fairly often in some ASN.1 definitions, so some work has gone into streamlining its interface. CHOICE types are handled by the function: int odr_choice(ODR o, Odr_arm arm[], void *p, void *whichp, const char *name); The arm array is used to describe each of the possible types that the CHOICE type may assume. Internally in your application, the CHOICE type is represented as a discriminated union. That is, a C union accompanied by an integer (or enum) identifying the active 'arm' of the union. whichp is a pointer to the union discriminator. When encoding, it is examined to determine the current type. When decoding, it is set to reference the type that was found in the input stream. The Odr_arm type is defined thus: typedef struct odr_arm { int tagmode; int class; int tag; int which; Odr_fun fun; char *name; } Odr_arm; The interpretation of the fields are: tagmode Either ODR_IMPLICIT, ODR_EXPLICIT, or ODR_NONE (-1) to mark no tagging. which The value of the discriminator that corresponds to this CHOICE element. Typically, it will be a #defined constant, or an enum member. fun A pointer to a function that implements the type of the CHOICE member. It may be either a standard &odr; type or a type defined by yourself. name Name of tag. A handy way to prepare the array for use by the odr_choice() function is to define it as a static, initialized array in the beginning of your decoding/encoding function. Assume the type definition: MyChoice ::= CHOICE { untagged INTEGER, tagged [99] IMPLICIT INTEGER, other BOOLEAN } Your C type might look like typedef struct MyChoice { enum { MyChoice_untagged, MyChoice_tagged, MyChoice_other } which; union { Odr_int *untagged; Odr_int *tagged; Odr_bool *other; } u; }; And your function could look like this: int myChoice(ODR o, MyChoice **p, int optional, const char *name) { static Odr_arm arm[] = { {-1, -1, -1, MyChoice_untagged, odr_integer, "untagged"}, {ODR_IMPLICIT, ODR_CONTEXT, 99, MyChoice_tagged, odr_integer, "tagged"}, {-1, -1, -1, MyChoice_other, odr_boolean, "other"}, {-1, -1, -1, -1, 0} }; if (o->direction == ODR_DECODE) *p = odr_malloc(o, sizeof(**p); else if (!*p) return optional && odr_ok(o); if (odr_choice(o, arm, &(*p)->u, &(*p)->which), name) return 1; *p = 0; return optional && odr_ok(o); } In some cases (say, a non-optional choice which is a member of a sequence), you can "embed" the union and its discriminator in the structure belonging to the enclosing type, and you won't need to fiddle with memory allocation to create a separate structure to wrap the discriminator and union. The corresponding function is somewhat nicer in the Sun XDR interface. Most of the complexity of this interface comes from the possibility of declaring sequence elements (including CHOICEs) optional. The ASN.1 specifications naturally requires that each member of a CHOICE have a distinct tag, so they can be told apart on decoding. Sometimes it can be useful to define a CHOICE that has multiple types that share the same tag. You'll need some other mechanism, perhaps keyed to the context of the CHOICE type. In effect, we would like to introduce a level of context-sensitiveness to our ASN.1 specification. When encoding an internal representation, we have no problem, as long as each CHOICE member has a distinct discriminator value. For decoding, we need a way to tell the choice function to look for a specific arm of the table. The function void odr_choice_bias(ODR o, int what); provides this functionality. When called, it leaves a notice for the next call to odr_choice() to be called on the decoding stream o that only the arm entry with a which field equal to what should be tried. The most important application (perhaps the only one, really) is in the definition of application-specific EXTERNAL encoders/decoders which will automatically decode an ANY member given the direct or indirect reference. Debugging The protocol modules are suffering somewhat from a lack of diagnostic tools at the moment. Specifically ways to pretty-print PDUs that aren't recognized by the system. We'll include something to this end in a not-too-distant release. In the meantime, what we do when we get packages we don't understand is to compile the ODR module with ODR_DEBUG defined. This causes the module to dump tracing information as it processes data units. With this output and the protocol specification (Z39.50), it is generally fairly easy to see what goes wrong.
yaz-4.2.30/doc/std-oid-table.xml0000644000175000017500000007361511733047266013270 00000000000000 Name Class Constant / OID BER TRANSYN yaz_oid_transyn_ber 2.1.1 ISO2709 TRANSYN yaz_oid_transyn_iso2709 1.0.2709.1.1 ISOILL-1 GENERAL yaz_oid_general_isoill_1 1.0.10161.2.1 Z-APDU ABSYN yaz_oid_absyn_z_apdu 2.1 Z-BASIC APPCTX yaz_oid_appctx_z_basic 1.1 Bib-1 ATTSET yaz_oid_attset_bib_1 Z3950_PREFIX.3.1 Exp-1 ATTSET yaz_oid_attset_exp_1 Z3950_PREFIX.3.2 Ext-1 ATTSET yaz_oid_attset_ext_1 Z3950_PREFIX.3.3 CCL-1 ATTSET yaz_oid_attset_ccl_1 Z3950_PREFIX.3.4 GILS ATTSET yaz_oid_attset_gils Z3950_PREFIX.3.5 GILS-attset ATTSET yaz_oid_attset_gils_attset Z3950_PREFIX.3.5 STAS-attset ATTSET yaz_oid_attset_stas_attset Z3950_PREFIX.3.6 Collections-attset ATTSET yaz_oid_attset_collections_attset Z3950_PREFIX.3.7 CIMI-attset ATTSET yaz_oid_attset_cimi_attset Z3950_PREFIX.3.8 Geo-attset ATTSET yaz_oid_attset_geo_attset Z3950_PREFIX.3.9 ZBIG ATTSET yaz_oid_attset_zbig Z3950_PREFIX.3.10 Util ATTSET yaz_oid_attset_util Z3950_PREFIX.3.11 XD-1 ATTSET yaz_oid_attset_xd_1 Z3950_PREFIX.3.12 Zthes ATTSET yaz_oid_attset_zthes Z3950_PREFIX.3.13 Fin-1 ATTSET yaz_oid_attset_fin_1 Z3950_PREFIX.3.14 Dan-1 ATTSET yaz_oid_attset_dan_1 Z3950_PREFIX.3.15 Holdings ATTSET yaz_oid_attset_holdings Z3950_PREFIX.3.16 MARC ATTSET yaz_oid_attset_marc Z3950_PREFIX.3.17 Bib-2 ATTSET yaz_oid_attset_bib_2 Z3950_PREFIX.3.18 ZeeRex ATTSET yaz_oid_attset_zeerex Z3950_PREFIX.3.19 Thesaurus-attset ATTSET yaz_oid_attset_thesaurus_attset Z3950_PREFIX.3.1000.81.1 IDXPATH ATTSET yaz_oid_attset_idxpath Z3950_PREFIX.3.1000.81.2 EXTLITE ATTSET yaz_oid_attset_extlite Z3950_PREFIX.3.1000.81.3 Bib-1 DIAGSET yaz_oid_diagset_bib_1 Z3950_PREFIX.4.1 Diag-1 DIAGSET yaz_oid_diagset_diag_1 Z3950_PREFIX.4.2 Diag-ES DIAGSET yaz_oid_diagset_diag_es Z3950_PREFIX.4.3 Diag-General DIAGSET yaz_oid_diagset_diag_general Z3950_PREFIX.4.3 Unimarc RECSYN yaz_oid_recsyn_unimarc Z3950_PREFIX.5.1 Intermarc RECSYN yaz_oid_recsyn_intermarc Z3950_PREFIX.5.2 CCF RECSYN yaz_oid_recsyn_ccf Z3950_PREFIX.5.3 USmarc RECSYN yaz_oid_recsyn_usmarc Z3950_PREFIX.5.10 MARC21 RECSYN yaz_oid_recsyn_marc21 Z3950_PREFIX.5.10 UKmarc RECSYN yaz_oid_recsyn_ukmarc Z3950_PREFIX.5.11 Normarc RECSYN yaz_oid_recsyn_normarc Z3950_PREFIX.5.12 Librismarc RECSYN yaz_oid_recsyn_librismarc Z3950_PREFIX.5.13 Danmarc RECSYN yaz_oid_recsyn_danmarc Z3950_PREFIX.5.14 Finmarc RECSYN yaz_oid_recsyn_finmarc Z3950_PREFIX.5.15 MAB RECSYN yaz_oid_recsyn_mab Z3950_PREFIX.5.16 Canmarc RECSYN yaz_oid_recsyn_canmarc Z3950_PREFIX.5.17 SBN RECSYN yaz_oid_recsyn_sbn Z3950_PREFIX.5.18 Picamarc RECSYN yaz_oid_recsyn_picamarc Z3950_PREFIX.5.19 Ausmarc RECSYN yaz_oid_recsyn_ausmarc Z3950_PREFIX.5.20 Ibermarc RECSYN yaz_oid_recsyn_ibermarc Z3950_PREFIX.5.21 Carmarc RECSYN yaz_oid_recsyn_carmarc Z3950_PREFIX.5.22 Malmarc RECSYN yaz_oid_recsyn_malmarc Z3950_PREFIX.5.23 JPmarc RECSYN yaz_oid_recsyn_jpmarc Z3950_PREFIX.5.24 SWEmarc RECSYN yaz_oid_recsyn_swemarc Z3950_PREFIX.5.25 SIGLEmarc RECSYN yaz_oid_recsyn_siglemarc Z3950_PREFIX.5.26 ISDSmarc RECSYN yaz_oid_recsyn_isdsmarc Z3950_PREFIX.5.27 RUSmarc RECSYN yaz_oid_recsyn_rusmarc Z3950_PREFIX.5.28 Hunmarc RECSYN yaz_oid_recsyn_hunmarc Z3950_PREFIX.5.29 NACSIS-CATP RECSYN yaz_oid_recsyn_nacsis_catp Z3950_PREFIX.5.30 FINMARC2000 RECSYN yaz_oid_recsyn_finmarc2000 Z3950_PREFIX.5.31 MARC21-fin RECSYN yaz_oid_recsyn_marc21_fin Z3950_PREFIX.5.32 Explain RECSYN yaz_oid_recsyn_explain Z3950_PREFIX.5.100 SUTRS RECSYN yaz_oid_recsyn_sutrs Z3950_PREFIX.5.101 OPAC RECSYN yaz_oid_recsyn_opac Z3950_PREFIX.5.102 Summary RECSYN yaz_oid_recsyn_summary Z3950_PREFIX.5.103 GRS-0 RECSYN yaz_oid_recsyn_grs_0 Z3950_PREFIX.5.104 GRS-1 RECSYN yaz_oid_recsyn_grs_1 Z3950_PREFIX.5.105 Extended RECSYN yaz_oid_recsyn_extended Z3950_PREFIX.5.106 Fragment RECSYN yaz_oid_recsyn_fragment Z3950_PREFIX.5.107 pdf RECSYN yaz_oid_recsyn_pdf Z3950_PREFIX.5.109.1 postscript RECSYN yaz_oid_recsyn_postscript Z3950_PREFIX.5.109.2 html RECSYN yaz_oid_recsyn_html Z3950_PREFIX.5.109.3 tiff RECSYN yaz_oid_recsyn_tiff Z3950_PREFIX.5.109.4 gif RECSYN yaz_oid_recsyn_gif Z3950_PREFIX.5.109.5 jpeg RECSYN yaz_oid_recsyn_jpeg Z3950_PREFIX.5.109.6 png RECSYN yaz_oid_recsyn_png Z3950_PREFIX.5.109.7 mpeg RECSYN yaz_oid_recsyn_mpeg Z3950_PREFIX.5.109.8 sgml RECSYN yaz_oid_recsyn_sgml Z3950_PREFIX.5.109.9 tiff-b RECSYN yaz_oid_recsyn_tiff_b Z3950_PREFIX.5.110.1 wav RECSYN yaz_oid_recsyn_wav Z3950_PREFIX.5.110.2 SQL-RS RECSYN yaz_oid_recsyn_sql_rs Z3950_PREFIX.5.111 SOIF RECSYN yaz_oid_recsyn_soif Z3950_PREFIX.5.1000.81.2 JSON RECSYN yaz_oid_recsyn_json Z3950_PREFIX.5.1000.81.3 XML RECSYN yaz_oid_recsyn_xml Z3950_PREFIX.5.109.10 text-XML RECSYN yaz_oid_recsyn_text_xml Z3950_PREFIX.5.109.10 application-XML RECSYN yaz_oid_recsyn_application_xml Z3950_PREFIX.5.109.11 Resource-1 RESFORM yaz_oid_resform_resource_1 Z3950_PREFIX.7.1 Resource-2 RESFORM yaz_oid_resform_resource_2 Z3950_PREFIX.7.2 UNIverse-Resource-Report RESFORM yaz_oid_resform_universe_resource_report Z3950_PREFIX.7.1000.81.1 Prompt-1 ACCFORM yaz_oid_accform_prompt_1 Z3950_PREFIX.8.1 Des-1 ACCFORM yaz_oid_accform_des_1 Z3950_PREFIX.8.2 Krb-1 ACCFORM yaz_oid_accform_krb_1 Z3950_PREFIX.8.3 Persistent set EXTSERV yaz_oid_extserv_persistent_set Z3950_PREFIX.9.1 Persistent query EXTSERV yaz_oid_extserv_persistent_query Z3950_PREFIX.9.2 Periodic query EXTSERV yaz_oid_extserv_periodic_query Z3950_PREFIX.9.3 Item order EXTSERV yaz_oid_extserv_item_order Z3950_PREFIX.9.4 Database Update (first version) EXTSERV yaz_oid_extserv_database_update_first_version Z3950_PREFIX.9.5 Database Update (second version) EXTSERV yaz_oid_extserv_database_update_second_version Z3950_PREFIX.9.5.1 Database Update EXTSERV yaz_oid_extserv_database_update Z3950_PREFIX.9.5.1.1 exp. spec. EXTSERV yaz_oid_extserv_exp__spec_ Z3950_PREFIX.9.6 exp. inv. EXTSERV yaz_oid_extserv_exp__inv_ Z3950_PREFIX.9.7 Admin EXTSERV yaz_oid_extserv_admin Z3950_PREFIX.9.1000.81.1 searchResult-1 USERINFO yaz_oid_userinfo_searchresult_1 Z3950_PREFIX.10.1 CharSetandLanguageNegotiation USERINFO yaz_oid_userinfo_charsetandlanguagenegotiation Z3950_PREFIX.10.2 UserInfo-1 USERINFO yaz_oid_userinfo_userinfo_1 Z3950_PREFIX.10.3 MultipleSearchTerms-1 USERINFO yaz_oid_userinfo_multiplesearchterms_1 Z3950_PREFIX.10.4 MultipleSearchTerms-2 USERINFO yaz_oid_userinfo_multiplesearchterms_2 Z3950_PREFIX.10.5 DateTime USERINFO yaz_oid_userinfo_datetime Z3950_PREFIX.10.6 Proxy USERINFO yaz_oid_userinfo_proxy Z3950_PREFIX.10.1000.81.1 Cookie USERINFO yaz_oid_userinfo_cookie Z3950_PREFIX.10.1000.81.2 Client-IP USERINFO yaz_oid_userinfo_client_ip Z3950_PREFIX.10.1000.81.3 Scan-Set USERINFO yaz_oid_userinfo_scan_set Z3950_PREFIX.10.1000.81.4 Facet-1 USERINFO yaz_oid_userinfo_facet_1 Z3950_PREFIX.10.1000.81.5 Espec-1 ELEMSPEC yaz_oid_elemspec_espec_1 Z3950_PREFIX.11.1 Variant-1 VARSET yaz_oid_varset_variant_1 Z3950_PREFIX.12.1 WAIS-schema SCHEMA yaz_oid_schema_wais_schema Z3950_PREFIX.13.1 GILS-schema SCHEMA yaz_oid_schema_gils_schema Z3950_PREFIX.13.2 Collections-schema SCHEMA yaz_oid_schema_collections_schema Z3950_PREFIX.13.3 Geo-schema SCHEMA yaz_oid_schema_geo_schema Z3950_PREFIX.13.4 CIMI-schema SCHEMA yaz_oid_schema_cimi_schema Z3950_PREFIX.13.5 Update ES SCHEMA yaz_oid_schema_update_es Z3950_PREFIX.13.6 Holdings SCHEMA yaz_oid_schema_holdings Z3950_PREFIX.13.7 Zthes SCHEMA yaz_oid_schema_zthes Z3950_PREFIX.13.8 thesaurus-schema SCHEMA yaz_oid_schema_thesaurus_schema Z3950_PREFIX.13.1000.81.1 Explain-schema SCHEMA yaz_oid_schema_explain_schema Z3950_PREFIX.13.1000.81.2 TagsetM TAGSET yaz_oid_tagset_tagsetm Z3950_PREFIX.14.1 TagsetG TAGSET yaz_oid_tagset_tagsetg Z3950_PREFIX.14.2 STAS-tagset TAGSET yaz_oid_tagset_stas_tagset Z3950_PREFIX.14.3 GILS-tagset TAGSET yaz_oid_tagset_gils_tagset Z3950_PREFIX.14.4 Collections-tagset TAGSET yaz_oid_tagset_collections_tagset Z3950_PREFIX.14.5 CIMI-tagset TAGSET yaz_oid_tagset_cimi_tagset Z3950_PREFIX.14.6 thesaurus-tagset TAGSET yaz_oid_tagset_thesaurus_tagset Z3950_PREFIX.14.1000.81.1 Explain-tagset TAGSET yaz_oid_tagset_explain_tagset Z3950_PREFIX.14.1000.81.2 Zthes-tagset TAGSET yaz_oid_tagset_zthes_tagset Z3950_PREFIX.14.8 Charset-3 NEGOT yaz_oid_negot_charset_3 Z3950_PREFIX.15.3 Charset-4 NEGOT yaz_oid_negot_charset_4 Z3950_PREFIX.15.4 Charset-ID NEGOT yaz_oid_negot_charset_id Z3950_PREFIX.15.1000.81.1 CQL USERINFO yaz_oid_userinfo_cql Z3950_PREFIX.16.2 UCS-2 GENERAL yaz_oid_general_ucs_2 1.0.10646.1.0.2 UCS-4 GENERAL yaz_oid_general_ucs_4 1.0.10646.1.0.4 UTF-16 GENERAL yaz_oid_general_utf_16 1.0.10646.1.0.5 UTF-8 GENERAL yaz_oid_general_utf_8 1.0.10646.1.0.8 OCLC-userInfo USERINFO yaz_oid_userinfo_oclc_userinfo Z3950_PREFIX.10.1000.17.1 XML-ES EXTSERV yaz_oid_extserv_xml_es Z3950_PREFIX.9.1000.105.4 yaz-4.2.30/doc/future.html0000644000175000017500000000576211741237744012315 00000000000000Chapter 10. Future Directions

Chapter 10. Future Directions

We have a new and better version of the front-end server on the drawing board. Resources and external commitments will govern when we'll be able to do something real with it. Features should include greater flexibility, greater support for access/resource control, and easy support for Explain (possibly with Zebra as an extra database engine).

YAZ is a BER toolkit and as such should support all protocols out there based on that. We'd like to see running ILL applications. It shouldn't be that hard. Another thing that would be interesting is LDAP. Maybe a generic framework for doing IR using both LDAP and Z39.50 transparently.

The SOAP implementation is incomplete. In the future we hope to add more features to it. Perhaps make a WSDL/XML Schema compiler. The authors of libxml2 are already working on XML Schema / RelaxNG compilers so this may not be too hard.

It would be neat to have a proper module mechanism for the Generic Frontend Server so that backend would be dynamically loaded (as shared objects / DLLs).

Other than that, YAZ generally moves in the directions which appear to make the most people happy (including ourselves, as prime users of the software). If there's something you'd like to see in here, then drop us a note and let's see what we can come up with.

yaz-4.2.30/doc/zoomsh.html0000644000175000017500000001367411741237744012323 00000000000000zoomsh

Name

zoomsh — ZOOM shell

Synopsis

zoomsh [-e] [-v loglevel] [commands...]

DESCRIPTION

zoomsh is a ZOOM client with a simple command line interface. The client demonstrates the ZOOM API and is useful for testing targets.

You may pass one or more commands to zoomsh. These commands are invoked first.

OPTIONS

-e

Makes zoomsh stop processing commands as soon as an error occur. The exit code of zoomsh is 1 if error occurs; 0 otherwise.

-v loglevel

Sets YAZ log level.

EXAMPLES

If you start the yaz-ztest in one console you can use the ZOOM shell as follows:

$ zoomsh
ZOOM>connect localhost:9999
ZOOM>search computer
localhost:9999: 7 hits
ZOOM>show 0 1
1 Default USmarc
001    11224466 
003 DLC
005 00000000000000.0
008 910710c19910701nju           00010 eng  
010    $a    11224466 
040    $a DLC $c DLC
050 00 $a 123-xyz
100 10 $a Jack Collins
245 10 $a How to program a computer
260 1  $a Penguin
263    $a 8710
300    $a p. cm.
ZOOM>quit

    

You can also achieve the same result by passing the commands as arguments on a single command line:

$ zoomsh "connect localhost:9999" "search computer" "show 0 1" quit

COMMANDS

connect zurl

Connects to the target given by zurl.

close [zurl]

Closes connection to target given by zurl or all targets if zurl was omitted.

show [start [count]]

Displays count records starting at offset given by start. First records has offset 0 (unlike the Z39.50 protocol).

quit

Quits zoomsh.

set name [value]

Sets option name to value.

get name

Prints value of option name.

help

Prints list of available commands.

SEE ALSO

yaz(7), yaz-ztest(8),

Section "Building clients with ZOOM" in the YAZ manual.

ZOOM home page.

yaz-4.2.30/doc/list-oids.html0000644000175000017500000006343611741237744012714 00000000000000Appendix A. List of Object Identifiers

Appendix A. List of Object Identifiers

These is a list of object identifiers that are built into YAZ.

NameClassConstant / OID
BER TRANSYN yaz_oid_transyn_ber
2.1.1
ISO2709 TRANSYN yaz_oid_transyn_iso2709
1.0.2709.1.1
ISOILL-1 GENERAL yaz_oid_general_isoill_1
1.0.10161.2.1
Z-APDU ABSYN yaz_oid_absyn_z_apdu
2.1
Z-BASIC APPCTX yaz_oid_appctx_z_basic
1.1
Bib-1 ATTSET yaz_oid_attset_bib_1
Z3950_PREFIX.3.1
Exp-1 ATTSET yaz_oid_attset_exp_1
Z3950_PREFIX.3.2
Ext-1 ATTSET yaz_oid_attset_ext_1
Z3950_PREFIX.3.3
CCL-1 ATTSET yaz_oid_attset_ccl_1
Z3950_PREFIX.3.4
GILS ATTSET yaz_oid_attset_gils
Z3950_PREFIX.3.5
GILS-attset ATTSET yaz_oid_attset_gils_attset
Z3950_PREFIX.3.5
STAS-attset ATTSET yaz_oid_attset_stas_attset
Z3950_PREFIX.3.6
Collections-attset ATTSET yaz_oid_attset_collections_attset
Z3950_PREFIX.3.7
CIMI-attset ATTSET yaz_oid_attset_cimi_attset
Z3950_PREFIX.3.8
Geo-attset ATTSET yaz_oid_attset_geo_attset
Z3950_PREFIX.3.9
ZBIG ATTSET yaz_oid_attset_zbig
Z3950_PREFIX.3.10
Util ATTSET yaz_oid_attset_util
Z3950_PREFIX.3.11
XD-1 ATTSET yaz_oid_attset_xd_1
Z3950_PREFIX.3.12
Zthes ATTSET yaz_oid_attset_zthes
Z3950_PREFIX.3.13
Fin-1 ATTSET yaz_oid_attset_fin_1
Z3950_PREFIX.3.14
Dan-1 ATTSET yaz_oid_attset_dan_1
Z3950_PREFIX.3.15
Holdings ATTSET yaz_oid_attset_holdings
Z3950_PREFIX.3.16
MARC ATTSET yaz_oid_attset_marc
Z3950_PREFIX.3.17
Bib-2 ATTSET yaz_oid_attset_bib_2
Z3950_PREFIX.3.18
ZeeRex ATTSET yaz_oid_attset_zeerex
Z3950_PREFIX.3.19
Thesaurus-attset ATTSET yaz_oid_attset_thesaurus_attset
Z3950_PREFIX.3.1000.81.1
IDXPATH ATTSET yaz_oid_attset_idxpath
Z3950_PREFIX.3.1000.81.2
EXTLITE ATTSET yaz_oid_attset_extlite
Z3950_PREFIX.3.1000.81.3
Bib-1 DIAGSET yaz_oid_diagset_bib_1
Z3950_PREFIX.4.1
Diag-1 DIAGSET yaz_oid_diagset_diag_1
Z3950_PREFIX.4.2
Diag-ES DIAGSET yaz_oid_diagset_diag_es
Z3950_PREFIX.4.3
Diag-General DIAGSET yaz_oid_diagset_diag_general
Z3950_PREFIX.4.3
Unimarc RECSYN yaz_oid_recsyn_unimarc
Z3950_PREFIX.5.1
Intermarc RECSYN yaz_oid_recsyn_intermarc
Z3950_PREFIX.5.2
CCF RECSYN yaz_oid_recsyn_ccf
Z3950_PREFIX.5.3
USmarc RECSYN yaz_oid_recsyn_usmarc
Z3950_PREFIX.5.10
MARC21 RECSYN yaz_oid_recsyn_marc21
Z3950_PREFIX.5.10
UKmarc RECSYN yaz_oid_recsyn_ukmarc
Z3950_PREFIX.5.11
Normarc RECSYN yaz_oid_recsyn_normarc
Z3950_PREFIX.5.12
Librismarc RECSYN yaz_oid_recsyn_librismarc
Z3950_PREFIX.5.13
Danmarc RECSYN yaz_oid_recsyn_danmarc
Z3950_PREFIX.5.14
Finmarc RECSYN yaz_oid_recsyn_finmarc
Z3950_PREFIX.5.15
MAB RECSYN yaz_oid_recsyn_mab
Z3950_PREFIX.5.16
Canmarc RECSYN yaz_oid_recsyn_canmarc
Z3950_PREFIX.5.17
SBN RECSYN yaz_oid_recsyn_sbn
Z3950_PREFIX.5.18
Picamarc RECSYN yaz_oid_recsyn_picamarc
Z3950_PREFIX.5.19
Ausmarc RECSYN yaz_oid_recsyn_ausmarc
Z3950_PREFIX.5.20
Ibermarc RECSYN yaz_oid_recsyn_ibermarc
Z3950_PREFIX.5.21
Carmarc RECSYN yaz_oid_recsyn_carmarc
Z3950_PREFIX.5.22
Malmarc RECSYN yaz_oid_recsyn_malmarc
Z3950_PREFIX.5.23
JPmarc RECSYN yaz_oid_recsyn_jpmarc
Z3950_PREFIX.5.24
SWEmarc RECSYN yaz_oid_recsyn_swemarc
Z3950_PREFIX.5.25
SIGLEmarc RECSYN yaz_oid_recsyn_siglemarc
Z3950_PREFIX.5.26
ISDSmarc RECSYN yaz_oid_recsyn_isdsmarc
Z3950_PREFIX.5.27
RUSmarc RECSYN yaz_oid_recsyn_rusmarc
Z3950_PREFIX.5.28
Hunmarc RECSYN yaz_oid_recsyn_hunmarc
Z3950_PREFIX.5.29
NACSIS-CATP RECSYN yaz_oid_recsyn_nacsis_catp
Z3950_PREFIX.5.30
FINMARC2000 RECSYN yaz_oid_recsyn_finmarc2000
Z3950_PREFIX.5.31
MARC21-fin RECSYN yaz_oid_recsyn_marc21_fin
Z3950_PREFIX.5.32
Explain RECSYN yaz_oid_recsyn_explain
Z3950_PREFIX.5.100
SUTRS RECSYN yaz_oid_recsyn_sutrs
Z3950_PREFIX.5.101
OPAC RECSYN yaz_oid_recsyn_opac
Z3950_PREFIX.5.102
Summary RECSYN yaz_oid_recsyn_summary
Z3950_PREFIX.5.103
GRS-0 RECSYN yaz_oid_recsyn_grs_0
Z3950_PREFIX.5.104
GRS-1 RECSYN yaz_oid_recsyn_grs_1
Z3950_PREFIX.5.105
Extended RECSYN yaz_oid_recsyn_extended
Z3950_PREFIX.5.106
Fragment RECSYN yaz_oid_recsyn_fragment
Z3950_PREFIX.5.107
pdf RECSYN yaz_oid_recsyn_pdf
Z3950_PREFIX.5.109.1
postscript RECSYN yaz_oid_recsyn_postscript
Z3950_PREFIX.5.109.2
html RECSYN yaz_oid_recsyn_html
Z3950_PREFIX.5.109.3
tiff RECSYN yaz_oid_recsyn_tiff
Z3950_PREFIX.5.109.4
gif RECSYN yaz_oid_recsyn_gif
Z3950_PREFIX.5.109.5
jpeg RECSYN yaz_oid_recsyn_jpeg
Z3950_PREFIX.5.109.6
png RECSYN yaz_oid_recsyn_png
Z3950_PREFIX.5.109.7
mpeg RECSYN yaz_oid_recsyn_mpeg
Z3950_PREFIX.5.109.8
sgml RECSYN yaz_oid_recsyn_sgml
Z3950_PREFIX.5.109.9
tiff-b RECSYN yaz_oid_recsyn_tiff_b
Z3950_PREFIX.5.110.1
wav RECSYN yaz_oid_recsyn_wav
Z3950_PREFIX.5.110.2
SQL-RS RECSYN yaz_oid_recsyn_sql_rs
Z3950_PREFIX.5.111
SOIF RECSYN yaz_oid_recsyn_soif
Z3950_PREFIX.5.1000.81.2
JSON RECSYN yaz_oid_recsyn_json
Z3950_PREFIX.5.1000.81.3
XML RECSYN yaz_oid_recsyn_xml
Z3950_PREFIX.5.109.10
text-XML RECSYN yaz_oid_recsyn_text_xml
Z3950_PREFIX.5.109.10
application-XML RECSYN yaz_oid_recsyn_application_xml
Z3950_PREFIX.5.109.11
Resource-1 RESFORM yaz_oid_resform_resource_1
Z3950_PREFIX.7.1
Resource-2 RESFORM yaz_oid_resform_resource_2
Z3950_PREFIX.7.2
UNIverse-Resource-Report RESFORM yaz_oid_resform_universe_resource_report
Z3950_PREFIX.7.1000.81.1
Prompt-1 ACCFORM yaz_oid_accform_prompt_1
Z3950_PREFIX.8.1
Des-1 ACCFORM yaz_oid_accform_des_1
Z3950_PREFIX.8.2
Krb-1 ACCFORM yaz_oid_accform_krb_1
Z3950_PREFIX.8.3
Persistent set EXTSERV yaz_oid_extserv_persistent_set
Z3950_PREFIX.9.1
Persistent query EXTSERV yaz_oid_extserv_persistent_query
Z3950_PREFIX.9.2
Periodic query EXTSERV yaz_oid_extserv_periodic_query
Z3950_PREFIX.9.3
Item order EXTSERV yaz_oid_extserv_item_order
Z3950_PREFIX.9.4
Database Update (first version) EXTSERV yaz_oid_extserv_database_update_first_version
Z3950_PREFIX.9.5
Database Update (second version) EXTSERV yaz_oid_extserv_database_update_second_version
Z3950_PREFIX.9.5.1
Database Update EXTSERV yaz_oid_extserv_database_update
Z3950_PREFIX.9.5.1.1
exp. spec. EXTSERV yaz_oid_extserv_exp__spec_
Z3950_PREFIX.9.6
exp. inv. EXTSERV yaz_oid_extserv_exp__inv_
Z3950_PREFIX.9.7
Admin EXTSERV yaz_oid_extserv_admin
Z3950_PREFIX.9.1000.81.1
searchResult-1 USERINFO yaz_oid_userinfo_searchresult_1
Z3950_PREFIX.10.1
CharSetandLanguageNegotiation USERINFO yaz_oid_userinfo_charsetandlanguagenegotiation
Z3950_PREFIX.10.2
UserInfo-1 USERINFO yaz_oid_userinfo_userinfo_1
Z3950_PREFIX.10.3
MultipleSearchTerms-1 USERINFO yaz_oid_userinfo_multiplesearchterms_1
Z3950_PREFIX.10.4
MultipleSearchTerms-2 USERINFO yaz_oid_userinfo_multiplesearchterms_2
Z3950_PREFIX.10.5
DateTime USERINFO yaz_oid_userinfo_datetime
Z3950_PREFIX.10.6
Proxy USERINFO yaz_oid_userinfo_proxy
Z3950_PREFIX.10.1000.81.1
Cookie USERINFO yaz_oid_userinfo_cookie
Z3950_PREFIX.10.1000.81.2
Client-IP USERINFO yaz_oid_userinfo_client_ip
Z3950_PREFIX.10.1000.81.3
Scan-Set USERINFO yaz_oid_userinfo_scan_set
Z3950_PREFIX.10.1000.81.4
Facet-1 USERINFO yaz_oid_userinfo_facet_1
Z3950_PREFIX.10.1000.81.5
Espec-1 ELEMSPEC yaz_oid_elemspec_espec_1
Z3950_PREFIX.11.1
Variant-1 VARSET yaz_oid_varset_variant_1
Z3950_PREFIX.12.1
WAIS-schema SCHEMA yaz_oid_schema_wais_schema
Z3950_PREFIX.13.1
GILS-schema SCHEMA yaz_oid_schema_gils_schema
Z3950_PREFIX.13.2
Collections-schema SCHEMA yaz_oid_schema_collections_schema
Z3950_PREFIX.13.3
Geo-schema SCHEMA yaz_oid_schema_geo_schema
Z3950_PREFIX.13.4
CIMI-schema SCHEMA yaz_oid_schema_cimi_schema
Z3950_PREFIX.13.5
Update ES SCHEMA yaz_oid_schema_update_es
Z3950_PREFIX.13.6
Holdings SCHEMA yaz_oid_schema_holdings
Z3950_PREFIX.13.7
Zthes SCHEMA yaz_oid_schema_zthes
Z3950_PREFIX.13.8
thesaurus-schema SCHEMA yaz_oid_schema_thesaurus_schema
Z3950_PREFIX.13.1000.81.1
Explain-schema SCHEMA yaz_oid_schema_explain_schema
Z3950_PREFIX.13.1000.81.2
TagsetM TAGSET yaz_oid_tagset_tagsetm
Z3950_PREFIX.14.1
TagsetG TAGSET yaz_oid_tagset_tagsetg
Z3950_PREFIX.14.2
STAS-tagset TAGSET yaz_oid_tagset_stas_tagset
Z3950_PREFIX.14.3
GILS-tagset TAGSET yaz_oid_tagset_gils_tagset
Z3950_PREFIX.14.4
Collections-tagset TAGSET yaz_oid_tagset_collections_tagset
Z3950_PREFIX.14.5
CIMI-tagset TAGSET yaz_oid_tagset_cimi_tagset
Z3950_PREFIX.14.6
thesaurus-tagset TAGSET yaz_oid_tagset_thesaurus_tagset
Z3950_PREFIX.14.1000.81.1
Explain-tagset TAGSET yaz_oid_tagset_explain_tagset
Z3950_PREFIX.14.1000.81.2
Zthes-tagset TAGSET yaz_oid_tagset_zthes_tagset
Z3950_PREFIX.14.8
Charset-3 NEGOT yaz_oid_negot_charset_3
Z3950_PREFIX.15.3
Charset-4 NEGOT yaz_oid_negot_charset_4
Z3950_PREFIX.15.4
Charset-ID NEGOT yaz_oid_negot_charset_id
Z3950_PREFIX.15.1000.81.1
CQL USERINFO yaz_oid_userinfo_cql
Z3950_PREFIX.16.2
UCS-2 GENERAL yaz_oid_general_ucs_2
1.0.10646.1.0.2
UCS-4 GENERAL yaz_oid_general_ucs_4
1.0.10646.1.0.4
UTF-16 GENERAL yaz_oid_general_utf_16
1.0.10646.1.0.5
UTF-8 GENERAL yaz_oid_general_utf_8
1.0.10646.1.0.8
OCLC-userInfo USERINFO yaz_oid_userinfo_oclc_userinfo
Z3950_PREFIX.10.1000.17.1
XML-ES EXTSERV yaz_oid_extserv_xml_es
Z3950_PREFIX.9.1000.105.4
yaz-4.2.30/doc/server.backend.html0000644000175000017500000000443311741237744013671 000000000000003. The Backend API

3. The Backend API

The header file that you need to use the interface are in the include/yaz directory. It's called backend.h. It will include other files from the include/yaz directory, so you'll probably want to use the -I option of your compiler to tell it where to find the files. When you run make in the top-level YAZ directory, everything you need to create your server is to link with the lib/libyaz.la library.

yaz-4.2.30/doc/zoom.html0000644000175000017500000005066411741237744011770 00000000000000Chapter 3. ZOOM

Chapter 3. ZOOM

ZOOM is an acronym for 'Z39.50 Object-Orientation Model' and is an initiative started by Mike Taylor (Mike is from the UK, which explains the peculiar name of the model). The goal of ZOOM is to provide a common Z39.50 client API not bound to a particular programming language or toolkit.

From YAZ version 2.1.12, SRU is supported. You can make SRU ZOOM connections by specifying scheme http:// for the hostname for a connection. The dialect of SRU used is specified by the value of the connection's sru option, which may be SRU over HTTP GET (get), SRU over HTTP POST (post), (SRU over SOAP) (soap) or SOLR (SOLR Web Service). Using the facility for embedding options in target strings, a connection can be forced to use SRU rather the SRW (the default) by prefixing the target string with sru=get,, like this: sru=get,http://sru.miketaylor.org.uk:80/sru.pl

SOLR protocol support was added to YAZ in version 4.1.0, as a dialect of a SRU protocol, since both are HTTP based protocols.

The lack of a simple Z39.50 client API for YAZ has become more and more apparent over time. So when the first ZOOM specification became available, an implementation for YAZ was quickly developed. For the first time, it is now as easy (or easier!) to develop clients than servers with YAZ. This chapter describes the ZOOM C binding. Before going further, please reconsider whether C is the right programming language for the job. There are other language bindings available for YAZ, and still more are in active development. See the ZOOM web-site for more information.

In order to fully understand this chapter you should read and try the example programs zoomtst1.c, zoomtst2.c, .. in the zoom directory.

The C language misses features found in object oriented languages such as C++, Java, etc. For example, you'll have to manually, destroy all objects you create, even though you may think of them as temporary. Most objects has a _create - and a _destroy variant. All objects are in fact pointers to internal stuff, but you don't see that because of typedefs. All destroy methods should gracefully ignore a NULL pointer.

In each of the sections below you'll find a sub section called protocol behavior, that describes how the API maps to the Z39.50 protocol.

1. Connections

The Connection object is a session with a target.

    #include <yaz/zoom.h>
    
    ZOOM_connection ZOOM_connection_new (const char *host, int portnum);
    
    ZOOM_connection ZOOM_connection_create (ZOOM_options options);
    
    void ZOOM_connection_connect(ZOOM_connection c, const char *host,
                                 int portnum);
    void ZOOM_connection_destroy(ZOOM_connection c);
   

Connection objects are created with either function ZOOM_connection_new or ZOOM_connection_create. The former creates and automatically attempts to establish a network connection with the target. The latter doesn't establish a connection immediately, thus allowing you to specify options before establishing network connection using the function ZOOM_connection_connect. If the port number, portnum, is zero, the host is consulted for a port specification. If no port is given, 210 is used. A colon denotes the beginning of a port number in the host string. If the host string includes a slash, the following part specifies a database for the connection.

You can prefix the host with a scheme followed by colon. The default scheme is tcp (Z39.50 protocol). The scheme http selects SRU/get over HTTP by default, but can overridded to use SRU/post, SRW and the SOLR protocol.

You can prefix the scheme-qualified host-string with one or more comma-separated key=value sequences, each of which represents an option to be set into the connection structure before the protocol-level connection is forged and the initialization handshake takes place. This facility can be used to provide authentication credentials, as in host-strings such as: user=admin,password=halfAm4n,tcp:localhost:8017/db

Connection objects should be destroyed using the function ZOOM_connection_destroy.

    void ZOOM_connection_option_set(ZOOM_connection c,
                                    const char *key, const char *val);

    void ZOOM_connection_option_setl(ZOOM_connection c,
                                     const char *key,
                                     const char *val, int len);

    const char *ZOOM_connection_option_get(ZOOM_connection c,
                                           const char *key);
    const char *ZOOM_connection_option_getl(ZOOM_connection c,
                                            const char *key,
                                            int *lenp);
   

The functions ZOOM_connection_option_set and ZOOM_connection_option_setl allows you to set an option given by key to the value value for the connection. For ZOOM_connection_option_set, the value is assumed to be a 0-terminated string. Function ZOOM_connection_option_setl specifies a value of a certain size (len).

Functions ZOOM_connection_option_get and ZOOM_connection_option_getl returns the value for an option given by key.

Table 3.1. ZOOM Connection Options

OptionDescriptionDefault
implementationNameName of Your client none
userAuthentication user name none
groupAuthentication group name none
passwordAuthentication password. none
hostTarget host. This setting is "read-only". It's automatically set internally when connecting to a target. none
proxyProxy host. If set, the logical host is encoded in the otherInfo area of the Z39.50 Init PDU with OID 1.2.840.10003.10.1000.81.1. none
clientIPClient IP. If set, is encoded in the otherInfo area of a Z39.50 PDU with OID 1.2.840.10003.10.1000.81.3. Holds the original IP addreses of a client. Is used of ZOOM is used in a gateway of some sort. none
asyncIf true (1) the connection operates in asynchronous operation which means that all calls are non-blocking except ZOOM_event. 0
maximumRecordSize Maximum size of single record. 1 MB
preferredMessageSize Maximum size of multiple records. 1 MB
lang Language for negotiation. none
charset Character set for negotiation. none
serverImplementationId Implementation ID of server. (The old targetImplementationId option is also supported for the benefit of old applications.) none
targetImplementationName Implementation Name of server. (The old targetImplementationName option is also supported for the benefit of old applications.) none
serverImplementationVersion Implementation Version of server. (the old targetImplementationVersion option is also supported for the benefit of old applications.) none
databaseNameOne or more database names separated by character plus (+), which to be used by subsequent search requests on this Connection. Default
piggybackTrue (1) if piggyback should be used in searches; false (0) if not. 1
smallSetUpperBoundIf hits is less than or equal to this value, then target will return all records using small element set name 0
largeSetLowerBoundIf hits is greater than this value, the target will return no records. 1
mediumSetPresentNumberThis value represents the number of records to be returned as part of a search when when hits is less than or equal to large set lower bound and if hits is greater than small set upper bound. 0
smallSetElementSetName The element set name to be used for small result sets. none
mediumSetElementSetName The element set name to be for medium-sized result sets. none
init_opt_search, init_opt_present, init_opt_delSet, etc. After a successful Init, these options may be interrogated to discover whether the server claims to support the specified operations. none
sru SRU/SOLR transport type. Must be either soap, get, post, or solr. soap
sru_version SRU/SRW version. Should be 1.1, or 1.2. This is , prior to connect, the version to offer (highest version). And following connect (in fact first operation), holds the negotiated version with the server (same or lower version). 1.2
facets A FacetList is comma-separated list of facet, which is defined as AttributeList and a optional FacetTerm (a Term and a frequency). On request the terms is missing. On response the the list contains the terms that the target could collect. none
apdulog If set to a true value such as "1", a log of low-level protocol packets is emitted on standard error stream. This can be very useful for debugging. 0

If either option lang or charset is set, then Character Set and Language Negotiation is in effect.

     int ZOOM_connection_error(ZOOM_connection c, const char **cp,
                               const char **addinfo);
     int ZOOM_connection_error_x(ZOOM_connection c, const char **cp,
                                 const char **addinfo, const char **dset);
   

Function ZOOM_connection_error checks for errors for the last operation(s) performed. The function returns zero if no errors occurred; non-zero otherwise indicating the error. Pointers cp and addinfo holds messages for the error and additional-info if passed as non-NULL. Function ZOOM_connection_error_x is an extended version of ZOOM_connection_error that is capable of returning name of diagnostic set in dset.

1.1. Z39.50 Protocol behavior

The calls ZOOM_connection_new and ZOOM_connection_connect establishes a TCP/IP connection and sends an Initialize Request to the target if possible. In addition, the calls waits for an Initialize Response from the target and the result is inspected (OK or rejected).

If proxy is set then the client will establish a TCP/IP connection with the peer as specified by the proxy host and the hostname as part of the connect calls will be set as part of the Initialize Request. The proxy server will then "forward" the PDU's transparently to the target behind the proxy.

For the authentication parameters, if option user is set and both options group and pass are unset, then Open style authentication is used (Version 2/3) in which case the username is usually followed by a slash, then by a password. If either group or pass is set then idPass authentication (Version 3 only) is used. If none of the options are set, no authentication parameters are set as part of the Initialize Request (obviously).

When option async is 1, it really means that all network operations are postponed (and queued) until the function ZOOM_event is invoked. When doing so it doesn't make sense to check for errors after ZOOM_connection_new is called since that operation "connecting - and init" is still incomplete and the API cannot tell the outcome (yet).

1.2. SRU/SOLR Protocol behavior

The HTTP based protocols (SRU, SRW, SOLR) doesn't feature an Inititialize Request, so the connection phase merely establishes a TCP/IP connection with the SOAP service.

Most of the ZOOM connection options do not affect SRU/SOLR and they are ignored. However, future versions of YAZ might honor implementationName and put that as part of User-Agent header for HTTP requests.

The charset is used in the Content-Type header of HTTP requests.

yaz-4.2.30/doc/odr.html0000644000175000017500000001411211741237744011554 00000000000000Chapter 8. The ODR Module

Chapter 8. The ODR Module

1. Introduction

ODR is the BER-encoding/decoding subsystem of YAZ. Care as been taken to isolate ODR from the rest of the package - specifically from the transport interface. ODR may be used in any context where basic ASN.1/BER representations are used.

If you are only interested in writing a Z39.50 implementation based on the PDUs that are already provided with YAZ, you only need to concern yourself with the section on managing ODR streams (Section 2, “Using ODR”). Only if you need to implement ASN.1 beyond that which has been provided, should you worry about the second half of the documentation (Section 3, “Programming with ODR”). If you use one of the higher-level interfaces, you can skip this section entirely.

This is important, so we'll repeat it for emphasis: You do not need to read Section 3, “Programming with ODR” to implement Z39.50 with YAZ.

If you need a part of the protocol that isn't already in YAZ, you should contact the authors before going to work on it yourself: We might already be working on it. Conversely, if you implement a useful part of the protocol before us, we'd be happy to include it in a future release.

yaz-4.2.30/doc/comstack.common.html0000644000175000017500000002321711741237744014071 000000000000003. Common Functions

3. Common Functions

3.1. Managing Endpoints

     COMSTACK cs_create(CS_TYPE type, int blocking, int protocol);
    

Creates an instance of the protocol stack - a communications endpoint. The type parameter determines the mode of communication. At present the following values are supported:

tcpip_type

TCP/IP (BER over TCP/IP or HTTP over TCP/IP)

ssl_type

Secure Socket Layer (SSL). This COMSTACK is experimental and is not fully implemented. If HTTP is used, this effectively is HTTPS.

unix_type

Unix socket (unix only). Local Transfer via file socket. See unix(7).

The cs_create function returns a null-pointer if a system error occurs. The blocking parameter should be one if you wish the association to operate in blocking mode, zero otherwise. The protocol field should be PROTO_Z3950 or PROTO_HTTP. Protocol PROTO_SR is no longer supported.

     void cs_close(COMSTACK handle);
    

Closes the connection (as elegantly as the lower layers will permit), and releases the resources pointed to by the handle parameter. The handle should not be referenced again after this call.

Note

We really need a soft disconnect, don't we?

3.2. Data Exchange

     int cs_put(COMSTACK handle, char *buf, int len);
    

Sends buf down the wire. In blocking mode, this function will return only when a full buffer has been written, or an error has occurred. In nonblocking mode, it's possible that the function will be unable to send the full buffer at once, which will be indicated by a return value of 1. The function will keep track of the number of octets already written; you should call it repeatedly with the same values of buf and len, until the buffer has been transmitted. When a full buffer has been sent, the function will return 0 for success. -1 indicates an error condition (see below).

     int cs_get(COMSTACK handle, char **buf, int *size);
    

Receives a PDU or HTTP Response from the peer. Returns the number of bytes read. In nonblocking mode, it is possible that not all of the packet can be read at once. In this case, the function returns 1. To simplify the interface, the function is responsible for managing the size of the buffer. It will be reallocated if necessary to contain large packages, and will sometimes be moved around internally by the subsystem when partial packages are read. Before calling cs_get for the fist time, the buffer can be initialized to the null pointer, and the length should also be set to 0 - cs_get will perform a malloc(2) on the buffer for you. When a full buffer has been read, the size of the package is returned (which will always be greater than 1). -1 indicates an error condition.

See also the cs_more() function below.

     int cs_more(COMSTACK handle);
    

The cs_more() function should be used in conjunction with cs_get and select(2). The cs_get() function will sometimes (notably in the TCP/IP mode) read more than a single protocol package off the network. When this happens, the extra package is stored by the subsystem. After calling cs_get(), and before waiting for more input, You should always call cs_more() to check if there's a full protocol package already read. If cs_more() returns 1, cs_get() can be used to immediately fetch the new package. For the mOSI subsystem, the function should always return 0, but if you want your stuff to be protocol independent, you should use it.

Note

The cs_more() function is required because the RFC1729-method does not provide a way of separating individual PDUs, short of partially decoding the BER. Some other implementations will carefully nibble at the packet by calling read(2) several times. This was felt to be too inefficient (or at least clumsy) - hence the call for this extra function.

     int cs_look(COMSTACK handle);
    

This function is useful when you're operating in nonblocking mode. Call it when select(2) tells you there's something happening on the line. It returns one of the following values:

CS_NONE

No event is pending. The data found on the line was not a complete package.

CS_CONNECT

A response to your connect request has been received. Call cs_rcvconnect to process the event and to finalize the connection establishment.

CS_DISCON

The other side has closed the connection (or maybe sent a disconnect request - but do we care? Maybe later). Call cs_close to close your end of the association as well.

CS_LISTEN

A connect request has been received. Call cs_listen to process the event.

CS_DATA

There's data to be found on the line. Call cs_get to get it.

Note

You should be aware that even if cs_look() tells you that there's an event event pending, the corresponding function may still return and tell you there was nothing to be found. This means that only part of a package was available for reading. The same event will show up again, when more data has arrived.

     int cs_fileno(COMSTACK h);
    

Returns the file descriptor of the association. Use this when file-level operations on the endpoint are required (select(2) operations, specifically).

yaz-4.2.30/doc/yaz-log.70000644000175000017500000002161711741237741011561 00000000000000'\" t .\" Title: yaz-log .\" Author: Index Data .\" Generator: DocBook XSL Stylesheets v1.76.1 .\" Date: 04/11/2012 .\" Manual: Conventions and miscellaneous .\" Source: YAZ 4.2.30 .\" Language: English .\" .TH "YAZ\-LOG" "7" "04/11/2012" "YAZ 4.2.30" "Conventions and miscellaneous" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" yaz-log \- Log handling in all yaz\-based programs .SH "SYNOPSIS" .HP \w'\fByaz\-XXXX\fR\ 'u \fByaz\-XXXX\fR [\fB\-v\ \fR\fB\fIloglevel,\&.\&.\&.\fR\fR] [\fB\-l\ \fR\fB\fIlogfile\fR\fR] .SH "DESCRIPTION" .PP All YAZ\-based programs use a common log subsystem, and should support common command line options for controlling it\&. This man page documents those\&. .PP .SH "OPTIONS" .PP \-l\fI logfile\fR .RS 4 Specify the file where the log is to be written\&. If none is specified, stderr is used\&. The log is appended to this file\&. If the file grows overly large, it is silently rotated: It is renamed to \fIlogfile\fR\&.1, \fIlogfile\fR\&.2, \&.\&., 9 (old such file is deleted), and a new file is opened\&. The limit defaults to 1GB, but can be set by the program\&. The rotating limit can be specified with option \-r for the YAZ frontend server (yaz\-ztest)\&. .sp Rotation can also be implicitly enabled by using a filename which gets changed for a given date, due to substitutions as given by the strftime(3) function\&. .RE .PP \-v\fI loglevel\fR .RS 4 Specify the logging level\&. The argument is a set of log level names, separated by commas (no whitespace!), optionally preceded by a \*(Aq\-\*(Aq to negate that level\&. Most programs have their own default, often containing fatal,warn,log, and some application\-specific values\&. The default list can be cleared with the word none, or individual bits can be removed by prefixing them with a dash \*(Aq\-\*(Aq\&. .RE .SH "LOG LEVELS TO CONTROL LOGGING" .PP Some of the log levels control the way the log is written\&. .PP flush causes the log to be flushed after every write\&. This can have serious implications to performance, and should not be used in production\&. On the other hand, when debugging a program crash, this can be extremely useful\&. The option debug implies flush as well\&. .PP notime prevents the writing of time stamps\&. This is intended for automatic test scripts, which should produce predictable log files that are easy to compare\&. .SH "GENERAL LOG LEVELS IN YAZ ITSELF" .PP YAZ itself uses the following log levels: .PP fatal for fatal errors, that prevent further execution of the program\&. .PP warn for warnings about things that should be corrected\&. .PP debug for debugging\&. This flag may be used temporarily when developing or debugging yaz, or a program that uses yaz\&. It is practically deprecated, you should be defining and using your own log levels (see below)\&. .PP all turns on almost all hard\-coded log levels\&. .PP loglevel logs information about the log levels used by the program\&. Every time the log level is changed, lists all bits that are on\&. Every time a module asks for its log bits, this is logged\&. This can be used for getting an idea of what log levels are available in any program that uses yaz\-log\&. Start the program with \-v none,loglevel, and do some common operations with it\&. Another way is to grep for \fByaz_log_module_level\fR in the source code, as in .sp .if n \{\ .RS 4 .\} .nf find \&. \-name \*(Aq*\&.[ch]\*(Aq \-print | xargs grep yaz_log_module_level | grep \*(Aq"\*(Aq | cut \-d\*(Aq"\*(Aq \-f2 | sort \-u .fi .if n \{\ .RE .\} .PP eventl, malloc, nmem, odr are used internally for debugging yaz\&. .PP .SH "LOG LEVELS FOR CLIENTS" .PP zoom logs the calls to the zoom API, which may be useful in debugging client applications\&. .SH "LOG LEVELS FOR SERVERS" .PP server logs the server functions on a high level, starting up, listening on a port, etc\&. .PP session logs individual sessions (connections)\&. .PP request logs a one\-liner for each request (init, search, etc)\&. .PP requestdetail logs the details of every request, before it is passed to the back\-end, and the results received from it\&. .PP Each server program (zebra, etc) is supposed to define its own log levels in addition to these\&. As they depend on the server in question, they can not be described here\&. See above how to find out about them\&. .SH "LOGGING EXAMPLES" .PP See what log levels yaz\-ztest is using: .sp .if n \{\ .RS 4 .\} .nf yaz\-ztest \-1 \-v none,loglevel 14:43:29\-23/11 [loglevel] Setting log level to 4096 = 0x00001000 14:43:29\-23/11 [loglevel] Static log bit 00000001 \*(Aqfatal\*(Aq is off 14:43:29\-23/11 [loglevel] Static log bit 00000002 \*(Aqdebug\*(Aq is off 14:43:29\-23/11 [loglevel] Static log bit 00000004 \*(Aqwarn\*(Aq is off 14:43:29\-23/11 [loglevel] Static log bit 00000008 \*(Aqlog\*(Aq is off 14:43:29\-23/11 [loglevel] Static log bit 00000080 \*(Aqmalloc\*(Aq is off 14:43:29\-23/11 [loglevel] Static log bit 00000800 \*(Aqflush\*(Aq is off 14:43:29\-23/11 [loglevel] Static log bit 00001000 \*(Aqloglevel\*(Aq is ON 14:43:29\-23/11 [loglevel] Static log bit 00002000 \*(Aqserver\*(Aq is off 14:43:29\-23/11 [loglevel] Dynamic log bit 00004000 \*(Aqsession\*(Aq is off 14:43:29\-23/11 [loglevel] Dynamic log bit 00008000 \*(Aqrequest\*(Aq is off 14:44:13\-23/11 yaz\-ztest [loglevel] returning log bit 0x4000 for \*(Aqsession\*(Aq 14:44:13\-23/11 yaz\-ztest [loglevel] returning log bit 0x2000 for \*(Aqserver\*(Aq 14:44:13\-23/11 yaz\-ztest [loglevel] returning NO log bit for \*(Aqeventl\*(Aq 14:44:20\-23/11 yaz\-ztest [loglevel] returning log bit 0x4000 for \*(Aqsession\*(Aq 14:44:20\-23/11 yaz\-ztest [loglevel] returning log bit 0x8000 for \*(Aqrequest\*(Aq 14:44:20\-23/11 yaz\-ztest [loglevel] returning NO log bit for \*(Aqrequestdetail\*(Aq 14:44:20\-23/11 yaz\-ztest [loglevel] returning NO log bit for \*(Aqodr\*(Aq 14:44:20\-23/11 yaz\-ztest [loglevel] returning NO log bit for \*(Aqztest\*(Aq .fi .if n \{\ .RE .\} .PP See the details of the requests for yaz\-ztest .sp .if n \{\ .RS 4 .\} .nf \&./yaz\-ztest \-1 \-v requestdetail 14:45:35\-23/11 yaz\-ztest [server] Adding static Z3950 listener on tcp:@:9999 14:45:35\-23/11 yaz\-ztest [server] Starting server \&./yaz\-ztest pid=32200 14:45:38\-23/11 yaz\-ztest [session] Starting session from tcp:127\&.0\&.0\&.1 (pid=32200) 14:45:38\-23/11 yaz\-ztest [requestdetail] Got initRequest 14:45:38\-23/11 yaz\-ztest [requestdetail] Id: 81 14:45:38\-23/11 yaz\-ztest [requestdetail] Name: YAZ 14:45:38\-23/11 yaz\-ztest [requestdetail] Version: 2\&.0\&.28 14:45:38\-23/11 yaz\-ztest [requestdetail] Negotiated to v3: srch prst del extendedServices namedresults scan sort 14:45:38\-23/11 yaz\-ztest [request] Init from \*(AqYAZ\*(Aq (81) (ver 2\&.0\&.28) OK 14:45:39\-23/11 yaz\-ztest [requestdetail] Got SearchRequest\&. 14:45:39\-23/11 yaz\-ztest [requestdetail] ResultSet \*(Aq1\*(Aq 14:45:39\-23/11 yaz\-ztest [requestdetail] Database \*(AqDefault\*(Aq 14:45:39\-23/11 yaz\-ztest [requestdetail] RPN query\&. Type: Bib\-1 14:45:39\-23/11 yaz\-ztest [requestdetail] term \*(Aqfoo\*(Aq (general) 14:45:39\-23/11 yaz\-ztest [requestdetail] resultCount: 7 14:45:39\-23/11 yaz\-ztest [request] Search Z: @attrset Bib\-1 foo OK:7 hits 14:45:41\-23/11 yaz\-ztest [requestdetail] Got PresentRequest\&. 14:45:41\-23/11 yaz\-ztest [requestdetail] Request to pack 1+1 1 14:45:41\-23/11 yaz\-ztest [requestdetail] pms=1048576, mrs=1048576 14:45:41\-23/11 yaz\-ztest [request] Present: [1] 1+1 OK 1 records returned .fi .if n \{\ .RE .\} .sp .SH "LOG FILENAME EXAMPLES" .PP A file with format my_YYYYMMDD\&.log is where Y, M, D is year, month, and day digits is given as follows \-l my_%Y%m%d\&.log \&. And since the filename is depending on day, rotaion will occur on midnight\&. .PP A weekly log could be specified as \-l my_%Y%U\&.log\&. .SH "FILES" .PP \fIprefix\fR/include/yaz/log\&.h \fIprefix\fR/src/log\&.c .SH "SEE ALSO" .PP \fByaz\fR(7) \fByaz-ztest\fR(8) \fByaz-client\fR(1) \fBstrftime\fR(3) yaz-4.2.30/doc/asn.external.html0000644000175000017500000001560711741237744013404 000000000000003. EXTERNAL Data

3. EXTERNAL Data

In order to achieve extensibility and adaptability to different application domains, the new version of the protocol defines many structures outside of the main ASN.1 specification, referencing them through ASN.1 EXTERNAL constructs. To simplify the construction and access to the externally referenced data, the Z39.50 ASN.1 module defines a specialized version of the EXTERNAL construct, called Z_External.It is defined thus:

typedef struct Z_External
{
    Odr_oid *direct_reference;
    int *indirect_reference;
    char *descriptor;
    enum
    {
        /* Generic types */
        Z_External_single = 0,
        Z_External_octet,
        Z_External_arbitrary,

        /* Specific types */
        Z_External_SUTRS,
        Z_External_explainRecord,
        Z_External_resourceReport1,
        Z_External_resourceReport2

    ...

    } which;
    union
    {
        /* Generic types */
        Odr_any *single_ASN1_type;
        Odr_oct *octet_aligned;
        Odr_bitmask *arbitrary;

        /* Specific types */
        Z_SUTRS *sutrs;
        Z_ExplainRecord *explainRecord;
        Z_ResourceReport1 *resourceReport1;
        Z_ResourceReport2 *resourceReport2;

        ...

    } u;
} Z_External;
   

When decoding, the Z39.50 ASN.1 module will attempt to determine which syntax describes the data by looking at the reference fields (currently only the direct-reference). For ASN.1 structured data, you need only consult the which field to determine the type of data. You can the access the data directly through the union. When constructing data for encoding, you set the union pointer to point to the data, and set the which field accordingly. Remember also to set the direct (or indirect) reference to the correct OID for the data type. For non-ASN.1 data such as MARC records, use the octet_aligned arm of the union.

Some servers return ASN.1 structured data values (eg. database records) as BER-encoded records placed in the octet-aligned branch of the EXTERNAL CHOICE. The ASN-module will not automatically decode these records. To help you decode the records in the application, the function

   Z_ext_typeent *z_ext_gettypebyref(const oid *oid);
   

Can be used to retrieve information about the known, external data types. The function return a pointer to a static area, or NULL, if no match for the given direct reference is found. The Z_ext_typeent is defined as:

typedef struct Z_ext_typeent
{
    int oid[OID_SIZE]; /* the direct-reference OID. */
    int what;          /* discriminator value for the external CHOICE */
    Odr_fun fun;       /* decoder function */
} Z_ext_typeent;
   

The what member contains the Z_External union discriminator value for the given type: For the SUTRS record syntax, the value would be Z_External_sutrs. The fun member contains a pointer to the function which encodes/decodes the given type. Again, for the SUTRS record syntax, the value of fun would be z_SUTRS (a function pointer).

If you receive an EXTERNAL which contains an octet-string value that you suspect of being an ASN.1-structured data value, you can use z_ext_gettypebyref to look for the provided direct-reference. If the return value is different from NULL, you can use the provided function to decode the BER string (see Section 2, “Using ODR” ).

If you want to send EXTERNALs containing ASN.1-structured values in the occtet-aligned branch of the CHOICE, this is possible too. However, on the encoding phase, it requires a somewhat involved juggling around of the various buffers involved.

If you need to add new, externally defined data types, you must update the struct above, in the source file prt-ext.h, as well as the encoder/decoder in the file prt-ext.c. When changing the latter, remember to update both the arm arrary and the list type_table, which drives the CHOICE biasing that is necessary to tell the different, structured types apart on decoding.

Note

Eventually, the EXTERNAL processing will most likely automatically insert the correct OIDs or indirect-refs. First, however, we need to determine how application-context management (specifically the presentation-context-list) should fit into the various modules.

yaz-4.2.30/doc/bookinfo.xml0000644000175000017500000000310011654451754012427 00000000000000 YAZ User's Guide and Reference SebastianHammer AdamDickmeiss MikeTaylor HeikkiLevanto &version; ©right-year; Index Data This document is the programmer's guide and reference to the &yaz; package version &version;. &yaz; is a compact toolkit that provides access to the Z39.50 and SRW/SRU protocols, as well as a set of higher-level tools for implementing the server and client roles, respectively. The documentation can be used on its own, or as a reference when looking at the example applications provided with the package. yaz-4.2.30/doc/yaz.xml0000644000175000017500000000243411733047144011425 00000000000000 %local; %entities; %idcommon; ]> &bookinfo; &chap-introduction; &chap-installation; &chap-zoom; &chap-server; &chap-asn; &chap-soap; &chap-tools; &chap-odr; &chap-comstack; &chap-future; Reference The material in this chapter is drawn directly from the individual manual entries. &manref; List of Object Identifiers These is a list of object identifiers that are built into YAZ. &std-oid-table; &app-license; &app-indexdata; &app-credits; yaz-4.2.30/doc/yaz-client.html0000644000175000017500000010562411741237744013060 00000000000000yaz-client

Name

yaz-client — Z39.50/SRU client for implementors

Synopsis

yaz-client [-a apdulog] [-b berdump] [-c cclfile] [-d dump] [-f cmdfile] [-k size] [-m marclog] [-p proxy-addr] [-q cqlfile] [-t dispcharset] [-u auth] [-v loglevel] [-V] [-x] [server-addr]

DESCRIPTION

yaz-client is a Z39.50/SRU client (origin) with a simple command line interface that allows you to test behavior and performance of Z39.50 targets and SRU servers.

From YAZ version 4.1.0 yaz-client may also operate as a SOLR Web Service client.

If the server-addr is specified, the client creates a connection to the Z39.50/SRU target at the address given.

When yaz-client is started it tries to read commands from one of the following files:

  • Command file if it is given by option -f.

  • .yazclientrc in current working directory.

  • .yazclientrc in the user's home directory. The value of the HOME is used to determine the home directory. Normally, HOME is only set on POSIX systems such as Linux, FreeBSD, Solaris.

OPTIONS

-a filename

If specified, logging of protocol packages will be appended file given. If filename is specified as -, the output is written to stdout.

-b filename

If specified, YAZ will dump BER data in readable notation to the file specified. If filename is specified as - the output is written to stdout.

-c filename

If specified, CCL configuration will be read from the file given.

-d dump

If specified, YAZ will dump BER data for all PDUs sent and received to individual files, named dump.DDD.raw, where DDD is 001, 002, 003, ..

-f cmdfile

Reads commands from cmdfile. When this option is used, YAZ client does not read .yazclientrc from current directory or home directory.

-k size

Sets preferred messages and maximum record size for Initialize Request in kilobytes. Default value is 1024 (1 MB).

-m filename

If specified, retrieved records will be appended to the file given.

-p proxy-addr

If specified, the client will use the proxy at the address given. YAZ client will connect to a proxy on the address and port given. The actual target will be specified as part of the InitRequest to inform the proxy about actual target.

-q filename

If specified, CQL configuration will be read from the file given.

-t displaycharset

If displaycharset is given, it specifies name of the character set of the output (on the terminal on which YAZ client is running).

-u auth

If specified, the auth string will be used for authentication.

-v level
Sets the LOG level to level. Level is a sequence of tokens separated by comma. Each token is a integer or a named LOG item - one of fatal, debug, warn, log, malloc, all, none.
-V

Prints YAZ version.

-x

Makes the YAZ client print hex dumps of packages sent and received on standard output.

COMMANDS

The YAZ client accepts the following commands.

open zurl

Opens a connection to a server. The syntax for zurl is the same as described above for connecting from the command line.

Syntax:

[(tcp|ssl|unix|http)':']host [:port][/base]

quit

Quits YAZ client

find query

Sends a Search Request using the query given. By default the query is assumed to be PQF. See command querytype for more information.

delete setname

Deletes result set with name setname on the server.

base base1 base2 ...

Sets the name(s) of the database(s) to search. One or more databases may be specified separated by blanks. This commands overrides the database given in zurl.

show [start[+number]]

Fetches records by sending a Present Request from the start position given by start a number of records given by number. If start is not given, then the client will fetch from position of the last retrieved record plus 1. If number is not given, then one record will be fetched at a time.

scan term

Scans database index for a term. The syntax resembles the syntax for find. If you want to scan for the word water you could write

    scan water
   

but if you want to scan only in, say the title field, you would write

    scan @attr 1=4 water
   
setscan set term
Scans database index for a term within a result set. This is similar to the scan command but has a result set as its first argument.
scanpos pos
Sets preferred position for scan. This value is used in next scan. By default position is 1.
scansize size
Sets number of entries to be returned by scan. Default number of entries is 20.
scanstep step
Set step-size for scan. This value is used in next scan sent to the target. By default step-size is 0.
sort sortspecs

Sorts a result set. The sort command takes a sequence of space-separated sort specifications, with each sort specification consisting of two space-separated words (so that the whole specification list is made up of an even number of words). The first word of each specification holds a field (sort criterion) and the second holds flags. If the sort criterion includes = it is assumed that the SortKey is of type sortAttributes using Bib-1: in this case the integer before = is the attribute type and the integer following = is the attribute value. If no = is in the criterion it is treated as a sortfield of type InternationalString. The flags word of each sort specification must consist of s for case sensitive or i for case insensitive, and < for ascending order or > for descending order.

sort+

Same as sort but stores the sorted result set in a new result set.

authentication openauth

Sets up a authentication string if a server requires authentication (v2 OpenStyle). The authentication string is first sent to the server when the open command is issued and the Z39.50 Initialize Request is sent, so this command must be used before open in order to be effective. A common convention for the authopen string is that the username - and password is separated by a slash, e.g. myusername/mysecret.

sru method version

Selects Web Service method and version. Must be one of POST, GET, SOAP (default) or SOLR. Version should be either 1.1 or 1.2 for SRU. Other versions are allowed - for testing purposes (version negotiation with SRU server). The version is currently not used for SOLR Web Services

list_all

This command displays status and values for many settings.

lslb n

Sets the limit for when no records should be returned together with the search result. See the Z39.50 standard on set bounds for more details.

ssub n

Sets the limit for when all records should be returned with the search result. See the Z39.50 standard on set bounds for more details.

mspn n

Sets the number of records should be returned if the number of records in the result set is between the values of lslb and ssub. See the Z39.50 standard on set bounds for more details.

status

Displays the values of lslb, ssub and mspn.

setname

Switches named result sets on and off. Default is on.

cancel

Sends a Trigger Resource Control Request to the target.

format oid

Sets the preferred transfer syntax for retrieved records. yaz-client supports all the record syntaxes that currently are registered. See Z39.50 Record Syntax Identifiers for more details. Commonly used records syntaxes include usmarc, sutrs and xml.

elements e

Sets the element set name for the records. Many targets support element sets are B (for brief) and F (for full).

close

Sends a Z39.50 Close APDU and closes connection with the peer

querytype type

Sets the query type as used by command find. The following is supported: prefix for Prefix Query Notation (Type-1 Query); ccl for CCL search (Type-2 Query), cql for CQL (Type-104 search with CQL OID), ccl2rpn for CCL to RPN conversion (Type-1 Query). cql2rpn for CQL to RPN conversion (Type-1 Query).

attributeset set

Sets attribute set OID for prefix queries (RPN, Type-1).

refid id

Sets reference ID for Z39.50 Request(s).

itemorder type no

Sends an Item Order Request using the ILL External. type is either 1 or 2 which corresponds to ILL-Profile 1 and 2 respectively. The no is the Result Set position of the record to be ordered.

update action recid doc

Sends Item Update Request. The action argument must be the action type: one of insert, replace, delete and update. The second argument, recid, is the record identifier (any string). Third argument which is optional is the record document for the request. If doc is preceded with "<", then the following characters are treated as a filename with the records to be updated. Otherwise doc is treated as a document itself. The doc may also be quited in double quotes. If doc is omitted, the last received record (as part of present response or piggybacked search response) is used for the update.

source filename

Executes list of commands from file filename, just like source on most UNIX shells. A single dot (.) can be used as an alternative.

! args

Executes command args in subshell using the system call.

push_command command

The push_command takes another command as its argument. That command is then added to the history information (so you can retrieve it later). The command itself is not executed. This command only works if you have GNU readline/history enabled.

set_apdufile filename

Sets that APDU should be logged to file filename. Another way to achieve APDU log is by using command-line option -a.

set_auto_reconnect flag

Specifies whether YAZ client automatically reconnect if target closes connection (Z39.50 only).

flag must be either on or off.

set_auto_wait flag

Specifies whether YAZ client should wait for response protocol packages after a request. By default YAZ client waits (on) for response packages immediately after a command (find, show) has been issued. If off is used, YAZ client does not attempt to receive packages automatically. These will have to be manually received when command wait_response is used.

flag must be either on or off.

set_marcdump filename

Specifies that all retrieved records should be appended to file filename. This command does the thing as option -m.

schema schemaid

Specifies schema for retrieval. Schema may be specified as an OID for Z39.50. For SRU, schema is a simple string URI.

charset negotiationcharset [displaycharset] [[marccharset]]

Specifies character set (encoding) for Z39.50 negotiation / SRU encoding and/or character set for output (terminal).

negotiationcharset is the name of the character set to be negotiated by the server. The special name - for negotiationcharset specifies no character set to be negotiated.

If displaycharset is given, it specifies name of the character set of the output (on the terminal on which YAZ client is running). To disable conversion of characters to the output encoding, the special name - (dash) can be used. If the special name auto is given, YAZ client will convert strings to the encoding of the terminal as returned by nl_langinfo call.

If marcharset is given, it specifies name of the character set of retrieved MARC records from server. See also marcharset command.

Note

Since character set negotation takes effect in the Z39.50 Initialize Request you should issue this command before command open is used.

Note

MARC records are not covered by Z39.50 character set negotiation, so that's why there is a separate character that must be known in order to do meaningful conversion(s).

negcharset charset

Specifies character set for negotiation (Z39.50). The argument is the same as second argument for command charset.

displaycharset charset

Specifies character set for output (display). The argument is the same as second argument for command charset.

marccharset charset

Specifies character set for retrieved MARC records so that YAZ client can display them in a character suitable for your display. See charset command. If auto is given, YAZ will assume that MARC21/USMARC is using MARC8/UTF8 and ISO-8859-1 for all other MARC variants. The charset argument is the same as third argument for command charset.

querycharset charset

Specifies character set for query terms for Z39.50 RPN queries and Z39.50 Scan Requests (termListAndStartPoint). This is a pure client-side conversion which converts from displayCharset to queryCharset.

set_cclfile filename

Specifies that CCL fields should be read from file file filename. This command does the thing as option -c.

set_cqlfile filename

Specifies that CQL fields should be read from file file filename. This command does the thing as option -q.

register_oid name class OID

This command allows you to register your own object identifier - so that instead of entering a long dot-notation you can use a short name instead. The name is your name for the OID, class is the class, and OID is the raw OID in dot notation. Class is one appctx, absyn, attet, transyn, diagset, recsyn, resform, accform, extserv, userinfo, elemspec, varset, schema, tagset, general. If you're in doubt use the general class.

register_tab command string

This command registers a TAB completion string for the command given.

sleep seconds

This command makes YAZ client sleep (be idle) for the number of seconds given.

wait_response [ number]

This command makes YAZ client wait for a number of response packages from target. If number is omitted, 1 is assumed.

This command is rarely used and is only useful if command set_auto_wait is set to off.

xmles OID doc

Sends XML Extended Services request using the OID and doc given.

zversion ver

This command sets Z39.50 version for negotiation. Should be used before open. By default 3 (version 3) is used.

options op1 op2..

This command sets Z39.50 options for negotiation. Should be used before open.

The following options are supported: search, present, delSet, resourceReport, triggerResourceCtrl, resourceCtrl, accessCtrl, scan, sort, extendedServices, level_1Segmentation, level_2Segmentation, concurrentOperations, namedResultSets, encapsulation, resultCount, negotiationModel, duplicationDetection, queryType104, pQESCorrection, stringSchema.

EXAMPLE

The simplest example of a Prefix Query would be something like

    f knuth
   

or

    f "donald knuth"
   

In those queries no attributes was specified. This leaves it up to the server what fields to search but most servers will search in all fields. Some servers does not support this feature though, and require that some attributes are defined. To add one attribute you could do:

    f @attr 1=4 computer
   

where we search in the title field, since the use(1) is title(4). If we want to search in the author field and in the title field, and in the title field using right truncation it could look something like this:

    f @and @attr 1=1003 knuth @attr 1=4 @attr 5=1 computer
   

Finally using a mix of Bib-1 and GILS attributes could look something like this:

    f @attrset Bib-1 @and @attr GILS 1=2008 Washington @attr 1=21 weather
   

FILES

yaz-<version>/client/client.c

$HOME/.yazclientrc

$HOME/.yazclient.history

SEE ALSO

yaz(7) bib1-attr(7)

yaz-4.2.30/doc/credits.xml0000644000175000017500000000523111654451754012265 00000000000000 Credits This appendix lists individuals that have contributed in the development of &yaz;. Some have contributed with code, while others have provided bug fixes or suggestions. If we're missing somebody, of if you, for whatever reason, don't like to be listed here, let us know. Gary Anderson Dimitrios Andreadis Morten Bøgeskov Rocco Carbone Matthew Carey Hans van Dalen Irina Dijour Larry E. Dixson Hans van den Dool Mads Bondo Dydensborg Franck Falcoz Kevin Gamiel Morten Garkier Hendriksen Morten Holmqvist Ian Ibbotson Shigeru Ishida David Johnson Oleg Kolobov Giannis Kosmas Kang-Jin Lee Pieter Van Lierop Stefan Lohrum Ronald van der Meer Thomas W. Place Peter Popovics Jacob Chr. Poulsen Ko van der Sloot Mike Taylor Rustam T. Usmanov Charles Woodfield Tom André Øverland yaz-4.2.30/doc/yaz-icu.html0000644000175000017500000001767211741237744012367 00000000000000yaz-icu

Name

yaz-icu — YAZ ICU utility

Synopsis

yaz-icu [-c config] [-p opt] [-s] [-x] [infile]

DESCRIPTION

yaz-icu is utility which demonstrates the ICU chain module of yaz. (yaz/icu.h).

The utility can be used in two ways. It may read some text using an XML configuration for configuring ICU and show text analysis. This mode is triggered by option -c which specififies the configuration to be used. The input file is read from standard input or from a file if infile is specified.

The utility may also show ICU information. This is triggered by option -p.

OPTIONS

-c config

Specifies the file containing ICU chain configuration which is XML based.

-p type

Specifies extra information to be printed about the ICU system. If type is c then ICU converters are printed. If type is l available locales are printed. If type is t available transliterators are printed.

-s

Specifies that output should include sort key as well. Note that sort key differs between ICU versions.

-x

Specifies that output should be XML based rather than "text" based.

ICU chain configuration

The ICU chain configuration speicifies one or more rules to convert text data into tokens. The configuration format is XML based.

The toplevel element must be named icu_chain. The icu_chain element has one required attribute locale which specifies the ICU locale to be used in the conversion steps.

The icu_chain element must include elements where each element specifies a conversion step. The conversion is performed in the order in which the conversion steps are specified. Each conversion element takes one attribute: rule which serves as argument to the conversion step.

The following conversion elements are available:

casemap

Converts case and rule specifies how:

l

Lowercase using ICU function u_strToLower.

u

Upper case using ICU function u_strToUpper.

t

To title using UCU function u_strToTitle.

f

Fold case using ICU function u_strFoldCase.

display

This is a meta step which specifies that a term/token is to be displayed. This term is retrieved in an application using function icu_chain_token_display (yaz/icu.h).

transform

Specifies an ICU transform rule using a transliterator Identifier. The rule attribute is the transliterator Identifier. See ICU Transforms for more information.

transliterate

Specifies a rule-based transliterator. The rule attribute is the custom transformation rule to be used. See ICU Transforms for more information.

tokenize

Breaks / tokenizes a string into components using ICU functions ubrk_open, ubrk_setText, .. . The rule is one of:

l

Line. ICU: UBRK_LINE.

s

Sentence. ICU: UBRK_SENTENCE.

w

Word. ICU: UBRK_WORD.

c

Character. ICU: UBRK_CHARACTER.

t

Title. ICU: UBRK_TITLE.

EXAMPLES

The following command analyzes text in file text using ICU chain configuration chain.xml:

    cat text | yaz-icu -c chain.xml
   

The chain.xml might look as follows:

<icu_chain locale="en">
  <transform rule="[:Control:] Any-Remove"/>
  <tokenize rule="w"/>
  <transform rule="[[:WhiteSpace:][:Punctuation:]] Remove"/>
  <transliterate rule="xy > z"/>
  <display/>
  <casemap rule="l"/>
</icu_chain>

   

SEE ALSO

yaz(7)

ICU Home

ICU Transforms

yaz-4.2.30/doc/comstack.introduction.html0000644000175000017500000000703011741237744015315 000000000000002. Introduction

2. Introduction

The COMSTACK subsystem provides a transparent interface to different types of transport stacks for the exchange of BER-encoded data and HTTP packets. At present, the RFC1729 method (BER over TCP/IP), local UNIX socket and an experimental SSL stack are supported, but others may be added in time. The philosophy of the module is to provide a simple interface by hiding unused options and facilities of the underlying libraries. This is always done at the risk of losing generality, and it may prove that the interface will need extension later on.

Note

There hasn't been interest in the XTImOSI stack for some years. Therefore, it is no longer supported.

The interface is implemented in such a fashion that only the sub-layers constructed to the transport methods that you wish to use in your application are linked in.

You will note that even though simplicity was a goal in the design, the interface is still orders of magnitudes more complex than the transport systems found in many other packages. One reason is that the interface needs to support the somewhat different requirements of the different lower-layer communications stacks; another important reason is that the interface seeks to provide a more or less industrial-strength approach to asynchronous event-handling. When no function is allowed to block, things get more complex - particularly on the server side. We urge you to have a look at the demonstration client and server provided with the package. They are meant to be easily readable and instructive, while still being at least moderately useful.

yaz-4.2.30/doc/indexdata.xml0000644000175000017500000000367411654451754012602 00000000000000 About Index Data Index Data is a consulting and software-development enterprise that specializes in library and information management systems. Our interests and expertise span a broad range of related fields, and one of our primary, long-term objectives is the development of a powerful information management system with open network interfaces and hyper-media capabilities. We make this software available free of charge, on a fairly unrestrictive license; as a service to the networking community, and to further the development of quality software for open network communication. We'll be happy to answer questions about the software, and about ourselves in general.
Index Data ApS Købmagergade 43 2. 1150 Copenhagen K Denmark Phone +45 3341 0100 Fax +45 3341 0101 Email info@indexdata.dk
The Hacker's Jargon File has the following to say about the use of the prefix "YA" in the name of a software product. Yet Another. adj. 1. Of your own work: A humorous allusion often used in titles to acknowledge that the topic is not original, though the content is. As in "Yet Another AI Group" or "Yet Another Simulated Annealing Algorithm". 2. Of others' work: Describes something of which there are already far too many.
yaz-4.2.30/doc/yaz-icu-man.xml0000644000175000017500000001706511733047144012762 00000000000000 %local; %entities; %idcommon; ]> YAZ &version; Index Data yaz-icu 1 Commands yaz-icu YAZ ICU utility yaz-icu -c config -p opt -s -x infile DESCRIPTION yaz-icu is utility which demonstrates the ICU chain module of yaz. (yaz/icu.h). The utility can be used in two ways. It may read some text using an XML configuration for configuring ICU and show text analysis. This mode is triggered by option -c which specififies the configuration to be used. The input file is read from standard input or from a file if infile is specified. The utility may also show ICU information. This is triggered by option -p. OPTIONS -c config Specifies the file containing ICU chain configuration which is XML based. -p type Specifies extra information to be printed about the ICU system. If type is c then ICU converters are printed. If type is l available locales are printed. If type is t available transliterators are printed. -s Specifies that output should include sort key as well. Note that sort key differs between ICU versions. -x Specifies that output should be XML based rather than "text" based. ICU chain configuration The ICU chain configuration speicifies one or more rules to convert text data into tokens. The configuration format is XML based. The toplevel element must be named icu_chain. The icu_chain element has one required attribute locale which specifies the ICU locale to be used in the conversion steps. The icu_chain element must include elements where each element specifies a conversion step. The conversion is performed in the order in which the conversion steps are specified. Each conversion element takes one attribute: rule which serves as argument to the conversion step. The following conversion elements are available: casemap Converts case and rule specifies how: l Lowercase using ICU function u_strToLower. u Upper case using ICU function u_strToUpper. t To title using UCU function u_strToTitle. f Fold case using ICU function u_strFoldCase. display This is a meta step which specifies that a term/token is to be displayed. This term is retrieved in an application using function icu_chain_token_display (yaz/icu.h). transform Specifies an ICU transform rule using a transliterator Identifier. The rule attribute is the transliterator Identifier. See ICU Transforms for more information. transliterate Specifies a rule-based transliterator. The rule attribute is the custom transformation rule to be used. See ICU Transforms for more information. tokenize Breaks / tokenizes a string into components using ICU functions ubrk_open, ubrk_setText, .. . The rule is one of: l Line. ICU: UBRK_LINE. s Sentence. ICU: UBRK_SENTENCE. w Word. ICU: UBRK_WORD. c Character. ICU: UBRK_CHARACTER. t Title. ICU: UBRK_TITLE. EXAMPLES The following command analyzes text in file text using ICU chain configuration chain.xml: cat text | yaz-icu -c chain.xml The chain.xml might look as follows: ]]> SEE ALSO yaz 7 ICU Home ICU Transforms yaz-4.2.30/doc/yaz-iconv-man.xml0000644000175000017500000001377411733047144013323 00000000000000 %local; %entities; %idcommon; ]> YAZ &version; Index Data yaz-iconv 1 Commands yaz-iconv YAZ Character set conversion utility yaz-iconv file DESCRIPTION yaz-iconv converts data in file in character set specified by from to output in character set as specified by to. This yaz-iconv utility similar to the iconv found on many POSIX systems (Glibc, Solaris, etc). If no file is specified, yaz-iconv reads from standard input. OPTIONS -ffrom] Specify the character set from of the input file. Should be used in conjunction with option -t. -tto] Specify the character set of of the output. Should be used in conjunction with option -f. -v Print more information about the conversion process. ENCODINGS The yaz-iconv command and the API as defined in yaz/yaz-iconv.h is a wrapper for the library system call iconv. But YAZ' iconv utility also implements conversions on its own. The table below lists characters sets (or encodings). that are supported by YAZ. Each character set is marked with either encode or decode. If an encoding is encode-enabled YAZ may convert to to the designated encoding. If an encoding is decode-enabled, YAZ may convert from the designated encoding. marc8 (encode, decode) The MARC8 encoding as defined by the Library of Congress. Most MARC21/USMARC records usees this encoding. marc8s (encode, decode) Like MARC8 but with conversion prefers non-combined characters in the Latin-1 plane over combined characters. marc8lossy (encode) Lossy encoding of MARC-8. marc8lossless (encode) Lossless encoding of MARC8. utf8 (encode, decode) The most commonly used UNICODE encoding on the Internet. iso8859-1 (encode, decode) ISO-8859-1, AKA Latin-1. iso5426 (decode) ISO 5426. Some MARC records (UNIMARC) uses this encoding. iso5428:1984 (encode, decode) ISO 5428:1984. advancegreek (encode, decode) An encoding for Greek used by some vendors (Advance). danmarc (decode) Danmarc (in danish) is an encoding based on UNICODE which is used for DanMARC2 records. EXAMPLES The following command converts from ISO-8859-1 (Latin-1) to UTF-8. yaz-iconv -f ISO-8859-1 -t UTF-8 -X <input.lst >output.lst FILES prefix/bin/yaz-iconv prefix/include/yaz/yaz-iconv.h SEE ALSO yaz(7) iconv(1) yaz-4.2.30/doc/yaz-illclient-man.xml0000644000175000017500000000657311733047144014163 00000000000000 %local; %entities; %idcommon; ]> YAZ &version; Index Data yaz-illclient 1 Commands yaz-illclient ILL client yaz-illclient name=value server-addr DESCRIPTION yaz-illclient is an client which sends an ISO ILL request to a remote server and decodes the response from it. Exactly one server address ( server-addr ) must be specified. OPTIONS -f filename] Specify filename. -v loglevel] Specify the log level -D name=value] Defines name & value pair. -o Enable OCLC authentication. -u user] Specify user. -p password] Specify password. -V Show yaz-illclient version. EXAMPLES None yet. FILES None yet. SEE ALSO yaz(7) yaz-4.2.30/doc/yaz-asncomp-man.xml0000644000175000017500000002302411733047144013632 00000000000000 %local; %entities; %idcommon; ]> YAZ &version; Index Data yaz-asncomp 1 Commands yaz-asncomp YAZ ASN.1 compiler yaz-asncomp filename DESCRIPTION yaz-asncomp is an ASN.1 compiler that reads an ASN.1 specification in filename and produces C/C++ definitions and BER encoders/decoders for it. The produced C/C++ code and header files uses the ODR module of YAZ which is a library that encodes/decodes/prints BER packages. yaz-asncomp allows you to specify name of resulting source via options. Alternatively, you can specify a DEFINISIONS file, which provides customized output to many output files - if the ASN.1 specification file consists of many modules. This utility is written in Tcl. Any version of Tcl should work. OPTIONS -v Makes the ASN.1 compiler print more verbose about the various stages of operations. -c cfile Specifies the name of the C/C++ file with encoders/decoders. -h hfile Specifies the name of header file with definitions. -p pfile Specifies the name of the a private header file with definitions. By default all definitions are put in header file (option -h). -d dfile Specifies the name of a definitions file. -I iout Specifies first part of directory in which header files are written. -i idir Specifies second part of directory in which header files are written. -m module Specifies that ASN.1 compiler should only process the module given. If this option is not specified, all modules in the ASN.1 file are processed. DEFINITIONS FILE The definitions file is really a Tcl script but follows traditional rules for Shell like configuration files. That is # denotes the beginning of a comment. Definitions are line oriented. The definitions files usually consists of a series of variable assignments of the form: set name value Available variables are: default-prefix Sets prefix for names in the produced output. The value consists of three tokens: C function prefix, C typedef prefix and preprocessor prefix respectively. prefix(module) This value sets prefix values for module module. The value has same form as default-prefix. filename(module) Specifies filename for C/header file for module module. init(module,h) Code fragment to be put in first part of public header for module module. body(module,h) Code fragment to be put in last part of public header for module module (trailer). init(module,c) Code fragment to be put in first part of C based encoder/decoder for module module. body(module,c) Code fragment to be put in last part of C based encoder/decoder for module module (trailer). map(module,name) Maps ASN.1 type in module module of name to value. membermap(module,name,member) Maps member member in SEQUENCE/CHOICE of name in module module to value. The value consists of one or two tokens. First token is name of C preprocessor part. Second token is resulting C member name. If second token is omitted the value (one token) is both preprocessor part and C struct,union. unionmap(module,name,member) Maps member member in CHOICE of name in module module to value. Value consists of to or three tokens. The first token is name of the integer in the union that is used as selector for the union itself. The second token is name of the union. The third token overrides the name of the CHOICE member; if omitted the member name is used. FILES /usr/share/yaz/z39.50/z.tcl /usr/share/yaz/z39.50/*.asn SEE ALSO yaz 7 Section "The ODR Module" in the YAZ manual. yaz-4.2.30/doc/entities.ent0000644000175000017500000000241311733047144012431 00000000000000 ODR"> COMSTACK"> ZOOM"> "> "> yaz-4.2.30/doc/yaz-iconv.html0000644000175000017500000001505211741237744012713 00000000000000yaz-iconv

Name

yaz-iconv — YAZ Character set conversion utility

Synopsis

yaz-iconv [-f from] [-t to] [-v] [file...]

DESCRIPTION

yaz-iconv converts data in file in character set specified by from to output in character set as specified by to.

This yaz-iconv utility similar to the iconv found on many POSIX systems (Glibc, Solaris, etc).

If no file is specified, yaz-iconv reads from standard input.

OPTIONS

-ffrom]

Specify the character set from of the input file. Should be used in conjunction with option -t.

-tto]

Specify the character set of of the output. Should be used in conjunction with option -f.

-v

Print more information about the conversion process.

ENCODINGS

The yaz-iconv command and the API as defined in yaz/yaz-iconv.h is a wrapper for the library system call iconv. But YAZ' iconv utility also implements conversions on its own. The table below lists characters sets (or encodings). that are supported by YAZ. Each character set is marked with either encode or decode. If an encoding is encode-enabled YAZ may convert to to the designated encoding. If an encoding is decode-enabled, YAZ may convert from the designated encoding.

marc8 (encode, decode)

The MARC8 encoding as defined by the Library of Congress. Most MARC21/USMARC records usees this encoding.

marc8s (encode, decode)

Like MARC8 but with conversion prefers non-combined characters in the Latin-1 plane over combined characters.

marc8lossy (encode)

Lossy encoding of MARC-8.

marc8lossless (encode)

Lossless encoding of MARC8.

utf8 (encode, decode)

The most commonly used UNICODE encoding on the Internet.

iso8859-1 (encode, decode)

ISO-8859-1, AKA Latin-1.

iso5426 (decode)

ISO 5426. Some MARC records (UNIMARC) uses this encoding.

iso5428:1984 (encode, decode)

ISO 5428:1984.

advancegreek (encode, decode)

An encoding for Greek used by some vendors (Advance).

danmarc (decode)

Danmarc (in danish) is an encoding based on UNICODE which is used for DanMARC2 records.

EXAMPLES

The following command converts from ISO-8859-1 (Latin-1) to UTF-8.

    yaz-iconv -f ISO-8859-1 -t UTF-8 -X <input.lst >output.lst
   

FILES

prefix/bin/yaz-iconv

prefix/include/yaz/yaz-iconv.h

SEE ALSO

yaz(7) iconv(1)

yaz-4.2.30/doc/yaz-illclient.html0000644000175000017500000000755011741237744013560 00000000000000yaz-illclient

Name

yaz-illclient — ILL client

Synopsis

yaz-illclient [-f filename] [-v loglevel] [-D name=value...] [-o] [-u user] [-p password] [-V] [server-addr]

DESCRIPTION

yaz-illclient is an client which sends an ISO ILL request to a remote server and decodes the response from it. Exactly one server address ( server-addr ) must be specified.

OPTIONS

-f filename]

Specify filename.

-v loglevel]

Specify the log level

-D name=value]

Defines name & value pair.

-o

Enable OCLC authentication.

-u user]

Specify user.

-p password]

Specify password.

-V

Show yaz-illclient version.

EXAMPLES

None yet.

FILES

None yet.

SEE ALSO

yaz(7)

yaz-4.2.30/doc/yaz-ztest.80000644000175000017500000003466211741237740012155 00000000000000'\" t .\" Title: yaz-ztest .\" Author: Index Data .\" Generator: DocBook XSL Stylesheets v1.76.1 .\" Date: 04/11/2012 .\" Manual: System management commands .\" Source: YAZ 4.2.30 .\" Language: English .\" .TH "YAZ\-ZTEST" "8" "04/11/2012" "YAZ 4.2.30" "System management commands" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" yaz-ztest \- Z39\&.50/SRU Test Server .SH "SYNOPSIS" .HP \w'\fBapplication\fR\ 'u \fBapplication\fR [\fB\-install\fR] [\fB\-installa\fR] [\fB\-remove\fR] [\fB\-a\ \fR\fB\fIfile\fR\fR] [\fB\-v\ \fR\fB\fIlevel\fR\fR] [\fB\-l\ \fR\fB\fIfile\fR\fR] [\fB\-u\ \fR\fB\fIuid\fR\fR] [\fB\-c\ \fR\fB\fIconfig\fR\fR] [\fB\-f\ \fR\fB\fIvconfig\fR\fR] [\fB\-C\ \fR\fB\fIfname\fR\fR] [\fB\-t\ \fR\fB\fIminutes\fR\fR] [\fB\-k\ \fR\fB\fIkilobytes\fR\fR] [\fB\-K\fR] [\fB\-d\ \fR\fB\fIdaemon\fR\fR] [\fB\-w\ \fR\fB\fIdir\fR\fR] [\fB\-p\ \fR\fB\fIpidfile\fR\fR] [\fB\-r\ \fR\fB\fIkilobytes\fR\fR] [\fB\-ziDST1\fR] [listener\-spec...] .SH "DESCRIPTION" .PP \fByaz\-ztest\fR is a Z39\&.50/SRU test server that uses the YAZ generic frontend server (GFS) API\&. The server acts as a real Z39\&.50/SRU server but does not use a database\&. It returns a random hit count and returns a subset of a few built\-in records\&. .PP The \fIlistener\-spec\fR consists of a transport mode followed by a colon, followed by a listener address\&. The transport mode is either tcp, unix, or ssl\&. .PP For TCP and SSL, an address has the form: .sp .if n \{\ .RS 4 .\} .nf hostname | IP\-number [ : portnumber ] .fi .if n \{\ .RE .\} .PP For UNIX local socket the address is the filename of the local socket\&. .SH "OPTIONS" .PP \-a \fIfile\fR .RS 4 Specify a file for dumping PDUs (for diagnostic purposes)\&. The special name \- (dash) sends output to stderr\&. .RE .PP \-S .RS 4 Don\*(Aqt fork or make threads on connection requests\&. This is good for debugging, but not recommended for real operation: Although the server is asynchronous and non\-blocking, it can be nice to keep a software malfunction (okay then, a crash) from affecting all current users\&. .RE .PP \-1 .RS 4 Like \-S but after one session the server exits\&. This mode is for debugging \fIonly\fR\&. .RE .PP \-T .RS 4 Operate the server in threaded mode\&. The server creates a thread for each connection rather than a fork a process\&. Only available on UNIX systems that offers POSIX threads\&. .RE .PP \-s .RS 4 Use the SR protocol (obsolete)\&. .RE .PP \-z .RS 4 Use the Z39\&.50 protocol (default)\&. This option and \-s complement each other\&. You can use both multiple times on the same command line, between listener\-specifications (see below)\&. This way, you can set up the server to listen for connections in both protocols concurrently, on different local ports\&. .RE .PP \-l \fIfile\fR .RS 4 The logfile\&. .RE .PP \-c \fIconfig\fR .RS 4 A user option that serves as a specifier for some sort of configuration, usually a filename\&. The argument to this option is transferred to member configname of the statserv_options_block\&. .RE .PP \-f \fIvconfig\fR .RS 4 This specifies an XML file that describes one or more YAZ frontend virtual servers\&. .RE .PP \-C \fIfname\fR .RS 4 Sets SSL certificate file name for server (PEM)\&. .RE .PP \-v \fIlevel\fR .RS 4 The log level\&. Use a comma\-separated list of members of the set {fatal,debug,warn,log,malloc,all,none}\&. .RE .PP \-u \fIuid\fR .RS 4 Set user ID\&. Sets the real UID of the server process to that of the given user\&. It\*(Aqs useful if you aren\*(Aqt comfortable with having the server run as root, but you need to start it as such to bind a privileged port\&. .RE .PP \-w \fIdir\fR .RS 4 The server changes to this directory during before listening on incoming connections\&. This option is useful when the server is operating from the inetd daemon (see \-i)\&. .RE .PP \-p \fIpidfile\fR .RS 4 Specifies that the server should write its Process ID to file given by \fIpidfile\fR\&. A typical location would be /var/run/yaz\-ztest\&.pid\&. .RE .PP \-i .RS 4 Use this to make the the server run from the inetd server (UNIX only)\&. .RE .PP \-D .RS 4 Use this to make the server put itself in the background and run as a daemon\&. If neither \-i nor \-D is given, the server starts in the foreground\&. .RE .PP \-install .RS 4 Use this to install the server as an NT service (Windows NT/2000/XP only)\&. Control the server by going to the Services in the Control Panel\&. .RE .PP \-installa .RS 4 Use this to install and activate the server as an NT service (Windows NT/2000/XP only)\&. Control the server by going to the Services in the Control Panel\&. .RE .PP \-remove .RS 4 Use this to remove the server from the NT services (Windows NT/2000/XP only)\&. .RE .PP \-t \fIminutes\fR .RS 4 Idle session timeout, in minutes\&. .RE .PP \-k \fIsize\fR .RS 4 Maximum record size/message size, in kilobytes\&. .RE .PP \-K .RS 4 Forces no\-keepalive for HTTP sessions\&. By default GFS will keep sessions alive for HTTP 1\&.1 sessions (as defined by the standard)\&. Using this option will force GFS to close the connection for each operation\&. .RE .PP \-r \fIsize\fR .RS 4 Maximum size of log file before rotation occurs, in kilobytes\&. Default size is 1048576 k (=1 GB)\&. .RE .PP \-d \fIdaemon\fR .RS 4 Set name of daemon to be used in hosts access file\&. See \fBhosts_access\fR(5) and \fBtcpd\fR(8)\&. .RE .PP \-m \fItime\-format\fR .RS 4 Sets the format of time\-stamps in the log\-file\&. Specify a string in the input format to strftime()\&. .RE .SH "TESTING" .PP \fByaz\-ztest\fR normally returns a random hit count between 0 and 24\&. However, if a query term includes leading digits, then the integer value of that term is used as hit count\&. This allows testers to return any number of hits\&. \fByaz\-ztest\fR includes 24 MARC records for testing\&. Hit counts exceeding 24 will make \fByaz\-ztest\fR return the same record batch over and over\&.\&. So record at position 1, 25, 49, etc \&.\&. are equivalent\&. .PP The following databases are honored by \fByaz\-ztest\fR: Default, slow and db\&.* (all databases with prefix "db")\&. Any other database will make \fByaz\-ztest\fR return diagnostic 109: "Database unavailable"\&. .PP Options for search may be included in the form or URL get arguments included as part of the Z39\&.50 database name\&. The following database options are present: search\-delay, present\-delay, fetch\-delay and seed\&. .PP The former, delay type options, specify a fake delay (sleep) that \fByaz\-ztest\fR will perform when searching, presenting, fetching records respectively\&. The value of the delay may either be a fixed floating point value which specifies the delay in seconds\&. Alternatively the value may be given as two floating point numbers separated by colon, which wil make \fByaz\-ztest\fR perform a random sleep between the first and second number\&. .PP The database parameter seed takes an integer as value\&. This will call srand with this integer to ensure that the random behavior can be re\-played\&. .PP Suppose we want searches to take between 0\&.1 and 0\&.5 seconds and a fetch to take 0\&.2 second\&. To access test database Default we\*(Aqd use: Default?search\-delay=0\&.1:0\&.5&fetch\-delay=0\&.2\&. .SH "GFS CONFIGURATION AND VIRTUAL HOSTS" .PP The Virtual hosts mechanism allows a YAZ frontend server to support multiple backends\&. A backend is selected on the basis of the TCP/IP binding (port+listening adddress) and/or the virtual host\&. .PP A backend can be configured to execute in a particular working directory\&. Or the YAZ frontend may perform CQL to RPN conversion, thus allowing traditional Z39\&.50 backends to be offered as a SRW/SRU service\&. SRW/SRU Explain information for a particular backend may also be specified\&. .PP For the HTTP protocol, the virtual host is specified in the Host header\&. For the Z39\&.50 protocol, the virtual host is specified as in the Initialize Request in the OtherInfo, OID 1\&.2\&.840\&.10003\&.10\&.1000\&.81\&.1\&. .if n \{\ .sp .\} .RS 4 .it 1 an-trap .nr an-no-space-flag 1 .nr an-break-flag 1 .br .ps +1 \fBNote\fR .ps -1 .br .PP Not all Z39\&.50 clients allows the VHOST information to be set\&. For those the selection of the backend must rely on the TCP/IP information alone (port and address)\&. .sp .5v .RE .PP The YAZ frontend server uses XML to describe the backend configurations\&. Command\-line option \-f specifies filename of the XML configuration\&. .PP The configuration uses the root element yazgfs\&. This element includes a list of listen elements, followed by one or more server elements\&. .PP The listen describes listener (transport end point), such as TCP/IP, Unix file socket or SSL server\&. Content for a listener: .PP CDATA (required) .RS 4 The CDATA for the listen element holds the listener string, such as tcp:@:210, tcp:server1:2100, etc\&. .RE .PP attribute id (optional) .RS 4 identifier for this listener\&. This may be referred to from server sections\&. .RE .if n \{\ .sp .\} .RS 4 .it 1 an-trap .nr an-no-space-flag 1 .nr an-break-flag 1 .br .ps +1 \fBNote\fR .ps -1 .br .PP We expect more information to be added for the listen section in a future version, such as CERT file for SSL servers\&. .sp .5v .RE .PP The server describes a server and the parameters for this server type\&. Content for a server: .PP attribute id (optional) .RS 4 Identifier for this server\&. Currently not used for anything, but it might be for logging purposes\&. .RE .PP attribute listenref (optional) .RS 4 Specifies listener for this server\&. If this attribute is not given, the server is accessible from all listener\&. In order for the server to be used for real, howeever, the virtual host must match (if specified in the configuration)\&. .RE .PP element config (optional) .RS 4 Specifies the server configuration\&. This is equivalent to the config specified using command line option \-c\&. .RE .PP element directory (optional) .RS 4 Specifies a working directory for this backend server\&. If specifid, the YAZ fronend changes current working directory to this directory whenever a backend of this type is started (backend handler bend_start), stopped (backend handler hand_stop) and initialized (bend_init)\&. .RE .PP element host (optional) .RS 4 Specifies the virtual host for this server\&. If this is specified a client \fImust\fR specify this host string in order to use this backend\&. .RE .PP element cql2rpn (optional) .RS 4 Specifies a filename that includes CQL to RPN conversion for this backend server\&. See ??? If given, the backend server will only "see" a Type\-1/RPN query\&. .RE .PP element ccl2rpn (optional) .RS 4 Specifies a filename that includes CCL to RPN conversion for this backend server\&. See ??? If given, the backend server will only "see" a Type\-1/RPN query\&. .RE .PP element stylesheet (optional) .RS 4 Specifies the stylesheet reference to be part of SRU HTTP responses when the client does not specify one\&. If neither this is given, nor the client specifies one, no stylesheet reference is part of the SRU HTTP response\&. .RE .PP element docpath (optional) .RS 4 Specifies a path for local file access using HTTP\&. All URLs with a leading prefix (/ exluded) that matches the value of docpath are used for file access\&. For example, if the server is to offer access in directory xsl, the docpath would be xsl and all URLs of the form http://host/exl will result in a local file access\&. .RE .PP element explain (optional) .RS 4 Specifies SRW/SRU ZeeRex content for this server\&. Copied verbatim to the client\&. As things are now, some of the Explain content seeem redundant because host information, etc\&. is also stored elsewhere\&. .RE .PP element maximumrecordsize (optional) .RS 4 Specifies maximum record size/message size, in bytes\&. This value also servers as maximum size of \fIincoming\fR packages (for Record Updates etc)\&. It\*(Aqs the same value as that given by the \-k option\&. .RE .PP element retrievalinfo (optional) .RS 4 Enables the retrieval facility supporting conversions and specifications of record formats/types\&. See ??? for more information\&. .RE .PP The XML below configures a server that accepts connections from two ports, TCP/IP port 9900 and a local UNIX file socket\&. We name the TCP/IP server public and the other server internal\&. .sp .if n \{\ .RS 4 .\} .nf tcp:@:9900 unix:/var/tmp/socket server1\&.mydomain /var/www/s1 config\&.cfg server2\&.mydomain /var/www/s2 config\&.cfg \&.\&./etc/pqf\&.properties server2\&.mydomain 9900 a /var/www/s3 config\&.cfg .fi .if n \{\ .RE .\} .PP There are three configured backend servers\&. The first two servers, "server1" and "server2", can be reached by both listener addresses \- since no listenref attribute is specified\&. In order to distinguish between the two a virtual host has been specified for each of server in the host elements\&. .PP For "server2" elements for CQL to RPN conversion is supported and explain information has been added (a short one here to keep the example small)\&. .PP The third server, "server3" can only be reached via listener "internal"\&. .SH "FILES" .PP yaz\-/ztest/yaz\-ztest\&.c .PP yaz\-/include/yaz/backend\&.h .SH "SEE ALSO" .PP \fByaz\fR(7) \fByaz-log\fR(7) yaz-4.2.30/doc/asn.preparing.html0000644000175000017500000001516311741237744013546 000000000000002. Preparing PDUs

2. Preparing PDUs

A structure representing a complex ASN.1 type doesn't in itself contain the members of that type. Instead, the structure contains pointers to the members of the type. This is necessary, in part, to allow a mechanism for specifying which of the optional structure (SEQUENCE) members are present, and which are not. It follows that you will need to somehow provide space for the individual members of the structure, and set the pointers to refer to the members.

The conversion routines don't care how you allocate and maintain your C structures - they just follow the pointers that you provide. Depending on the complexity of your application, and your personal taste, there are at least three different approaches that you may take when you allocate the structures.

You can use static or automatic local variables in the function that prepares the PDU. This is a simple approach, and it provides the most efficient form of memory management. While it works well for flat PDUs like the InitReqest, it will generally not be sufficient for say, the generation of an arbitrarily complex RPN query structure.

You can individually create the structure and its members using the malloc(2) function. If you want to ensure that the data is freed when it is no longer needed, you will have to define a function that individually releases each member of a structure before freeing the structure itself.

You can use the odr_malloc() function (see Section 2, “Using ODR” for details). When you use odr_malloc(), you can release all of the allocated data in a single operation, independent of any pointers and relations between the data. odr_malloc() is based on a "nibble-memory" scheme, in which large portions of memory are allocated, and then gradually handed out with each call to odr_malloc(). The next time you call odr_reset(), all of the memory allocated since the last call is recycled for future use (actually, it is placed on a free-list).

You can combine all of the methods described here. This will often be the most practical approach. For instance, you might use odr_malloc() to allocate an entire structure and some of its elements, while you leave other elements pointing to global or per-session default variables.

The Z39.50 ASN.1 module provides an important aid in creating new PDUs. For each of the PDU types (say, Z_InitRequest), a function is provided that allocates and initializes an instance of that PDU type for you. In the case of the InitRequest, the function is simply named zget_InitRequest(), and it sets up reasonable default value for all of the mandatory members. The optional members are generally initialized to null pointers. This last aspect is very important: it ensures that if the PDU definitions are extended after you finish your implementation (to accommodate new versions of the protocol, say), you won't get into trouble with uninitialized pointers in your structures. The functions use odr_malloc() to allocate the PDUs and its members, so you can free everything again with a single call to odr_reset(). We strongly recommend that you use the zget_* functions whenever you are preparing a PDU (in a C++ API, the zget_ functions would probably be promoted to constructors for the individual types).

The prototype for the individual PDU types generally look like this:

    Z_<type> *zget_<type>(ODR o);
   

eg.:

    Z_InitRequest *zget_InitRequest(ODR o);
   

The ODR handle should generally be your encoding stream, but it needn't be.

As well as the individual PDU functions, a function zget_APDU() is provided, which allocates a top-level Z-APDU of the type requested:

    Z_APDU *zget_APDU(ODR o, int which);
   

The which parameter is (of course) the discriminator belonging to the Z_APDU CHOICE type. All of the interface described here is provided by the Z39.50 ASN.1 module, and you access it through the proto.h header file.

yaz-4.2.30/doc/comstack.summary.html0000644000175000017500000000541311741237744014274 000000000000009. Summary and Synopsis

9. Summary and Synopsis

    #include <yaz/comstack.h>
    
    #include <yaz/tcpip.h>  /* this is for TCP/IP and SSL support */
    #include <yaz/unix.h>   /* this is for UNIX socket support */
    
    COMSTACK cs_create(CS_TYPE type, int blocking, int protocol);
     
    COMSTACK cs_createbysocket(int s, CS_TYPE type, int blocking,
                               int protocol);
    COMSTACK cs_create_host(const char *str, int blocking,
                            void **vp);
     
    int cs_bind(COMSTACK handle, int mode);
     
    int cs_connect(COMSTACK handle, void *address);
     
    int cs_rcvconnect(COMSTACK handle);
     
    int cs_listen(COMSTACK handle);

    COMSTACK cs_accept(COMSTACK handle);

    int cs_put(COMSTACK handle, char *buf, int len);

    int cs_get(COMSTACK handle, char **buf, int *size);

    int cs_more(COMSTACK handle);

    void cs_close(COMSTACK handle);

    int cs_look(COMSTACK handle);

    void *cs_straddr(COMSTACK handle, const char *str);

    const char *cs_addrstr(COMSTACK h);

   
yaz-4.2.30/doc/zoom.extendedservices.html0000644000175000017500000003036411741237744015326 000000000000007. Extended Services

7. Extended Services

ZOOM offers an interface to a subset of the Z39.50 extended services as well as a few privately defined ones:

To create an extended service operation a ZOOM_package must be created. The operation is a five step operation. The package is created, package is configured by means of options, the package is send, result is inspected (by means of options), the package is destroyed.

    ZOOM_package ZOOM_connection_package(ZOOM_connection c,
                                         ZOOM_options options);

    const char *ZOOM_package_option_get(ZOOM_package p,
                                        const char *key);
    void ZOOM_package_option_set(ZOOM_package p, const char *key,
                                 const char *val);
    void ZOOM_package_send(ZOOM_package p, const char *type);

    void ZOOM_package_destroy(ZOOM_package p);
   

The ZOOM_connection_package creates a package for the connection given using the options specified.

Functions ZOOM_package_option_get and ZOOM_package_option_set gets and sets options.

ZOOM_package_send sends the package the via connection specified in ZOOM_connection_package. The type specifies the actual extended service package type to be sent.

Table 3.5. Extended Service Common Options

OptionDescriptionDefault
package-nameExtended Service Request package name. Must be specified as part of a requestnone
user-idUser ID of Extended Service Package. Is a request optionnone
function Function of package - one of create, delete, modify. Is a request option. create
waitAction Wait action for package. Possible values: wait, waitIfPossible, dontWait or dontReturnPackage. waitIfPossible
targetReference Target Reference. This is part of the response as returned by the server. Read it after a successful operation. none

7.1. Item Order

For Item Order, type must be set to itemorder in ZOOM_package_send.

Table 3.6. Item Order Options

OptionDescriptionDefault
contact-nameILL contact namenone
contact-phoneILL contact phonenone
contact-emailILL contact emailnone
itemorder-itemPosition for item (record) requested. An integer1

7.2. Record Update

For Record Update, type must be set to update in ZOOM_package_send.

Table 3.7. Record Update Options

OptionDescriptionDefault
action The update action. One of specialUpdate, recordInsert, recordReplace, recordDelete, elementUpdate. specialUpdate (recordInsert for updateVersion=1 which does not support specialUpdate)
recordIdOpaqueOpaque Record IDnone
recordIdNumberRecord ID numbernone
recordThe record itselfnone
recordOpaqueSpecifies an opaque record which is encoded as an ASN.1 ANY type with the OID as tiven by option syntax (see below). Option recordOpaque is an alternative to record - and record option (above) is ignored if recordOpaque is set. This option is only available in YAZ 3.0.35 and later and is meant to facilitate Updates with servers from OCLC. none
syntaxThe record syntax (transfer syntax). Is a string that is a known record syntax. no syntax
databaseNameDatabase from connection objectDefault
correlationInfo.noteCorrelation Info Note (string)none
correlationInfo.idCorrelation Info ID (integer)none
elementSetNameElement Set for Recordnone
updateVersionRecord Update version which holds one of the values 1, 2 or 3. Each version has a distinct OID: 1.2.840.10003.9.5 (first version) , 1.2.840.10003.9.5.1 (second version) and 1.2.840.10003.9.5.1.1 (third and newest version). 3

7.3. Database Create

For Database Create, type must be set to create in ZOOM_package_send.

Table 3.8. Database Create Options

OptionDescriptionDefault
databaseNameDatabase from connection objectDefault

7.4. Database Drop

For Database Drop, type must be set to drop in ZOOM_package_send.

Table 3.9. Database Drop Options

OptionDescriptionDefault
databaseNameDatabase from connection objectDefault

7.5. Commit Operation

For Commit, type must be set to commit in ZOOM_package_send.

7.6. Protocol behavior

All the extended services are Z39.50-only.

Note

The database create, drop and commit services are privately defined operations. Refer to esadmin.asn in YAZ for the ASN.1 definitions.

yaz-4.2.30/doc/license.html0000644000175000017500000000732211741237744012417 00000000000000Appendix B. License

Appendix B. License

Table of Contents

1. Index Data Copyright

1. Index Data Copyright

Copyright © 1995-2012 Index Data.

All rights reserved.

Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met:

  • Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer.

  • Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution.

  • Neither the name of Index Data nor the names of its contributors may be used to endorse or promote products derived from this software without specific prior written permission.

THIS SOFTWARE IS PROVIDED BY INDEX DATA ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL INDEX DATA BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.

yaz-4.2.30/doc/reference.html0000644000175000017500000000740411741237744012734 00000000000000Reference

Reference


The material in this chapter is drawn directly from the individual manual entries.

Table of Contents

yaz-client — Z39.50/SRU client for implementors
yaz-ztest — Z39.50/SRU Test Server
yaz-config — Script to get information about YAZ.
yaz — Z39.50 toolkit.
zoomsh — ZOOM shell
yaz-asncomp — YAZ ASN.1 compiler
yaz-marcdump — MARC record dump utility
yaz-iconv — YAZ Character set conversion utility
yaz-log — Log handling in all yaz-based programs
yaz-illclient — ILL client
yaz-icu — YAZ ICU utility
yaz-url — YAZ URL fetch utility
Bib-1 Attribute Set — Bib-1 Attribute Set
yaz-json-parse — YAZ JSON parser
yaz-4.2.30/doc/tools.retrieval.html0000644000175000017500000002437211741237744014135 000000000000006. Retrieval Facility

6. Retrieval Facility

YAZ version 2.1.20 or later includes a Retrieval facility tool which allows a SRU/Z39.50 to describe itself and perform record conversions. The idea is the following:

  • An SRU/Z39.50 client sends a retrieval request which includes a combination of the following parameters: syntax (format), schema (or element set name).

  • The retrieval facility is invoked with parameters in a server/proxy. The retrieval facility matches the parameters a set of "supported" retrieval types. If there is no match, the retrieval signals an error (syntax and / or schema not supported).

  • For a successful match, the backend is invoked with the same or altered retrieval parameters (syntax, schema). If a record is received from the backend, it is converted to the frontend name / syntax.

  • The resulting record is sent back the client and tagged with the frontend syntax / schema.

The Retrieval facility is driven by an XML configuration. The configuration is neither Z39.50 ZeeRex or SRU ZeeRex. But it should be easy to generate both of them from the XML configuration. (unfortunately the two versions of ZeeRex differ substantially in this regard).

6.1. Retrieval XML format

All elements should be covered by namespace http://indexdata.com/yaz . The root element node must be retrievalinfo.

The retrievalinfo must include one or more retrieval elements. Each retrieval defines specific combination of syntax, name and identifier supported by this retrieval service.

The retrieval element may include any of the following attributes:

syntax (REQUIRED)

Defines the record syntax. Possible values is any of the names defined in YAZ' OID database or a raw OID in (n.n ... n).

name (OPTIONAL)

Defines the name of the retrieval format. This can be any string. For SRU, the value, is equivalent to schema (short-hand); for Z39.50 it's equivalent to simple element set name. For YAZ 3.0.24 and later this name may be specified as a glob expression with operators * and ?.

identifier (OPTIONAL)

Defines the URI schema name of the retrieval format. This can be any string. For SRU, the value, is equivalent to URI schema. For Z39.50, there is no equivalent.

The retrieval may include one backend element. If a backend element is given, it specifies how the records are retrieved by some backend and how the records are converted from the backend to the "frontend".

The attributes, name and syntax may be specified for the backend element. These semantics of these attributes is equivalent to those for the retrieval. However, these values are passed to the "backend".

The backend element may includes one or more conversion instructions (as children elements). The supported conversions are:

marc

The marc element specifies a conversion to - and from ISO2709 encoded MARC and MARCXML/MarcXchange. The following attributes may be specified:

inputformat (REQUIRED)

Format of input. Supported values are marc (for ISO2709); and xml for MARCXML/MarcXchange.

outputformat (REQUIRED)

Format of output. Supported values are line (MARC line format); marcxml (for MARCXML), marc (ISO2709), marcxhcange (for MarcXchange).

inputcharset (OPTIONAL)

Encoding of input. For XML input formats, this need not be given, but for ISO2709 based inputformats, this should be set to the encoding used. For MARC21 records, a common inputcharset value would be marc-8.

outputcharset (OPTIONAL)

Encoding of output. If outputformat is XML based, it is strongly recommened to use utf-8.

xslt

The xslt element specifies a conversion via XSLT. The following attributes may be specified:

stylesheet (REQUIRED)

Stylesheet file.

6.2. Retrieval Facility Examples

Example 7.19. MARC21 backend

A typical way to use the retrieval facility is to enable XML for servers that only supports ISO2709 encoded MARC21 records.

     <retrievalinfo>
       <retrieval syntax="usmarc" name="F"/>
       <retrieval syntax="usmarc" name="B"/>
       <retrieval syntax="xml" name="marcxml"
		  identifier="info:srw/schema/1/marcxml-v1.1">
         <backend syntax="usmarc" name="F">
	   <marc inputformat="marc" outputformat="marcxml"
		 inputcharset="marc-8"/>
	 </backend>
       </retrieval>
       <retrieval syntax="xml" name="dc">
         <backend syntax="usmarc" name="F">
	   <marc inputformat="marc" outputformat="marcxml"
		 inputcharset="marc-8"/>
           <xslt stylesheet="MARC21slim2DC.xsl"/>
	 </backend>
       </retrieval>
     </retrievalinfo>

     

This means that our frontend supports:

  • MARC21 F(ull) records.

  • MARC21 B(rief) records.

  • MARCXML records.

  • Dublin core records.


6.3. API

It should be easy to use the retrieval systems from applications. Refer to the headers yaz/retrieval.h and yaz/record_conv.h.

yaz-4.2.30/doc/yaz-url.html0000644000175000017500000001005611741237744012376 00000000000000yaz-url

Name

yaz-url — YAZ URL fetch utility

Synopsis

yaz-url [-H name:value] [-m method] [-O fname] [-p fname] [-u user/password] [-x proxy] [url...]

DESCRIPTION

yaz-url is utility to get web content. It is very limited in functionality compared to programs such as curl, wget.

The options must be precede the URL given on the command line to take effect.

Fetched HTTP content is written to stdout, unless option -O is given.

OPTIONS

-H name:value

Specifies HTTP header content with name and value. This option can be given multiple times (for different names, of course).

-m method

Specifies the HTTP method to be used for the next URL. Default is method "GET". However, option -p sets it to "POST".

-O fname

Sets output filename for HTTP content.

-p fname

Sets a file to be POSTed in the folloing URL.

-u user/password

Specifies a user and a password to be uesd in HTTP basic authentication in the following URL fetch. The user and password must be separated by a slash (this it is not possible to specify a user with a slash in it).

-x proxy

Specifies a proxy to be used for URL fetch.

SEE ALSO

yaz(7)

yaz-4.2.30/doc/comstack.diagnostics.html0000644000175000017500000000550711741237744015112 000000000000008. Diagnostics

8. Diagnostics

All functions return -1 if an error occurs. Typically, the functions will return 0 on success, but the data exchange functions (cs_get, cs_put, cs_more) follow special rules. Consult their descriptions.

The error code for the COMSTACK can be retrieved using C macro cs_errno which will return one of the error codes CSYSERR, CSOUTSTATE, CSNODATA, ...

    int cs_errno(COMSTACK handle);
   

You can the textual representation of the error code by using cs_errmsg - which works like strerror(3)

    const char *cs_errmsg(int n);
   

It is also possible to get straight to the textual represenataion without the error code by using cs_strerror.

    const char *cs_strerror(COMSTACK h);
   
yaz-4.2.30/doc/server.invocation.html0000644000175000017500000003203411741237744014451 000000000000006. Application Invocation

6. Application Invocation

The finished application has the following invocation syntax (by way of statserv_main()):

application [-install] [-installa] [-remove] [-a file] [-v level] [-l file] [-u uid] [-c config] [-f vconfig] [-C fname] [-t minutes] [-k kilobytes] [-K] [-d daemon] [-w dir] [-p pidfile] [-r kilobytes] [-ziDST1] [listener-spec...]

The options are:

-a file

Specify a file for dumping PDUs (for diagnostic purposes). The special name - (dash) sends output to stderr.

-S

Don't fork or make threads on connection requests. This is good for debugging, but not recommended for real operation: Although the server is asynchronous and non-blocking, it can be nice to keep a software malfunction (okay then, a crash) from affecting all current users.

-1

Like -S but after one session the server exits. This mode is for debugging only.

-T

Operate the server in threaded mode. The server creates a thread for each connection rather than a fork a process. Only available on UNIX systems that offers POSIX threads.

-s

Use the SR protocol (obsolete).

-z

Use the Z39.50 protocol (default). This option and -s complement each other. You can use both multiple times on the same command line, between listener-specifications (see below). This way, you can set up the server to listen for connections in both protocols concurrently, on different local ports.

-l file

The logfile.

-c config

A user option that serves as a specifier for some sort of configuration, usually a filename. The argument to this option is transferred to member configname of the statserv_options_block.

-f vconfig

This specifies an XML file that describes one or more YAZ frontend virtual servers.

-C fname

Sets SSL certificate file name for server (PEM).

-v level

The log level. Use a comma-separated list of members of the set {fatal,debug,warn,log,malloc,all,none}.

-u uid

Set user ID. Sets the real UID of the server process to that of the given user. It's useful if you aren't comfortable with having the server run as root, but you need to start it as such to bind a privileged port.

-w dir

The server changes to this directory during before listening on incoming connections. This option is useful when the server is operating from the inetd daemon (see -i).

-p pidfile

Specifies that the server should write its Process ID to file given by pidfile. A typical location would be /var/run/yaz-ztest.pid.

-i

Use this to make the the server run from the inetd server (UNIX only).

-D

Use this to make the server put itself in the background and run as a daemon. If neither -i nor -D is given, the server starts in the foreground.

-install

Use this to install the server as an NT service (Windows NT/2000/XP only). Control the server by going to the Services in the Control Panel.

-installa

Use this to install and activate the server as an NT service (Windows NT/2000/XP only). Control the server by going to the Services in the Control Panel.

-remove

Use this to remove the server from the NT services (Windows NT/2000/XP only).

-t minutes

Idle session timeout, in minutes.

-k size

Maximum record size/message size, in kilobytes.

-K

Forces no-keepalive for HTTP sessions. By default GFS will keep sessions alive for HTTP 1.1 sessions (as defined by the standard). Using this option will force GFS to close the connection for each operation.

-r size

Maximum size of log file before rotation occurs, in kilobytes. Default size is 1048576 k (=1 GB).

-d daemon

Set name of daemon to be used in hosts access file. See hosts_access(5) and tcpd(8).

-m time-format

Sets the format of time-stamps in the log-file. Specify a string in the input format to strftime().

A listener specification consists of a transport mode followed by a colon (:) followed by a listener address. The transport mode is either tcp, unix: or ssl.

For TCP and SSL, an address has the form

    hostname | IP-number [: portnumber]
   

The port number defaults to 210 (standard Z39.50 port).

For UNIX, the address is the filename of socket.

For TCP/IP and SSL, the special hostnames @ and @6 are mapped to the addresses INADDR_ANY (IPV4) and IN6ADDR_ANY_INIT (IPV6) respectively.

Example 4.1. Running the GFS on Unix

Assuming the server application appname is started as root, the following will make it listen on port 210. The server will change identity to nobody and write its log to /var/log/app.log.

      application -l /var/log/app.log -u nobody tcp:@:210
     

The server will accept Z39.50 requests and offer SRU service on port 210.


Example 4.2. Setting up Apache as SRU Frontend

If you use Apache as your public web server and want to offer HTTP port 80 access to the YAZ server on 210, you can use the ProxyPass directive. If you have virtual host srw.mydomain you can use the following directives in Apache's httpd.conf:

      <VirtualHost *>
       ErrorLog /home/srw/logs/error_log
       TransferLog /home/srw/logs/access_log
       ProxyPass / http://srw.mydomain:210/
      </VirtualHost>
     

The above for the Apache 1.3 series.


Example 4.3. Running a server with local access only

Servers that is only being accessed from the local host should listen on UNIX file socket rather than a Internet socket. To listen on /tmp/mysocket start the server as follows:

      application unix:/tmp/mysocket
     


yaz-4.2.30/doc/tools.xml0000644000175000017500000025041711733047144011770 00000000000000 Supporting Tools In support of the service API - primarily the ASN module, which provides the pro-grammatic interface to the Z39.50 APDUs, &yaz; contains a collection of tools that support the development of applications. Query Syntax Parsers Since the type-1 (RPN) query structure has no direct, useful string representation, every origin application needs to provide some form of mapping from a local query notation or representation to a Z_RPNQuery structure. Some programmers will prefer to construct the query manually, perhaps using odr_malloc() to simplify memory management. The &yaz; distribution includes three separate, query-generating tools that may be of use to you. Prefix Query Format Since RPN or reverse polish notation is really just a fancy way of describing a suffix notation format (operator follows operands), it would seem that the confusion is total when we now introduce a prefix notation for RPN. The reason is one of simple laziness - it's somewhat simpler to interpret a prefix format, and this utility was designed for maximum simplicity, to provide a baseline representation for use in simple test applications and scripting environments (like Tcl). The demonstration client included with YAZ uses the PQF. The PQF have been adopted by other parties developing Z39.50 software. It is often referred to as Prefix Query Notation - PQN. The PQF is defined by the pquery module in the YAZ library. There are two sets of function that have similar behavior. First set operates on a PQF parser handle, second set doesn't. First set set of functions are more flexible than the second set. Second set is obsolete and is only provided to ensure backwards compatibility. First set of functions all operate on a PQF parser handle: #include <yaz/pquery.h> YAZ_PQF_Parser yaz_pqf_create (void); void yaz_pqf_destroy (YAZ_PQF_Parser p); Z_RPNQuery *yaz_pqf_parse (YAZ_PQF_Parser p, ODR o, const char *qbuf); Z_AttributesPlusTerm *yaz_pqf_scan (YAZ_PQF_Parser p, ODR o, Odr_oid **attributeSetId, const char *qbuf); int yaz_pqf_error (YAZ_PQF_Parser p, const char **msg, size_t *off); A PQF parser is created and destructed by functions yaz_pqf_create and yaz_pqf_destroy respectively. Function yaz_pqf_parse parses query given by string qbuf. If parsing was successful, a Z39.50 RPN Query is returned which is created using ODR stream o. If parsing failed, a NULL pointer is returned. Function yaz_pqf_scan takes a scan query in qbuf. If parsing was successful, the function returns attributes plus term pointer and modifies attributeSetId to hold attribute set for the scan request - both allocated using ODR stream o. If parsing failed, yaz_pqf_scan returns a NULL pointer. Error information for bad queries can be obtained by a call to yaz_pqf_error which returns an error code and modifies *msg to point to an error description, and modifies *off to the offset within last query were parsing failed. The second set of functions are declared as follows: #include <yaz/pquery.h> Z_RPNQuery *p_query_rpn (ODR o, oid_proto proto, const char *qbuf); Z_AttributesPlusTerm *p_query_scan (ODR o, oid_proto proto, Odr_oid **attributeSetP, const char *qbuf); int p_query_attset (const char *arg); The function p_query_rpn() takes as arguments an &odr; stream (see section The ODR Module) to provide a memory source (the structure created is released on the next call to odr_reset() on the stream), a protocol identifier (one of the constants PROTO_Z3950 and PROTO_SR), an attribute set reference, and finally a null-terminated string holding the query string. If the parse went well, p_query_rpn() returns a pointer to a Z_RPNQuery structure which can be placed directly into a Z_SearchRequest. If parsing failed, due to syntax error, a NULL pointer is returned. The p_query_attset specifies which attribute set to use if the query doesn't specify one by the @attrset operator. The p_query_attset returns 0 if the argument is a valid attribute set specifier; otherwise the function returns -1. The grammar of the PQF is as follows: query ::= top-set query-struct. top-set ::= [ '@attrset' string ] query-struct ::= attr-spec | simple | complex | '@term' term-type query attr-spec ::= '@attr' [ string ] string query-struct complex ::= operator query-struct query-struct. operator ::= '@and' | '@or' | '@not' | '@prox' proximity. simple ::= result-set | term. result-set ::= '@set' string. term ::= string. proximity ::= exclusion distance ordered relation which-code unit-code. exclusion ::= '1' | '0' | 'void'. distance ::= integer. ordered ::= '1' | '0'. relation ::= integer. which-code ::= 'known' | 'private' | integer. unit-code ::= integer. term-type ::= 'general' | 'numeric' | 'string' | 'oid' | 'datetime' | 'null'. You will note that the syntax above is a fairly faithful representation of RPN, except for the Attribute, which has been moved a step away from the term, allowing you to associate one or more attributes with an entire query structure. The parser will automatically apply the given attributes to each term as required. The @attr operator is followed by an attribute specification (attr-spec above). The specification consists of an optional attribute set, an attribute type-value pair and a sub-query. The attribute type-value pair is packed in one string: an attribute type, an equals sign, and an attribute value, like this: @attr 1=1003. The type is always an integer but the value may be either an integer or a string (if it doesn't start with a digit character). A string attribute-value is encoded as a Type-1 ``complex'' attribute with the list of values containing the single string specified, and including no semantic indicators. Version 3 of the Z39.50 specification defines various encoding of terms. Use @term type string, where type is one of: general, numeric or string (for InternationalString). If no term type has been given, the general form is used. This is the only encoding allowed in both versions 2 and 3 of the Z39.50 standard. Using Proximity Operators with PQF This is an advanced topic, describing how to construct queries that make very specific requirements on the relative location of their operands. You may wish to skip this section and go straight to the example PQF queries. Most Z39.50 servers do not support proximity searching, or support only a small subset of the full functionality that can be expressed using the PQF proximity operator. Be aware that the ability to express a query in PQF is no guarantee that any given server will be able to execute it. The proximity operator @prox is a special and more restrictive version of the conjunction operator @and. Its semantics are described in section 3.7.2 (Proximity) of Z39.50 the standard itself, which can be read on-line at In PQF, the proximity operation is represented by a sequence of the form @prox exclusion distance ordered relation which-code unit-code in which the meanings of the parameters are as described in in the standard, and they can take the following values: exclusion 0 = false (i.e. the proximity condition specified by the remaining parameters must be satisfied) or 1 = true (the proximity condition specified by the remaining parameters must not be satisifed). distance An integer specifying the difference between the locations of the operands: e.g. two adjacent words would have distance=1 since their locations differ by one unit. ordered 1 = ordered (the operands must occur in the order the query specifies them) or 0 = unordered (they may appear in either order). relation Recognised values are 1 (lessThan), 2 (lessThanOrEqual), 3 (equal), 4 (greaterThanOrEqual), 5 (greaterThan) and 6 (notEqual). which-code known or k (the unit-code parameter is taken from the well-known list of alternatives described in below) or private or p (the unit-code paramater has semantics specific to an out-of-band agreement such as a profile). unit-code If the which-code parameter is known then the recognised values are 1 (character), 2 (word), 3 (sentence), 4 (paragraph), 5 (section), 6 (chapter), 7 (document), 8 (element), 9 (subelement), 10 (elementType) and 11 (byte). If which-code is private then the acceptable values are determined by the profile. (The numeric values of the relation and well-known unit-code parameters are taken straight from the ASN.1 of the proximity structure in the standard.) PQF queries PQF queries using simple terms dylan "bob dylan" PQF boolean operators @or "dylan" "zimmerman" @and @or dylan zimmerman when @and when @or dylan zimmerman PQF references to result sets @set Result-1 @and @set seta @set setb Attributes for terms @attr 1=4 computer @attr 1=4 @attr 4=1 "self portrait" @attrset exp1 @attr 1=1 CategoryList @attr gils 1=2008 Copenhagen @attr 1=/book/title computer PQF Proximity queries @prox 0 3 1 2 k 2 dylan zimmerman Here the parameters 0, 3, 1, 2, k and 2 represent exclusion, distance, ordered, relation, which-code and unit-code, in that order. So: exclusion = 0: the proximity condition must hold distance = 3: the terms must be three units apart ordered = 1: they must occur in the order they are specified relation = 2: lessThanOrEqual (to the distance of 3 units) which-code is ``known'', so the standard unit-codes are used unit-code = 2: word. So the whole proximity query means that the words dylan and zimmerman must both occur in the record, in that order, differing in position by three or fewer words (i.e. with two or fewer words between them.) The query would find ``Bob Dylan, aka. Robert Zimmerman'', but not ``Bob Dylan, born as Robert Zimmerman'' since the distance in this case is four. PQF specification of search term type @term string "a UTF-8 string, maybe?" PQF mixed queries @or @and bob dylan @set Result-1 @attr 4=1 @and @attr 1=1 "bob dylan" @attr 1=4 "slow train coming" @and @attr 2=4 @attr gils 1=2038 -114 @attr 2=2 @attr gils 1=2039 -109 The last of these examples is a spatial search: in the GILS attribute set, access point 2038 indicates West Bounding Coordinate and 2030 indicates East Bounding Coordinate, so the query is for areas extending from -114 degrees to no more than -109 degrees. CCL Not all users enjoy typing in prefix query structures and numerical attribute values, even in a minimalistic test client. In the library world, the more intuitive Common Command Language - CCL (ISO 8777) has enjoyed some popularity - especially before the widespread availability of graphical interfaces. It is still useful in applications where you for some reason or other need to provide a symbolic language for expressing boolean query structures. CCL Syntax The CCL parser obeys the following grammar for the FIND argument. The syntax is annotated by in the lines prefixed by --. CCL-Find ::= CCL-Find Op Elements | Elements. Op ::= "and" | "or" | "not" -- The above means that Elements are separated by boolean operators. Elements ::= '(' CCL-Find ')' | Set | Terms | Qualifiers Relation Terms | Qualifiers Relation '(' CCL-Find ')' | Qualifiers '=' string '-' string -- Elements is either a recursive definition, a result set reference, a -- list of terms, qualifiers followed by terms, qualifiers followed -- by a recursive definition or qualifiers in a range (lower - upper). Set ::= 'set' = string -- Reference to a result set Terms ::= Terms Prox Term | Term -- Proximity of terms. Term ::= Term string | string -- This basically means that a term may include a blank Qualifiers ::= Qualifiers ',' string | string -- Qualifiers is a list of strings separated by comma Relation ::= '=' | '>=' | '<=' | '<>' | '>' | '<' -- Relational operators. This really doesn't follow the ISO8777 -- standard. Prox ::= '%' | '!' -- Proximity operator CCL queries The following queries are all valid: dylan "bob dylan" dylan or zimmerman set=1 (dylan and bob) or set=1 Assuming that the qualifiers ti, au and date are defined we may use: ti=self portrait au=(bob dylan and slow train coming) date>1980 and (ti=((self portrait))) CCL Qualifiers Qualifiers are used to direct the search to a particular searchable index, such as title (ti) and author indexes (au). The CCL standard itself doesn't specify a particular set of qualifiers, but it does suggest a few short-hand notations. You can customize the CCL parser to support a particular set of qualifiers to reflect the current target profile. Traditionally, a qualifier would map to a particular use-attribute within the BIB-1 attribute set. It is also possible to set other attributes, such as the structure attribute. A CCL profile is a set of predefined CCL qualifiers that may be read from a file or set in the CCL API. The YAZ client reads its CCL qualifiers from a file named default.bib. There are four types of lines in a CCL profile: qualifier specification, qualifier alias, comments and directives. Qualifier specification A qualifier specification is of the form: qualifier-name [attributeset,]type=val [attributeset,]type=val ... where qualifier-name is the name of the qualifier to be used (eg. ti), type is attribute type in the attribute set (Bib-1 is used if no attribute set is given) and val is attribute value. The type can be specified as an integer or as it be specified either as a single-letter: u for use, r for relation,p for position, s for structure,t for truncation or c for completeness. The attributes for the special qualifier name term are used when no CCL qualifier is given in a query. Common Bib-1 attributes Type Description u=value Use attribute (1). Common use attributes are 1 Personal-name, 4 Title, 7 ISBN, 8 ISSN, 30 Date, 62 Subject, 1003 Author), 1016 Any. Specify value as an integer. r=value Relation attribute (2). Common values are 1 <, 2 <=, 3 =, 4 >=, 5 >, 6 <>, 100 phonetic, 101 stem, 102 relevance, 103 always matches. p=value Position attribute (3). Values: 1 first in field, 2 first in any subfield, 3 any position in field. s=value Structure attribute (4). Values: 1 phrase, 2 word, 3 key, 4 year, 5 date, 6 word list, 100 date (un), 101 name (norm), 102 name (un), 103 structure, 104 urx, 105 free-form-text, 106 document-text, 107 local-number, 108 string, 109 numeric string. t=value Truncation attribute (5). Values: 1 right, 2 left, 3 left& right, 100 none, 101 process #, 102 regular-1, 103 regular-2, 104 CCL. c=value Completeness attribute (6). Values: 1 incomplete subfield, 2 complete subfield, 3 complete field.
Refer to or the complete list of Bib-1 attributes It is also possible to specify non-numeric attribute values, which are used in combination with certain types. The special combinations are: Special attribute combos Name Description s=pw The structure is set to either word or phrase depending on the number of tokens in a term (phrase-word). s=al Each token in the term is ANDed. (and-list). This does not set the structure at all. s=ol Each token in the term is ORed. (or-list). This does not set the structure at all. r=o Allows ranges and the operators greather-than, less-than, ... equals. This sets Bib-1 relation attribute accordingly (relation ordered). A query construct is only treated as a range if dash is used and that is surrounded by white-space. So -1980 is treated as term "-1980" not <= 1980. If - 1980 is used, however, that is treated as a range. r=r Similar to r=o but assumes that terms are non-negative (not prefixed with -). Thus, a dash will always be treated as a range. The construct 1980-1990 is treated as a range with r=r but as a single term "1980-1990" with r=o. The special attribute r=r is available in YAZ 2.0.24 or later. t=l Allows term to be left-truncated. If term is of the form ?x, the resulting Type-1 term is x and truncation is left. t=r Allows term to be right-truncated. If term is of the form x?, the resulting Type-1 term is x and truncation is right. t=n If term is does not include ?, the truncation attribute is set to none (100). t=b Allows term to be both left&right truncated. If term is of the form ?x?, the resulting term is x and trunctation is set to both left&right. t=x Allows masking anywhere in a term, thus fully supporting # (mask one character) and ? (zero or more of any). If masking is used, trunction is set to 102 (regexp-1 in term) and the term is converted accordingly to a regular expression. t=z Allows masking anywhere in a term, thus fully supporting # (mask one character) and ? (zero or more of any). If masking is used, trunction is set to 104 (Z39.58 in term) and the term is converted accordingly to Z39.58 masking term - actually the same truncation as CCL itself.
CCL profile Consider the following definition: ti u=4 s=1 au u=1 s=1 term s=105 ranked r=102 date u=30 r=o ti and au both set structure attribute to phrase (s=1). ti sets the use-attribute to 4. au sets the use-attribute to 1. When no qualifiers are used in the query the structure-attribute is set to free-form-text (105) (rule for term). The date sets the relation attribute to the relation used in the CCL query and sets the use attribute to 30 (Bib-1 Date). You can combine attributes. To Search for "ranked title" you can do ti,ranked=knuth computer which will set relation=ranked, use=title, structure=phrase. Query date > 1980 is a valid query. But ti > 1980 is invalid.
Qualifier alias A qualifier alias is of the form: q q1 q2 .. which declares q to be an alias for q1, q2... such that the CCL query q=x is equivalent to q1=x or q2=x or .... Comments Lines with white space or lines that begin with character # are treated as comments. Directives Directive specifications takes the form @directive value CCL directives Name Description Default truncation Truncation character ? field Specifies how multiple fields are to be combined. There are two modes: or: multiple qualifier fields are ORed, merge: attributes for the qualifier fields are merged and assigned to one term. merge case Specificies if CCL operatores and qualifiers should be compared with case sensitivity or not. Specify 0 for case sensitive; 1 for case insensitive. 0 and Specifies token for CCL operator AND. and or Specifies token for CCL operator OR. or not Specifies token for CCL operator NOT. not set Specifies token for CCL operator SET. set
CCL API All public definitions can be found in the header file ccl.h. A profile identifier is of type CCL_bibset. A profile must be created with the call to the function ccl_qual_mk which returns a profile handle of type CCL_bibset. To read a file containing qualifier definitions the function ccl_qual_file may be convenient. This function takes an already opened FILE handle pointer as argument along with a CCL_bibset handle. To parse a simple string with a FIND query use the function struct ccl_rpn_node *ccl_find_str (CCL_bibset bibset, const char *str, int *error, int *pos); which takes the CCL profile (bibset) and query (str) as input. Upon successful completion the RPN tree is returned. If an error occur, such as a syntax error, the integer pointed to by error holds the error code and pos holds the offset inside query string in which the parsing failed. An English representation of the error may be obtained by calling the ccl_err_msg function. The error codes are listed in ccl.h. To convert the CCL RPN tree (type struct ccl_rpn_node *) to the Z_RPNQuery of YAZ the function ccl_rpn_query must be used. This function which is part of YAZ is implemented in yaz-ccl.c. After calling this function the CCL RPN tree is probably no longer needed. The ccl_rpn_delete destroys the CCL RPN tree. A CCL profile may be destroyed by calling the ccl_qual_rm function. The token names for the CCL operators may be changed by setting the globals (all type char *) ccl_token_and, ccl_token_or, ccl_token_not and ccl_token_set. An operator may have aliases, i.e. there may be more than one name for the operator. To do this, separate each alias with a space character.
CQL CQL - Common Query Language - was defined for the SRU protocol. In many ways CQL has a similar syntax to CCL. The objective of CQL is different. Where CCL aims to be an end-user language, CQL is the protocol query language for SRU. If you are new to CQL, read the Gentle Introduction. The CQL parser in &yaz; provides the following: It parses and validates a CQL query. It generates a C structure that allows you to convert a CQL query to some other query language, such as SQL. The parser converts a valid CQL query to PQF, thus providing a way to use CQL for both SRU servers and Z39.50 targets at the same time. The parser converts CQL to XCQL. XCQL is an XML representation of CQL. XCQL is part of the SRU specification. However, since SRU supports CQL only, we don't expect XCQL to be widely used. Furthermore, CQL has the advantage over XCQL that it is easy to read. CQL parsing A CQL parser is represented by the CQL_parser handle. Its contents should be considered &yaz; internal (private). #include <yaz/cql.h> typedef struct cql_parser *CQL_parser; CQL_parser cql_parser_create(void); void cql_parser_destroy(CQL_parser cp); A parser is created by cql_parser_create and is destroyed by cql_parser_destroy. To parse a CQL query string, the following function is provided: int cql_parser_string(CQL_parser cp, const char *str); A CQL query is parsed by the cql_parser_string which takes a query str. If the query was valid (no syntax errors), then zero is returned; otherwise -1 is returned to indicate a syntax error. int cql_parser_stream(CQL_parser cp, int (*getbyte)(void *client_data), void (*ungetbyte)(int b, void *client_data), void *client_data); int cql_parser_stdio(CQL_parser cp, FILE *f); The functions cql_parser_stream and cql_parser_stdio parses a CQL query - just like cql_parser_string. The only difference is that the CQL query can be fed to the parser in different ways. The cql_parser_stream uses a generic byte stream as input. The cql_parser_stdio uses a FILE handle which is opened for reading. CQL tree The the query string is valid, the CQL parser generates a tree representing the structure of the CQL query. struct cql_node *cql_parser_result(CQL_parser cp); cql_parser_result returns the a pointer to the root node of the resulting tree. Each node in a CQL tree is represented by a struct cql_node. It is defined as follows: #define CQL_NODE_ST 1 #define CQL_NODE_BOOL 2 struct cql_node { int which; union { struct { char *index; char *index_uri; char *term; char *relation; char *relation_uri; struct cql_node *modifiers; } st; struct { char *value; struct cql_node *left; struct cql_node *right; struct cql_node *modifiers; } boolean; } u; }; There are two node types: search term (ST) and boolean (BOOL). A modifier is treated as a search term too. The search term node has five members: index: index for search term. If an index is unspecified for a search term, index will be NULL. index_uri: index URi for search term or NULL if none could be resolved for the index. term: the search term itself. relation: relation for search term. relation_uri: relation URI for search term. modifiers: relation modifiers for search term. The modifiers list itself of cql_nodes each of type ST. The boolean node represents both and, or, not as well as proximity. left and right: left - and right operand respectively. modifiers: proximity arguments. CQL to PQF conversion Conversion to PQF (and Z39.50 RPN) is tricky by the fact that the resulting RPN depends on the Z39.50 target capabilities (combinations of supported attributes). In addition, the CQL and SRU operates on index prefixes (URI or strings), whereas the RPN uses Object Identifiers for attribute sets. The CQL library of &yaz; defines a cql_transform_t type. It represents a particular mapping between CQL and RPN. This handle is created and destroyed by the functions: cql_transform_t cql_transform_open_FILE (FILE *f); cql_transform_t cql_transform_open_fname(const char *fname); void cql_transform_close(cql_transform_t ct); The first two functions create a tranformation handle from either an already open FILE or from a filename respectively. The handle is destroyed by cql_transform_close in which case no further reference of the handle is allowed. When a cql_transform_t handle has been created you can convert to RPN. int cql_transform_buf(cql_transform_t ct, struct cql_node *cn, char *out, int max); This function converts the CQL tree cn using handle ct. For the resulting PQF, you supply a buffer out which must be able to hold at at least max characters. If conversion failed, cql_transform_buf returns a non-zero SRU error code; otherwise zero is returned (conversion successful). The meanings of the numeric error codes are listed in the SRU specifications at If conversion fails, more information can be obtained by calling int cql_transform_error(cql_transform_t ct, char **addinfop); This function returns the most recently returned numeric error-code and sets the string-pointer at *addinfop to point to a string containing additional information about the error that occurred: for example, if the error code is 15 (``Illegal or unsupported context set''), the additional information is the name of the requested context set that was not recognised. The SRU error-codes may be translated into brief human-readable error messages using const char *cql_strerror(int code); If you wish to be able to produce a PQF result in a different way, there are two alternatives. void cql_transform_pr(cql_transform_t ct, struct cql_node *cn, void (*pr)(const char *buf, void *client_data), void *client_data); int cql_transform_FILE(cql_transform_t ct, struct cql_node *cn, FILE *f); The former function produces output to a user-defined output stream. The latter writes the result to an already open FILE. Specification of CQL to RPN mappings The file supplied to functions cql_transform_open_FILE, cql_transform_open_fname follows a structure found in many Unix utilities. It consists of mapping specifications - one per line. Lines starting with # are ignored (comments). Each line is of the form CQL pattern = RPN equivalent An RPN pattern is a simple attribute list. Each attribute pair takes the form: [set] type=value The attribute set is optional. The type is the attribute type, value the attribute value. The character * (asterisk) has special meaning when used in the RPN pattern. Each occurrence of * is substituted with the CQL matching name (index, relation, qualifier etc). This facility can be used to copy a CQL name verbatim to the RPN result. The following CQL patterns are recognized: index.set.name This pattern is invoked when a CQL index, such as dc.title is converted. set and name are the context set and index name respectively. Typically, the RPN specifies an equivalent use attribute. For terms not bound by an index the pattern index.cql.serverChoice is used. Here, the prefix cql is defined as http://www.loc.gov/zing/cql/cql-indexes/v1.0/. If this pattern is not defined, the mapping will fail. The pattern, index.set.* is used when no other index pattern is matched. qualifier.set.name (DEPRECATED) For backwards compatibility, this is recognised as a synonym of index.set.name relation.relation This pattern specifies how a CQL relation is mapped to RPN. pattern is name of relation operator. Since = is used as separator between CQL pattern and RPN, CQL relations including = cannot be used directly. To avoid a conflict, the names ge, eq, le, must be used for CQL operators, greater-than-or-equal, equal, less-than-or-equal respectively. The RPN pattern is supposed to include a relation attribute. For terms not bound by a relation, the pattern relation.scr is used. If the pattern is not defined, the mapping will fail. The special pattern, relation.* is used when no other relation pattern is matched. relationModifier.mod This pattern specifies how a CQL relation modifier is mapped to RPN. The RPN pattern is usually a relation attribute. structure.type This pattern specifies how a CQL structure is mapped to RPN. Note that this CQL pattern is somewhat to similar to CQL pattern relation. The type is a CQL relation. The pattern, structure.* is used when no other structure pattern is matched. Usually, the RPN equivalent specifies a structure attribute. position.type This pattern specifies how the anchor (position) of CQL is mapped to RPN. The type is one of first, any, last, firstAndLast. The pattern, position.* is used when no other position pattern is matched. set.prefix This specification defines a CQL context set for a given prefix. The value on the right hand side is the URI for the set - not RPN. All prefixes used in index patterns must be defined this way. set This specification defines a default CQL context set for index names. The value on the right hand side is the URI for the set. CQL to RPN mapping file This simple file defines two context sets, three indexes and three relations, a position pattern and a default structure. With the mappings above, the CQL query computer is converted to the PQF: @attr 1=1016 @attr 2=3 @attr 4=1 @attr 3=3 @attr 6=1 "computer" by rules index.cql.serverChoice, relation.scr, structure.*, position.any. CQL query computer^ is rejected, since position.right is undefined. CQL query >my = "http://www.loc.gov/zing/cql/dc-indexes/v1.0/" my.title = x is converted to @attr 1=4 @attr 2=3 @attr 4=1 @attr 3=3 @attr 6=1 "x" CQL to RPN string attributes In this example we allow any index to be passed to RPN as a use attribute. The http://bogus/rpn context set is also the default so we can make queries such as title = a which is converted to @attr 2=3 @attr 4=1 @attr 3=3 @attr 1=title "a" CQL to RPN using Bath Profile The file etc/pqf.properties has mappings from the Bath Profile and Dublin Core to RPN. If YAZ is installed as a package it's usually located in /usr/share/yaz/etc and part of the development package, such as libyaz-dev. CQL to XCQL conversion Conversion from CQL to XCQL is trivial and does not require a mapping to be defined. There three functions to choose from depending on the way you wish to store the resulting output (XML buffer containing XCQL). int cql_to_xml_buf(struct cql_node *cn, char *out, int max); void cql_to_xml(struct cql_node *cn, void (*pr)(const char *buf, void *client_data), void *client_data); void cql_to_xml_stdio(struct cql_node *cn, FILE *f); Function cql_to_xml_buf converts to XCQL and stores result in a user supplied buffer of a given max size. cql_to_xml writes the result in a user defined output stream. cql_to_xml_stdio writes to a a file.
Object Identifiers The basic YAZ representation of an OID is an array of integers, terminated with the value -1. This integer is of type Odr_oid. Fundamental OID operations and the type Odr_oid are defined in yaz/oid_util.h. An OID can either be declared as a automatic variable or it can allocated using the memory utilities or ODR/NMEM. It's guaranteed that an OID can fit in OID_SIZE integers. Create OID on stack We can create an OID for the Bib-1 attribute set with: Odr_oid bib1[OID_SIZE]; bib1[0] = 1; bib1[1] = 2; bib1[2] = 840; bib1[3] = 10003; bib1[4] = 3; bib1[5] = 1; bib1[6] = -1; And OID may also be filled from a string-based representation using dots (.). This is achieved by function int oid_dotstring_to_oid(const char *name, Odr_oid *oid); This functions returns 0 if name could be converted; -1 otherwise. Using oid_oiddotstring_to_oid We can fill the Bib-1 attribute set OID easier with: Odr_oid bib1[OID_SIZE]; oid_oiddotstring_to_oid("1.2.840.10003.3.1", bib1); We can also allocate an OID dynamically on a ODR stream with: Odr_oid *odr_getoidbystr(ODR o, const char *str); This creates an OID from string-based representation using dots. This function take an &odr; stream as parameter. This stream is used to allocate memory for the data elements, which is released on a subsequent call to odr_reset() on that stream. Using odr_getoidbystr We can create a OID for the Bib-1 attribute set with: Odr_oid *bib1 = odr_getoidbystr(odr, "1.2.840.10003.3.1"); The function char *oid_oid_to_dotstring(const Odr_oid *oid, char *oidbuf) does the reverse of oid_oiddotstring_to_oid. It converts an OID to the string-based representation using dots. The supplied char buffer oidbuf holds the resulting string and must be at least OID_STR_MAX in size. OIDs can be copied with oid_oidcpy which takes two OID lists as arguments. Alternativly, an OID copy can be allocated on a ODR stream with: Odr_oid *odr_oiddup(ODR odr, const Odr_oid *o); OIDs can be compared with oid_oidcmp which returns zero if the two OIDs provided are identical; non-zero otherwise. OID database From YAZ version 3 and later, the oident system has been replaced by an OID database. OID database is a misnomer .. the old odient system was also a database. The OID database is really just a map between named Object Identifiers (string) and their OID raw equivalents. Most operations either convert from string to OID or other way around. Unfortunately, whenever we supply a string we must also specify the OID class. The class is necessary because some strings correspond to multiple OIDs. An example of such a string is Bib-1 which may either be an attribute-set or a diagnostic-set. Applications using the YAZ database should include yaz/oid_db.h. A YAZ database handle is of type yaz_oid_db_t. Actually that's a pointer. You need not think deal with that. YAZ has a built-in database which can be considered "constant" for most purposes. We can get hold that by using function yaz_oid_std. All functions with prefix yaz_string_to_oid converts from class + string to OID. We have variants of this operation due to different memory allocation strategies. All functions with prefix yaz_oid_to_string converts from OID to string + class. Create OID with YAZ DB We can create an OID for the Bib-1 attribute set on the ODR stream odr with: Odr_oid *bib1 = yaz_string_to_oid_odr(yaz_oid_std(), CLASS_ATTSET, "Bib-1", odr); This is more complex than using odr_getoidbystr. You would only use yaz_string_to_oid_odr when the string (here Bib-1) is supplied by a user or configuration. Standard OIDs All the object identifers in the standard OID database as returned by yaz_oid_std can referenced directly in a program as a constant OID. Each constant OID is prefixed with yaz_oid_ - followed by OID class (lowercase) - then by OID name (normalized and lowercase). See for list of all object identifiers built into YAZ. These are declared in yaz/oid_std.h but are included by yaz/oid_db.h as well. Use a built-in OID We can allocate our own OID filled with the constant OID for Bib-1 with: Odr_oid *bib1 = odr_oiddup(o, yaz_oid_attset_bib1); Nibble Memory Sometimes when you need to allocate and construct a large, interconnected complex of structures, it can be a bit of a pain to release the associated memory again. For the structures describing the Z39.50 PDUs and related structures, it is convenient to use the memory-management system of the &odr; subsystem (see ). However, in some circumstances where you might otherwise benefit from using a simple nibble memory management system, it may be impractical to use odr_malloc() and odr_reset(). For this purpose, the memory manager which also supports the &odr; streams is made available in the NMEM module. The external interface to this module is given in the nmem.h file. The following prototypes are given: NMEM nmem_create(void); void nmem_destroy(NMEM n); void *nmem_malloc(NMEM n, size_t size); void nmem_reset(NMEM n); size_t nmem_total(NMEM n); void nmem_init(void); void nmem_exit(void); The nmem_create() function returns a pointer to a memory control handle, which can be released again by nmem_destroy() when no longer needed. The function nmem_malloc() allocates a block of memory of the requested size. A call to nmem_reset() or nmem_destroy() will release all memory allocated on the handle since it was created (or since the last call to nmem_reset(). The function nmem_total() returns the number of bytes currently allocated on the handle. The nibble memory pool is shared amongst threads. POSIX mutex'es and WIN32 Critical sections are introduced to keep the module thread safe. Function nmem_init() initializes the nibble memory library and it is called automatically the first time the YAZ.DLL is loaded. &yaz; uses function DllMain to achieve this. You should not call nmem_init or nmem_exit unless you're absolute sure what you're doing. Note that in previous &yaz; versions you'd have to call nmem_init yourself. Log &yaz; has evolved a fairly complex log system which should be useful both for debugging &yaz; itself, debugging applications that use &yaz;, and for production use of those applications. The log functions are declared in header yaz/log.h and implemented in src/log.c. Due to name clash with syslog and some math utilities the logging interface has been modified as of YAZ 2.0.29. The obsolete interface is still available if in header file yaz/log.h. The key points of the interface are: void yaz_log(int level, const char *fmt, ...) void yaz_log_init(int level, const char *prefix, const char *name); void yaz_log_init_file(const char *fname); void yaz_log_init_level(int level); void yaz_log_init_prefix(const char *prefix); void yaz_log_time_format(const char *fmt); void yaz_log_init_max_size(int mx); int yaz_log_mask_str(const char *str); int yaz_log_module_level(const char *name); The reason for the whole log module is the yaz_log function. It takes a bitmask indicating the log levels, a printf-like format string, and a variable number of arguments to log. The log level is a bit mask, that says on which level(s) the log entry should be made, and optionally set some behaviour of the logging. In the most simple cases, it can be one of YLOG_FATAL, YLOG_DEBUG, YLOG_WARN, YLOG_LOG. Those can be combined with bits that modify the way the log entry is written:YLOG_ERRNO, YLOG_NOTIME, YLOG_FLUSH. Most of the rest of the bits are deprecated, and should not be used. Use the dynamic log levels instead. Applications that use &yaz;, should not use the LOG_LOG for ordinary messages, but should make use of the dynamic loglevel system. This consists of two parts, defining the loglevel and checking it. To define the log levels, the (main) program should pass a string to yaz_log_mask_str to define which log levels are to be logged. This string should be a comma-separated list of log level names, and can contain both hard-coded names and dynamic ones. The log level calculation starts with YLOG_DEFAULT_LEVEL and adds a bit for each word it meets, unless the word starts with a '-', in which case it clears the bit. If the string 'none' is found, all bits are cleared. Typically this string comes from the command-line, often identified by -v. The yaz_log_mask_str returns a log level that should be passed to yaz_log_init_level for it to take effect. Each module should check what log bits it should be used, by calling yaz_log_module_level with a suitable name for the module. The name is cleared from a preceding path and an extension, if any, so it is quite possible to use __FILE__ for it. If the name has been passed to yaz_log_mask_str, the routine returns a non-zero bitmask, which should then be used in consequent calls to yaz_log. (It can also be tested, so as to avoid unnecessary calls to yaz_log, in time-critical places, or when the log entry would take time to construct.) Yaz uses the following dynamic log levels: server, session, request, requestdetail for the server functionality. zoom for the zoom client api. ztest for the simple test server. malloc, nmem, odr, eventl for internal debugging of yaz itself. Of course, any program using yaz is welcome to define as many new ones, as it needs. By default the log is written to stderr, but this can be changed by a call to yaz_log_init_file or yaz_log_init. If the log is directed to a file, the file size is checked at every write, and if it exceeds the limit given in yaz_log_init_max_size, the log is rotated. The rotation keeps one old version (with a .1 appended to the name). The size defaults to 1GB. Setting it to zero will disable the rotation feature. A typical yaz-log looks like this 13:23:14-23/11 yaz-ztest(1) [session] Starting session from tcp:127.0.0.1 (pid=30968) 13:23:14-23/11 yaz-ztest(1) [request] Init from 'YAZ' (81) (ver 2.0.28) OK 13:23:17-23/11 yaz-ztest(1) [request] Search Z: @attrset Bib-1 foo OK:7 hits 13:23:22-23/11 yaz-ztest(1) [request] Present: [1] 2+2 OK 2 records returned 13:24:13-23/11 yaz-ztest(1) [request] Close OK The log entries start with a time stamp. This can be omitted by setting the YLOG_NOTIME bit in the loglevel. This way automatic tests can be hoped to produce identical log files, that are easy to diff. The format of the time stamp can be set with yaz_log_time_format, which takes a format string just like strftime. Next in a log line comes the prefix, often the name of the program. For yaz-based servers, it can also contain the session number. Then comes one or more logbits in square brackets, depending on the logging level set by yaz_log_init_level and the loglevel passed to yaz_log_init_level. Finally comes the format string and additional values passed to yaz_log The log level YLOG_LOGLVL, enabled by the string loglevel, will log all the log-level affecting operations. This can come in handy if you need to know what other log levels would be useful. Grep the logfile for [loglevel]. The log system is almost independent of the rest of &yaz;, the only important dependence is of nmem, and that only for using the semaphore definition there. The dynamic log levels and log rotation were introduced in &yaz; 2.0.28. At the same time, the log bit names were changed from LOG_something to YLOG_something, to avoid collision with syslog.h. MARC YAZ provides a fast utility for working with MARC records. Early versions of the MARC utility only allowed decoding of ISO2709. Today the utility may both encode - and decode to a varity of formats. /* create handler */ yaz_marc_t yaz_marc_create(void); /* destroy */ void yaz_marc_destroy(yaz_marc_t mt); /* set XML mode YAZ_MARC_LINE, YAZ_MARC_SIMPLEXML, ... */ void yaz_marc_xml(yaz_marc_t mt, int xmlmode); #define YAZ_MARC_LINE 0 #define YAZ_MARC_SIMPLEXML 1 #define YAZ_MARC_OAIMARC 2 #define YAZ_MARC_MARCXML 3 #define YAZ_MARC_ISO2709 4 #define YAZ_MARC_XCHANGE 5 #define YAZ_MARC_CHECK 6 #define YAZ_MARC_TURBOMARC 7 /* supply iconv handle for character set conversion .. */ void yaz_marc_iconv(yaz_marc_t mt, yaz_iconv_t cd); /* set debug level, 0=none, 1=more, 2=even more, .. */ void yaz_marc_debug(yaz_marc_t mt, int level); /* decode MARC in buf of size bsize. Returns >0 on success; <=0 on failure. On success, result in *result with size *rsize. */ int yaz_marc_decode_buf(yaz_marc_t mt, const char *buf, int bsize, const char **result, size_t *rsize); /* decode MARC in buf of size bsize. Returns >0 on success; <=0 on failure. On success, result in WRBUF */ int yaz_marc_decode_wrbuf(yaz_marc_t mt, const char *buf, int bsize, WRBUF wrbuf); ]]> The synopsis is just a basic subset of all functionality. Refer to the actual header file marcdisp.h for details. A MARC conversion handle must be created by using yaz_marc_create and destroyed by calling yaz_marc_destroy. All other function operate on a yaz_marc_t handle. The output is specified by a call to yaz_marc_xml. The xmlmode must be one of YAZ_MARC_LINE A simple line-by-line format suitable for display but not recommend for further (machine) processing. YAZ_MARC_MARCXML MARCXML. YAZ_MARC_ISO2709 ISO2709 (sometimes just referred to as "MARC"). YAZ_MARC_XCHANGE MarcXchange. YAZ_MARC_CHECK Pseudo format for validation only. Does not generate any real output except diagnostics. YAZ_MARC_TURBOMARC XML format with same semantics as MARCXML but more compact and geared towards fast processing with XSLT. Refer to for more information. The actual conversion functions are yaz_marc_decode_buf and yaz_marc_decode_wrbuf which decodes and encodes a MARC record. The former function operates on simple buffers, the stores the resulting record in a WRBUF handle (WRBUF is a simple string type). Display of MARC record The following program snippet illustrates how the MARC API may be used to convert a MARC record to the line-by-line format: TurboMARC TurboMARC is yet another XML encoding of a MARC record. The format was designed for fast processing with XSLT. Applications like Pazpar2 uses XSLT to convert an XML encoded MARC record to an internal representation. This conversion mostly check the tag of a MARC field to determine the basic rules in the conversion. This check is costly when that is tag is encoded as an attribute in MARCXML. By having the tag value as the element instead, makes processing many times faster (at least for Libxslt). TurboMARC is encoded as follows: Record elements is part of namespace "http://www.indexdata.com/turbomarc". A record is enclosed in element r. A collection of records is enclosed in element collection. The leader is encoded as element l with the leader content as its (text) value. A control field is encoded as element c concatenated with the tag value of the control field if the tag value matches the regular expression [a-zA-Z0-9]*. If the tag value do not match the regular expression [a-zA-Z0-9]* the control field is encoded as element c and attribute code will hold the tag value. This rule ensure that in the rare cases where a tag value might result in a non-wellformed XML YAZ encode it as a coded attribute (as in MARCXML). The control field content is the the text value of this element. Indicators are encoded as attribute names i1, i2, etc.. and corresponding values for each indicator. A data field is encoded as element d concatenated with the tag value of the data field or using the attribute code as described in the rules for control fields. The children of the data field element is subfield elements. Each subfield element is encoded as s concatenated with the sub field code. The text of the subfield element is the contents of the subfield. Indicators are encoded as attributes for the data field element similar to the encoding for control fields. Retrieval Facility YAZ version 2.1.20 or later includes a Retrieval facility tool which allows a SRU/Z39.50 to describe itself and perform record conversions. The idea is the following: An SRU/Z39.50 client sends a retrieval request which includes a combination of the following parameters: syntax (format), schema (or element set name). The retrieval facility is invoked with parameters in a server/proxy. The retrieval facility matches the parameters a set of "supported" retrieval types. If there is no match, the retrieval signals an error (syntax and / or schema not supported). For a successful match, the backend is invoked with the same or altered retrieval parameters (syntax, schema). If a record is received from the backend, it is converted to the frontend name / syntax. The resulting record is sent back the client and tagged with the frontend syntax / schema. The Retrieval facility is driven by an XML configuration. The configuration is neither Z39.50 ZeeRex or SRU ZeeRex. But it should be easy to generate both of them from the XML configuration. (unfortunately the two versions of ZeeRex differ substantially in this regard). Retrieval XML format All elements should be covered by namespace http://indexdata.com/yaz . The root element node must be retrievalinfo. The retrievalinfo must include one or more retrieval elements. Each retrieval defines specific combination of syntax, name and identifier supported by this retrieval service. The retrieval element may include any of the following attributes: syntax (REQUIRED) Defines the record syntax. Possible values is any of the names defined in YAZ' OID database or a raw OID in (n.n ... n). name (OPTIONAL) Defines the name of the retrieval format. This can be any string. For SRU, the value, is equivalent to schema (short-hand); for Z39.50 it's equivalent to simple element set name. For YAZ 3.0.24 and later this name may be specified as a glob expression with operators * and ?. identifier (OPTIONAL) Defines the URI schema name of the retrieval format. This can be any string. For SRU, the value, is equivalent to URI schema. For Z39.50, there is no equivalent. The retrieval may include one backend element. If a backend element is given, it specifies how the records are retrieved by some backend and how the records are converted from the backend to the "frontend". The attributes, name and syntax may be specified for the backend element. These semantics of these attributes is equivalent to those for the retrieval. However, these values are passed to the "backend". The backend element may includes one or more conversion instructions (as children elements). The supported conversions are: marc The marc element specifies a conversion to - and from ISO2709 encoded MARC and &acro.marcxml;/MarcXchange. The following attributes may be specified: inputformat (REQUIRED) Format of input. Supported values are marc (for ISO2709); and xml for MARCXML/MarcXchange. outputformat (REQUIRED) Format of output. Supported values are line (MARC line format); marcxml (for MARCXML), marc (ISO2709), marcxhcange (for MarcXchange). inputcharset (OPTIONAL) Encoding of input. For XML input formats, this need not be given, but for ISO2709 based inputformats, this should be set to the encoding used. For MARC21 records, a common inputcharset value would be marc-8. outputcharset (OPTIONAL) Encoding of output. If outputformat is XML based, it is strongly recommened to use utf-8. xslt The xslt element specifies a conversion via &acro.xslt;. The following attributes may be specified: stylesheet (REQUIRED) Stylesheet file. Retrieval Facility Examples MARC21 backend A typical way to use the retrieval facility is to enable XML for servers that only supports ISO2709 encoded MARC21 records. ]]> This means that our frontend supports: MARC21 F(ull) records. MARC21 B(rief) records. MARCXML records. Dublin core records. API It should be easy to use the retrieval systems from applications. Refer to the headers yaz/retrieval.h and yaz/record_conv.h.
yaz-4.2.30/doc/credits.html0000644000175000017500000000710211741237744012426 00000000000000Appendix D. Credits

Appendix D. Credits

This appendix lists individuals that have contributed in the development of YAZ. Some have contributed with code, while others have provided bug fixes or suggestions. If we're missing somebody, of if you, for whatever reason, don't like to be listed here, let us know.

  • Gary Anderson

  • Dimitrios Andreadis

  • Morten Bøgeskov

  • Rocco Carbone

  • Matthew Carey

  • Hans van Dalen

  • Irina Dijour

  • Larry E. Dixson

  • Hans van den Dool

  • Mads Bondo Dydensborg

  • Franck Falcoz

  • Kevin Gamiel

  • Morten Garkier Hendriksen

  • Morten Holmqvist

  • Ian Ibbotson

  • Shigeru Ishida

  • David Johnson

  • Oleg Kolobov

  • Giannis Kosmas

  • Kang-Jin Lee

  • Pieter Van Lierop

  • Stefan Lohrum

  • Ronald van der Meer

  • Thomas W. Place

  • Peter Popovics

  • Jacob Chr. Poulsen

  • Ko van der Sloot

  • Mike Taylor

  • Rustam T. Usmanov

  • Charles Woodfield

  • Tom André Øverland

yaz-4.2.30/doc/apilayer.png0000644000175000017500000000177511654451754012433 00000000000000‰PNG  IHDRöà¾?öÄIDATxœíØÏjGpC|ªu ø¡LZ;z¾B¡'稂K¥ Ò ôЛ}.2ä|(Å..—|±Ð­NiÇÁ 7i Kv"fg¦óg¥H»^Íâ¸ÔNöÁ.úiöû¾]íÌŒ;€tDøy“,e¿d6jÆIØÅ’½m} ,Ax %CDo (…ÚIˆ‰öWXþòû·¢±µÕ^{°ÿˆ“׿ÖÛá1Ùx½ µóÛÃRœ „àz”ËÜ $ÑÞŒ“W‹œ–Y_‘pñ ‚‚=ò~A‘Ar(R3ÄŒ‚’$ì¾®£§ÇÍA·L›îjŒÈ•ö×íŸ/. tÑßìWâd,„ßûÉdä$'Ÿ4É®A¤ÈINrâ"‰¸nT£]°pø#m Â!⑌0KÂùˆ„Õeªž·¤X[à“DÒBáð"~½iÈ Ù“~@±§E½ MX/à6Ýñ†„õ/ &I$"¬a‰ªÈŒÂGÅë(Ã]Mºâvݧsrm’>R_:¦Ô0’[>#²ýó)xµtohBÿ™™‹±ù')4…onY”@ü4AÔ¢z‚ȳ8á–aM<•E(N="ßÉêÒBÁËĉt“£€«Èd. b*rÕQÝ%°ºtoÑÍgêiÌ@°4ïÿ÷)•“k ™tÅíZšsrm’!€k”›~¥W<Âtk†©ÿgi$<„ƒMÂM’F8}Öê2òŽõpaBœü-É;Êá4rR"}Êãù´×R$œN|‚+SÔ©0rXá©éªŠ:?2‚k½Ô¢U_<ÕøG3}e(yt›ÀÆ:K%©‘“ âÊ_â‰Qrr—Iq8HØÝt0'ÒE(¹ˆ|Ñr’sßI¨;]wEú¢º;ç"Qää¦Éáø:ö/ßOMDjfÀ€IEND®B`‚yaz-4.2.30/doc/marc.html0000644000175000017500000002202311741237744011712 000000000000005. MARC

5. MARC

YAZ provides a fast utility for working with MARC records. Early versions of the MARC utility only allowed decoding of ISO2709. Today the utility may both encode - and decode to a varity of formats.

    #include <yaz/marcdisp.h>

    /* create handler */
    yaz_marc_t yaz_marc_create(void);
    /* destroy */
    void yaz_marc_destroy(yaz_marc_t mt);

    /* set XML mode YAZ_MARC_LINE, YAZ_MARC_SIMPLEXML, ... */
    void yaz_marc_xml(yaz_marc_t mt, int xmlmode);
    #define YAZ_MARC_LINE      0
    #define YAZ_MARC_SIMPLEXML 1
    #define YAZ_MARC_OAIMARC   2
    #define YAZ_MARC_MARCXML   3
    #define YAZ_MARC_ISO2709   4
    #define YAZ_MARC_XCHANGE   5
    #define YAZ_MARC_CHECK     6
    #define YAZ_MARC_TURBOMARC 7

    /* supply iconv handle for character set conversion .. */
    void yaz_marc_iconv(yaz_marc_t mt, yaz_iconv_t cd);

    /* set debug level, 0=none, 1=more, 2=even more, .. */
    void yaz_marc_debug(yaz_marc_t mt, int level);

    /* decode MARC in buf of size bsize. Returns >0 on success; <=0 on failure.
    On success, result in *result with size *rsize. */
    int yaz_marc_decode_buf(yaz_marc_t mt, const char *buf, int bsize,
                            const char **result, size_t *rsize);

    /* decode MARC in buf of size bsize. Returns >0 on success; <=0 on failure.
       On success, result in WRBUF */
    int yaz_marc_decode_wrbuf(yaz_marc_t mt, const char *buf,
                              int bsize, WRBUF wrbuf);

   

Note

The synopsis is just a basic subset of all functionality. Refer to the actual header file marcdisp.h for details.

A MARC conversion handle must be created by using yaz_marc_create and destroyed by calling yaz_marc_destroy.

All other function operate on a yaz_marc_t handle. The output is specified by a call to yaz_marc_xml. The xmlmode must be one of

YAZ_MARC_LINE

A simple line-by-line format suitable for display but not recommend for further (machine) processing.

YAZ_MARC_MARCXML

MARCXML.

YAZ_MARC_ISO2709

ISO2709 (sometimes just referred to as "MARC").

YAZ_MARC_XCHANGE

MarcXchange.

YAZ_MARC_CHECK

Pseudo format for validation only. Does not generate any real output except diagnostics.

YAZ_MARC_TURBOMARC

XML format with same semantics as MARCXML but more compact and geared towards fast processing with XSLT. Refer to Section 5.1, “TurboMARC” for more information.

The actual conversion functions are yaz_marc_decode_buf and yaz_marc_decode_wrbuf which decodes and encodes a MARC record. The former function operates on simple buffers, the stores the resulting record in a WRBUF handle (WRBUF is a simple string type).

Example 7.18. Display of MARC record

The following program snippet illustrates how the MARC API may be used to convert a MARC record to the line-by-line format:

      void print_marc(const char *marc_buf, int marc_buf_size)
      {
         char *result;      /* for result buf */
         size_t result_len;    /* for size of result */
         yaz_marc_t mt = yaz_marc_create();
         yaz_marc_xml(mt, YAZ_MARC_LINE);
         yaz_marc_decode_buf(mt, marc_buf, marc_buf_size,
                             &result, &result_len);
         fwrite(result, result_len, 1, stdout);
         yaz_marc_destroy(mt);  /* note that result is now freed... */
      }

      


5.1. TurboMARC

TurboMARC is yet another XML encoding of a MARC record. The format was designed for fast processing with XSLT.

Applications like Pazpar2 uses XSLT to convert an XML encoded MARC record to an internal representation. This conversion mostly check the tag of a MARC field to determine the basic rules in the conversion. This check is costly when that is tag is encoded as an attribute in MARCXML. By having the tag value as the element instead, makes processing many times faster (at least for Libxslt).

TurboMARC is encoded as follows:

  • Record elements is part of namespace "http://www.indexdata.com/turbomarc".

  • A record is enclosed in element r.

  • A collection of records is enclosed in element collection.

  • The leader is encoded as element l with the leader content as its (text) value.

  • A control field is encoded as element c concatenated with the tag value of the control field if the tag value matches the regular expression [a-zA-Z0-9]*. If the tag value do not match the regular expression [a-zA-Z0-9]* the control field is encoded as element c and attribute code will hold the tag value. This rule ensure that in the rare cases where a tag value might result in a non-wellformed XML YAZ encode it as a coded attribute (as in MARCXML).

    The control field content is the the text value of this element. Indicators are encoded as attribute names i1, i2, etc.. and corresponding values for each indicator.

  • A data field is encoded as element d concatenated with the tag value of the data field or using the attribute code as described in the rules for control fields. The children of the data field element is subfield elements. Each subfield element is encoded as s concatenated with the sub field code. The text of the subfield element is the contents of the subfield. Indicators are encoded as attributes for the data field element similar to the encoding for control fields.

yaz-4.2.30/doc/introduction.xml0000644000175000017500000002717611733047144013355 00000000000000 Introduction &yaz; is a C/C++ library for information retrieval applications using the Z39.50/SRU/SOLR protocols for information retrieval. Properties of &yaz;: Complete Z39.50 version 3 support. Amendments and Z39.50-2002 revision is supported. Supports SRU GET/POST/SOAP version 1.2 (over HTTP and HTTPS). Includes BER encoders/decoders for the ISO ILL protocol. Supports SOLR Web Service version 1.4.x (client side only) Supports the following transports: BER over TCP/IP (RFC1729), BER over unix local socket, and HTTP 1.1. Secure Socket Layer support using GNU TLS or OpenSSL. If enabled, &yaz; uses HTTPS transport (for SOAP) or "Secure BER" (for Z39.50). Offers ZOOM C API implementing Z39.50, SRU and SOLR Web Service. The &yaz; library offers a set of useful utilities related to the protocols, such as MARC (ISO2709) parser, CCL (ISO8777) parser, CQL parser, memory management routines, character set conversion. Portable code. &yaz; compiles out-of-the box on most Unixes and on Windows using Microsoft Visual C++. Fast operation. The C based BER encoders/decoders as well as the server component of &yaz; is very fast. Liberal license that allows for commercial use of &yaz;. Reading this Manual Most implementors only need to read a fraction of the material in thie manual, so a quick walkthrough of the chapters is in order. contains installation instructions for &yaz;. You don't need reading this if you expect to download &yaz; binaries. However, the chapter contains information about how to make your application link with &yaz;. describes the ZOOM API of &yaz;. This is definitely worth a read if you wish to develop a Z39.50/SRU client. describes the generic frontend server and explains how to develop server Z39.50/SRU applications for &yaz;. Obviously worth reading if you're to develop a server. describes how to use the &yaz; Z39.50 client. If you're developer and wish to test your server or a server from another party, you might find this chapter useful. documents the most commonly used Z39.50 C data structures offered by the &yaz; API. Client developers using ZOOM and non-Z39.50 implementors may skip this. describes how SRU and SOAP is used in &yaz;. Only if you're developing SRU applications this section is a must. contains sections for the various tools offered by &yaz;. Scan through the material quickly and see what's relevant to you! SRU implementors might find the CQL section particularly useful. goes through the details of the ODR module which is the work horse that encodes and decodes BER packages. Implementors using ZOOM only, do not need reading this. Most other Z39.50 implementors only need to read the first two sections ( and ). describes the network layer module COMSTACK. Implementors using ZOOM or the generic frontend server may skip this. Others, presumably, handling client/server communication on their own should read this. The API The &yaz; toolkit offers several different levels of access to the ISO23950/Z39.50, ILL and SRU protocols. The level that you need to use depends on your requirements, and the role (server or client) that you want to implement. If you're developing a client application you should consider the ZOOM API. It is, by far, the easiest way to develop clients in C. Server implementers should consider the generic frontend server. None of those high-level APIs support the whole protocol, but they do include most facilities used in existing Z39.50 applications. If you're using 'exotic' functionality (meaning anything not included in the high-level APIs), developing non-standard extensions to Z39.50 or you're going to develop an ILL application you'll have to learn the lower level APIs of &yaz;. The YAZ toolkit modules is shown in figure .
YAZ layers
There are four layers. A client or server application (or both). This layer includes ZOOM and the generic frontend server. The second layer provides a C represenation of the protocol units (packages) for Z39.50 ASN.1, ILL ASN.1, SRU. The third layer encodes and decodes protocol data units to simple packages (buffer with certain length). The &odr; module encodes and decodes BER whereas the HTTP modules encodes and decodes HTTP ruquests/responses. The lowest layer is &comstack; which exchanges the encoded packages with a peer process over a network. The &asn; module represents the ASN.1 definition of the Z39.50 protocol. It establishes a set of type and structure definitions, with one structure for each of the top-level PDUs, and one structure or type for each of the contained ASN.1 types. For primitive types, or other types that are defined by the ASN.1 standard itself (such as the EXTERNAL type), the C representation is provided by the &odr; (Open Data Representation) subsystem. &odr; is a basic mechanism for representing an ASN.1 type in the C programming language, and for implementing BER encoders and decoders for values of that type. The types defined in the &asn; module generally have the prefix Z_, and a suffix corresponding to the name of the type in the ASN.1 specification of the protocol (generally Z39.50-1995). In the case of base types (those originating in the ASN.1 standard itself), the prefix Odr_ is sometimes seen. Either way, look for the actual definition in either z-core.h (for the types from the protocol), odr.h (for the primitive ASN.1 types). The &asn; library also provides functions (which are, in turn, defined using &odr; primitives) for encoding and decoding data values. Their general form is int z_xxx ODR o Z_xxx **p int optional const char *name (note the lower-case "z" in the function name) If you are using the premade definitions of the &asn; module, and you are not adding new protocol of your own, the only parts of &odr; that you need to worry about are documented in . When you have created a BER-encoded buffer, you can use the &comstack; subsystem to transmit (or receive) data over the network. The &comstack; module provides simple functions for establishing a connection (passively or actively, depending on the role of your application), and for exchanging BER-encoded PDUs over that connection. When you create a connection endpoint, you need to specify what transport to use (TCP/IP, SSL or UNIX sockets). For the remainder of the connection's lifetime, you don't have to worry about the underlying transport protocol at all - the &comstack; will ensure that the correct mechanism is used. We call the combined interfaces to &odr;, &asn;, and &comstack; the service level API. It's the API that most closely models the Z39.50 service/protocol definition, and it provides unlimited access to all fields and facilities of the protocol definitions. The reason that the &yaz; service-level API is a conglomerate of the APIs from three different submodules is twofold. First, we wanted to allow the user a choice of different options for each major task. For instance, if you don't like the protocol API provided by &odr;/&asn;, you can use SNACC or BERUtils instead, and still have the benefits of the transparent transport approach of the &comstack; module. Secondly, we realize that you may have to fit the toolkit into an existing event-processing structure, in a way that is incompatible with the &comstack; interface or some other part of &yaz;.
yaz-4.2.30/doc/manref.xml0000644000175000017500000037636411741237741012115 00000000000000 YAZ 4.2.30 Index Data yaz-client 1 Commands yaz-client Z39.50/SRU client for implementors yaz-client server-addr DESCRIPTION yaz-client is a Z39.50/SRU client (origin) with a simple command line interface that allows you to test behavior and performance of Z39.50 targets and SRU servers. From YAZ version 4.1.0 yaz-client may also operate as a SOLR Web Service client. If the server-addr is specified, the client creates a connection to the Z39.50/SRU target at the address given. When yaz-client is started it tries to read commands from one of the following files: Command file if it is given by option -f. .yazclientrc in current working directory. .yazclientrc in the user's home directory. The value of the HOME is used to determine the home directory. Normally, HOME is only set on POSIX systems such as Linux, FreeBSD, Solaris. OPTIONS -a filename If specified, logging of protocol packages will be appended file given. If filename is specified as -, the output is written to stdout. -b filename If specified, YAZ will dump BER data in readable notation to the file specified. If filename is specified as - the output is written to stdout. -c filename If specified, CCL configuration will be read from the file given. -d dump If specified, YAZ will dump BER data for all PDUs sent and received to individual files, named dump.DDD.raw, where DDD is 001, 002, 003, .. -f cmdfile Reads commands from cmdfile. When this option is used, YAZ client does not read .yazclientrc from current directory or home directory. -k size Sets preferred messages and maximum record size for Initialize Request in kilobytes. Default value is 1024 (1 MB). -m filename If specified, retrieved records will be appended to the file given. -p proxy-addr If specified, the client will use the proxy at the address given. YAZ client will connect to a proxy on the address and port given. The actual target will be specified as part of the InitRequest to inform the proxy about actual target. -q filename If specified, CQL configuration will be read from the file given. -t displaycharset If displaycharset is given, it specifies name of the character set of the output (on the terminal on which YAZ client is running). -u auth If specified, the auth string will be used for authentication. -v level Sets the LOG level to level. Level is a sequence of tokens separated by comma. Each token is a integer or a named LOG item - one of fatal, debug, warn, log, malloc, all, none. -V Prints YAZ version. -x Makes the YAZ client print hex dumps of packages sent and received on standard output. COMMANDS The YAZ client accepts the following commands. open zurl Opens a connection to a server. The syntax for zurl is the same as described above for connecting from the command line. Syntax: [(tcp|ssl|unix|http)':']host [:port][/base] quit Quits YAZ client find query Sends a Search Request using the query given. By default the query is assumed to be PQF. See command querytype for more information. delete setname Deletes result set with name setname on the server. base base1 base2 ... Sets the name(s) of the database(s) to search. One or more databases may be specified separated by blanks. This commands overrides the database given in zurl. show [start[+number]] Fetches records by sending a Present Request from the start position given by start a number of records given by number. If start is not given, then the client will fetch from position of the last retrieved record plus 1. If number is not given, then one record will be fetched at a time. scan term Scans database index for a term. The syntax resembles the syntax for find. If you want to scan for the word water you could write scan water but if you want to scan only in, say the title field, you would write scan @attr 1=4 water setscan set term Scans database index for a term within a result set. This is similar to the scan command but has a result set as its first argument. scanpos pos Sets preferred position for scan. This value is used in next scan. By default position is 1. scansize size Sets number of entries to be returned by scan. Default number of entries is 20. scanstep step Set step-size for scan. This value is used in next scan sent to the target. By default step-size is 0. sort sortspecs Sorts a result set. The sort command takes a sequence of space-separated sort specifications, with each sort specification consisting of two space-separated words (so that the whole specification list is made up of an even number of words). The first word of each specification holds a field (sort criterion) and the second holds flags. If the sort criterion includes = it is assumed that the SortKey is of type sortAttributes using Bib-1: in this case the integer before = is the attribute type and the integer following = is the attribute value. If no = is in the criterion it is treated as a sortfield of type InternationalString. The flags word of each sort specification must consist of s for case sensitive or i for case insensitive, and < for ascending order or > for descending order. sort+ Same as sort but stores the sorted result set in a new result set. authentication openauth Sets up a authentication string if a server requires authentication (v2 OpenStyle). The authentication string is first sent to the server when the open command is issued and the Z39.50 Initialize Request is sent, so this command must be used before open in order to be effective. A common convention for the authopen string is that the username - and password is separated by a slash, e.g. myusername/mysecret. sru method version Selects Web Service method and version. Must be one of POST, GET, SOAP (default) or SOLR. Version should be either 1.1 or 1.2 for SRU. Other versions are allowed - for testing purposes (version negotiation with SRU server). The version is currently not used for SOLR Web Services list_all This command displays status and values for many settings. lslb n Sets the limit for when no records should be returned together with the search result. See the Z39.50 standard on set bounds for more details. ssub n Sets the limit for when all records should be returned with the search result. See the Z39.50 standard on set bounds for more details. mspn n Sets the number of records should be returned if the number of records in the result set is between the values of lslb and ssub. See the Z39.50 standard on set bounds for more details. status Displays the values of lslb, ssub and mspn. setname Switches named result sets on and off. Default is on. cancel Sends a Trigger Resource Control Request to the target. format oid Sets the preferred transfer syntax for retrieved records. yaz-client supports all the record syntaxes that currently are registered. See Z39.50 Record Syntax Identifiers for more details. Commonly used records syntaxes include usmarc, sutrs and xml. elements e Sets the element set name for the records. Many targets support element sets are B (for brief) and F (for full). close Sends a Z39.50 Close APDU and closes connection with the peer querytype type Sets the query type as used by command find. The following is supported: prefix for Prefix Query Notation (Type-1 Query); ccl for CCL search (Type-2 Query), cql for CQL (Type-104 search with CQL OID), ccl2rpn for CCL to RPN conversion (Type-1 Query). cql2rpn for CQL to RPN conversion (Type-1 Query). attributeset set Sets attribute set OID for prefix queries (RPN, Type-1). refid id Sets reference ID for Z39.50 Request(s). itemorder type no Sends an Item Order Request using the ILL External. type is either 1 or 2 which corresponds to ILL-Profile 1 and 2 respectively. The no is the Result Set position of the record to be ordered. update action recid doc Sends Item Update Request. The action argument must be the action type: one of insert, replace, delete and update. The second argument, recid, is the record identifier (any string). Third argument which is optional is the record document for the request. If doc is preceded with "<", then the following characters are treated as a filename with the records to be updated. Otherwise doc is treated as a document itself. The doc may also be quited in double quotes. If doc is omitted, the last received record (as part of present response or piggybacked search response) is used for the update. source filename Executes list of commands from file filename, just like source on most UNIX shells. A single dot (.) can be used as an alternative. ! args Executes command args in subshell using the system call. push_command command The push_command takes another command as its argument. That command is then added to the history information (so you can retrieve it later). The command itself is not executed. This command only works if you have GNU readline/history enabled. set_apdufile filename Sets that APDU should be logged to file filename. Another way to achieve APDU log is by using command-line option -a. set_auto_reconnect flag Specifies whether YAZ client automatically reconnect if target closes connection (Z39.50 only). flag must be either on or off. set_auto_wait flag Specifies whether YAZ client should wait for response protocol packages after a request. By default YAZ client waits (on) for response packages immediately after a command (find, show) has been issued. If off is used, YAZ client does not attempt to receive packages automatically. These will have to be manually received when command wait_response is used. flag must be either on or off. set_marcdump filename Specifies that all retrieved records should be appended to file filename. This command does the thing as option -m. schema schemaid Specifies schema for retrieval. Schema may be specified as an OID for Z39.50. For SRU, schema is a simple string URI. charset negotiationcharset [displaycharset] [[marccharset]] Specifies character set (encoding) for Z39.50 negotiation / SRU encoding and/or character set for output (terminal). negotiationcharset is the name of the character set to be negotiated by the server. The special name - for negotiationcharset specifies no character set to be negotiated. If displaycharset is given, it specifies name of the character set of the output (on the terminal on which YAZ client is running). To disable conversion of characters to the output encoding, the special name - (dash) can be used. If the special name auto is given, YAZ client will convert strings to the encoding of the terminal as returned by nl_langinfo call. If marcharset is given, it specifies name of the character set of retrieved MARC records from server. See also marcharset command. Since character set negotation takes effect in the Z39.50 Initialize Request you should issue this command before command open is used. MARC records are not covered by Z39.50 character set negotiation, so that's why there is a separate character that must be known in order to do meaningful conversion(s). negcharset charset Specifies character set for negotiation (Z39.50). The argument is the same as second argument for command charset. displaycharset charset Specifies character set for output (display). The argument is the same as second argument for command charset. marccharset charset Specifies character set for retrieved MARC records so that YAZ client can display them in a character suitable for your display. See charset command. If auto is given, YAZ will assume that MARC21/USMARC is using MARC8/UTF8 and ISO-8859-1 for all other MARC variants. The charset argument is the same as third argument for command charset. querycharset charset Specifies character set for query terms for Z39.50 RPN queries and Z39.50 Scan Requests (termListAndStartPoint). This is a pure client-side conversion which converts from displayCharset to queryCharset. set_cclfile filename Specifies that CCL fields should be read from file file filename. This command does the thing as option -c. set_cqlfile filename Specifies that CQL fields should be read from file file filename. This command does the thing as option -q. register_oid name class OID This command allows you to register your own object identifier - so that instead of entering a long dot-notation you can use a short name instead. The name is your name for the OID, class is the class, and OID is the raw OID in dot notation. Class is one appctx, absyn, attet, transyn, diagset, recsyn, resform, accform, extserv, userinfo, elemspec, varset, schema, tagset, general. If you're in doubt use the general class. register_tab command string This command registers a TAB completion string for the command given. sleep seconds This command makes YAZ client sleep (be idle) for the number of seconds given. wait_response [ number] This command makes YAZ client wait for a number of response packages from target. If number is omitted, 1 is assumed. This command is rarely used and is only useful if command set_auto_wait is set to off. xmles OID doc Sends XML Extended Services request using the OID and doc given. zversion ver This command sets Z39.50 version for negotiation. Should be used before open. By default 3 (version 3) is used. options op1 op2.. This command sets Z39.50 options for negotiation. Should be used before open. The following options are supported: search, present, delSet, resourceReport, triggerResourceCtrl, resourceCtrl, accessCtrl, scan, sort, extendedServices, level_1Segmentation, level_2Segmentation, concurrentOperations, namedResultSets, encapsulation, resultCount, negotiationModel, duplicationDetection, queryType104, pQESCorrection, stringSchema. EXAMPLE The simplest example of a Prefix Query would be something like f knuth or f "donald knuth" In those queries no attributes was specified. This leaves it up to the server what fields to search but most servers will search in all fields. Some servers does not support this feature though, and require that some attributes are defined. To add one attribute you could do: f @attr 1=4 computer where we search in the title field, since the use(1) is title(4). If we want to search in the author field and in the title field, and in the title field using right truncation it could look something like this: f @and @attr 1=1003 knuth @attr 1=4 @attr 5=1 computer Finally using a mix of Bib-1 and GILS attributes could look something like this: f @attrset Bib-1 @and @attr GILS 1=2008 Washington @attr 1=21 weather FILES yaz-<version>/client/client.c $HOME/.yazclientrc $HOME/.yazclient.history SEE ALSO yaz 7 bib1-attr 7 YAZ 4.2.30 Index Data yaz-ztest 8 System management commands yaz-ztest Z39.50/SRU Test Server application listener-spec DESCRIPTION yaz-ztest is a Z39.50/SRU test server that uses the YAZ generic frontend server (GFS) API. The server acts as a real Z39.50/SRU server but does not use a database. It returns a random hit count and returns a subset of a few built-in records. The listener-spec consists of a transport mode followed by a colon, followed by a listener address. The transport mode is either tcp, unix, or ssl. For TCP and SSL, an address has the form: hostname | IP-number [ : portnumber ] For UNIX local socket the address is the filename of the local socket. OPTIONS -a file Specify a file for dumping PDUs (for diagnostic purposes). The special name - (dash) sends output to stderr. -S Don't fork or make threads on connection requests. This is good for debugging, but not recommended for real operation: Although the server is asynchronous and non-blocking, it can be nice to keep a software malfunction (okay then, a crash) from affecting all current users. -1 Like -S but after one session the server exits. This mode is for debugging only. -T Operate the server in threaded mode. The server creates a thread for each connection rather than a fork a process. Only available on UNIX systems that offers POSIX threads. -s Use the SR protocol (obsolete). -z Use the Z39.50 protocol (default). This option and -s complement each other. You can use both multiple times on the same command line, between listener-specifications (see below). This way, you can set up the server to listen for connections in both protocols concurrently, on different local ports. -l file The logfile. -c config A user option that serves as a specifier for some sort of configuration, usually a filename. The argument to this option is transferred to member configname of the statserv_options_block. -f vconfig This specifies an XML file that describes one or more YAZ frontend virtual servers. -C fname Sets SSL certificate file name for server (PEM). -v level The log level. Use a comma-separated list of members of the set {fatal,debug,warn,log,malloc,all,none}. -u uid Set user ID. Sets the real UID of the server process to that of the given user. It's useful if you aren't comfortable with having the server run as root, but you need to start it as such to bind a privileged port. -w dir The server changes to this directory during before listening on incoming connections. This option is useful when the server is operating from the inetd daemon (see -i). -p pidfile Specifies that the server should write its Process ID to file given by pidfile. A typical location would be /var/run/yaz-ztest.pid. -i Use this to make the the server run from the inetd server (UNIX only). -D Use this to make the server put itself in the background and run as a daemon. If neither -i nor -D is given, the server starts in the foreground. -install Use this to install the server as an NT service (Windows NT/2000/XP only). Control the server by going to the Services in the Control Panel. -installa Use this to install and activate the server as an NT service (Windows NT/2000/XP only). Control the server by going to the Services in the Control Panel. -remove Use this to remove the server from the NT services (Windows NT/2000/XP only). -t minutes Idle session timeout, in minutes. -k size Maximum record size/message size, in kilobytes. -K Forces no-keepalive for HTTP sessions. By default GFS will keep sessions alive for HTTP 1.1 sessions (as defined by the standard). Using this option will force GFS to close the connection for each operation. -r size Maximum size of log file before rotation occurs, in kilobytes. Default size is 1048576 k (=1 GB). -d daemon Set name of daemon to be used in hosts access file. See hosts_access 5 and tcpd 8 . -m time-format Sets the format of time-stamps in the log-file. Specify a string in the input format to strftime(). TESTING yaz-ztest normally returns a random hit count between 0 and 24. However, if a query term includes leading digits, then the integer value of that term is used as hit count. This allows testers to return any number of hits. yaz-ztest includes 24 MARC records for testing. Hit counts exceeding 24 will make yaz-ztest return the same record batch over and over.. So record at position 1, 25, 49, etc .. are equivalent. The following databases are honored by yaz-ztest: Default, slow and db.* (all databases with prefix "db"). Any other database will make yaz-ztest return diagnostic 109: "Database unavailable". Options for search may be included in the form or URL get arguments included as part of the Z39.50 database name. The following database options are present: search-delay, present-delay, fetch-delay and seed. The former, delay type options, specify a fake delay (sleep) that yaz-ztest will perform when searching, presenting, fetching records respectively. The value of the delay may either be a fixed floating point value which specifies the delay in seconds. Alternatively the value may be given as two floating point numbers separated by colon, which wil make yaz-ztest perform a random sleep between the first and second number. The database parameter seed takes an integer as value. This will call srand with this integer to ensure that the random behavior can be re-played. Suppose we want searches to take between 0.1 and 0.5 seconds and a fetch to take 0.2 second. To access test database Default we'd use: Default?search-delay=0.1:0.5&fetch-delay=0.2. GFS CONFIGURATION AND VIRTUAL HOSTS The Virtual hosts mechanism allows a YAZ frontend server to support multiple backends. A backend is selected on the basis of the TCP/IP binding (port+listening adddress) and/or the virtual host. A backend can be configured to execute in a particular working directory. Or the YAZ frontend may perform CQL to RPN conversion, thus allowing traditional Z39.50 backends to be offered as a SRW/SRU service. SRW/SRU Explain information for a particular backend may also be specified. For the HTTP protocol, the virtual host is specified in the Host header. For the Z39.50 protocol, the virtual host is specified as in the Initialize Request in the OtherInfo, OID 1.2.840.10003.10.1000.81.1. Not all Z39.50 clients allows the VHOST information to be set. For those the selection of the backend must rely on the TCP/IP information alone (port and address). The YAZ frontend server uses XML to describe the backend configurations. Command-line option -f specifies filename of the XML configuration. The configuration uses the root element yazgfs. This element includes a list of listen elements, followed by one or more server elements. The listen describes listener (transport end point), such as TCP/IP, Unix file socket or SSL server. Content for a listener: CDATA (required) The CDATA for the listen element holds the listener string, such as tcp:@:210, tcp:server1:2100, etc. attribute id (optional) identifier for this listener. This may be referred to from server sections. We expect more information to be added for the listen section in a future version, such as CERT file for SSL servers. The server describes a server and the parameters for this server type. Content for a server: attribute id (optional) Identifier for this server. Currently not used for anything, but it might be for logging purposes. attribute listenref (optional) Specifies listener for this server. If this attribute is not given, the server is accessible from all listener. In order for the server to be used for real, howeever, the virtual host must match (if specified in the configuration). element config (optional) Specifies the server configuration. This is equivalent to the config specified using command line option -c. element directory (optional) Specifies a working directory for this backend server. If specifid, the YAZ fronend changes current working directory to this directory whenever a backend of this type is started (backend handler bend_start), stopped (backend handler hand_stop) and initialized (bend_init). element host (optional) Specifies the virtual host for this server. If this is specified a client must specify this host string in order to use this backend. element cql2rpn (optional) Specifies a filename that includes CQL to RPN conversion for this backend server. See If given, the backend server will only "see" a Type-1/RPN query. element ccl2rpn (optional) Specifies a filename that includes CCL to RPN conversion for this backend server. See If given, the backend server will only "see" a Type-1/RPN query. element stylesheet (optional) Specifies the stylesheet reference to be part of SRU HTTP responses when the client does not specify one. If neither this is given, nor the client specifies one, no stylesheet reference is part of the SRU HTTP response. element docpath (optional) Specifies a path for local file access using HTTP. All URLs with a leading prefix (/ exluded) that matches the value of docpath are used for file access. For example, if the server is to offer access in directory xsl, the docpath would be xsl and all URLs of the form http://host/exl will result in a local file access. element explain (optional) Specifies SRW/SRU ZeeRex content for this server. Copied verbatim to the client. As things are now, some of the Explain content seeem redundant because host information, etc. is also stored elsewhere. element maximumrecordsize (optional) Specifies maximum record size/message size, in bytes. This value also servers as maximum size of incoming packages (for Record Updates etc). It's the same value as that given by the -k option. element retrievalinfo (optional) Enables the retrieval facility supporting conversions and specifications of record formats/types. See for more information. The XML below configures a server that accepts connections from two ports, TCP/IP port 9900 and a local UNIX file socket. We name the TCP/IP server public and the other server internal. <yazgfs> <listen id="public">tcp:@:9900</listen> <listen id="internal">unix:/var/tmp/socket</listen> <server id="server1"> <host>server1.mydomain</host> <directory>/var/www/s1</directory> <config>config.cfg</config> </server> <server id="server2"> <host>server2.mydomain</host> <directory>/var/www/s2</directory> <config>config.cfg</config> <cql2rpn>../etc/pqf.properties</cql2rpn> <explain xmlns="http://explain.z3950.org/dtd/2.0/"> <serverInfo> <host>server2.mydomain</host> <port>9900</port> <database>a</database> </serverInfo> </explain> </server> <server id="server3" listenref="internal"> <directory>/var/www/s3</directory> <config>config.cfg</config> </server> </yazgfs> There are three configured backend servers. The first two servers, "server1" and "server2", can be reached by both listener addresses - since no listenref attribute is specified. In order to distinguish between the two a virtual host has been specified for each of server in the host elements. For "server2" elements for CQL to RPN conversion is supported and explain information has been added (a short one here to keep the example small). The third server, "server3" can only be reached via listener "internal". FILES yaz-<version>/ztest/yaz-ztest.c yaz-<version>/include/yaz/backend.h SEE ALSO yaz 7 yaz-log 7 YAZ 4.2.30 Index Data yaz-config 1 Commands yaz-config Script to get information about YAZ. yaz-config libraries DESCRIPTION yaz-config is a script that returns information that your own software should use to build software that uses YAZ. The following libraries are supported: threads Use the threaded version of YAZ. OPTIONS --prefix[=DIR] Returns prefix of YAZ or assume a different one if DIR is specified. --version Returns version of YAZ. --libs Library specification be used when using YAZ. --lalibs Return library specification. --cflags Return C Compiler flags. --comp Returns full path to YAZ' ASN.1 compiler: yaz-asncomp. -V veturns YAZ SHA1 ID (from Git) and version. FILES /usr/local/bin/yaz-config /usr/local/lib/libyaz*.a /usr/local/include/yaz/*.h SEE ALSO yaz(7) Section "How to make apps using YAZ on UNIX" in the YAZ manual. YAZ 4.2.30 Index Data yaz 7 Conventions and miscellaneous yaz Z39.50 toolkit. DESCRIPTION YAZ is a C/C++ programmer's toolkit supporting the development of Z39.50v3 clients and servers. The YAZ toolkit offers several different levels of access to the ISO23950/Z39.50, SRU SOLR (client only) and ILL protocols. The level that you need to use depends on your requirements, and the role (server or client) that you want to implement. COPYRIGHT Copyright © 1995-2012 Index Data. All rights reserved. Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. Neither the name of Index Data nor the names of its contributors may be used to endorse or promote products derived from this software without specific prior written permission. THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS AND CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. SEE ALSO yaz-client 1 , yaz-ztest 8 , yaz-config 8 , zoomsh 1 bib1-attr 7 YAZ manual ( /usr/local/share/doc/yaz) YAZ home page. Z39.50 Maintenance Agency Page. YAZ 4.2.30 Index Data zoomsh 1 Commands zoomsh ZOOM shell zoomsh commands DESCRIPTION zoomsh is a ZOOM client with a simple command line interface. The client demonstrates the ZOOM API and is useful for testing targets. You may pass one or more commands to zoomsh. These commands are invoked first. OPTIONS -e Makes zoomsh stop processing commands as soon as an error occur. The exit code of zoomsh is 1 if error occurs; 0 otherwise. -v loglevel Sets YAZ log level. EXAMPLES If you start the yaz-ztest in one console you can use the ZOOM shell as follows: $ zoomsh ZOOM>connect localhost:9999 ZOOM>search computer localhost:9999: 7 hits ZOOM>show 0 1 1 Default USmarc 001 11224466 003 DLC 005 00000000000000.0 008 910710c19910701nju 00010 eng 010 $a 11224466 040 $a DLC $c DLC 050 00 $a 123-xyz 100 10 $a Jack Collins 245 10 $a How to program a computer 260 1 $a Penguin 263 $a 8710 300 $a p. cm. ZOOM>quit You can also achieve the same result by passing the commands as arguments on a single command line: $ zoomsh "connect localhost:9999" "search computer" "show 0 1" quit COMMANDS connect zurl Connects to the target given by zurl. close [zurl] Closes connection to target given by zurl or all targets if zurl was omitted. show [start [count]] Displays count records starting at offset given by start. First records has offset 0 (unlike the Z39.50 protocol). quit Quits zoomsh. set name [value] Sets option name to value. get name Prints value of option name. help Prints list of available commands. SEE ALSO yaz 7 , yaz-ztest 8 , Section "Building clients with ZOOM" in the YAZ manual. ZOOM home page. YAZ 4.2.30 Index Data yaz-asncomp 1 Commands yaz-asncomp YAZ ASN.1 compiler yaz-asncomp filename DESCRIPTION yaz-asncomp is an ASN.1 compiler that reads an ASN.1 specification in filename and produces C/C++ definitions and BER encoders/decoders for it. The produced C/C++ code and header files uses the ODR module of YAZ which is a library that encodes/decodes/prints BER packages. yaz-asncomp allows you to specify name of resulting source via options. Alternatively, you can specify a DEFINISIONS file, which provides customized output to many output files - if the ASN.1 specification file consists of many modules. This utility is written in Tcl. Any version of Tcl should work. OPTIONS -v Makes the ASN.1 compiler print more verbose about the various stages of operations. -c cfile Specifies the name of the C/C++ file with encoders/decoders. -h hfile Specifies the name of header file with definitions. -p pfile Specifies the name of the a private header file with definitions. By default all definitions are put in header file (option -h). -d dfile Specifies the name of a definitions file. -I iout Specifies first part of directory in which header files are written. -i idir Specifies second part of directory in which header files are written. -m module Specifies that ASN.1 compiler should only process the module given. If this option is not specified, all modules in the ASN.1 file are processed. DEFINITIONS FILE The definitions file is really a Tcl script but follows traditional rules for Shell like configuration files. That is # denotes the beginning of a comment. Definitions are line oriented. The definitions files usually consists of a series of variable assignments of the form: set name value Available variables are: default-prefix Sets prefix for names in the produced output. The value consists of three tokens: C function prefix, C typedef prefix and preprocessor prefix respectively. prefix(module) This value sets prefix values for module module. The value has same form as default-prefix. filename(module) Specifies filename for C/header file for module module. init(module,h) Code fragment to be put in first part of public header for module module. body(module,h) Code fragment to be put in last part of public header for module module (trailer). init(module,c) Code fragment to be put in first part of C based encoder/decoder for module module. body(module,c) Code fragment to be put in last part of C based encoder/decoder for module module (trailer). map(module,name) Maps ASN.1 type in module module of name to value. membermap(module,name,member) Maps member member in SEQUENCE/CHOICE of name in module module to value. The value consists of one or two tokens. First token is name of C preprocessor part. Second token is resulting C member name. If second token is omitted the value (one token) is both preprocessor part and C struct,union. unionmap(module,name,member) Maps member member in CHOICE of name in module module to value. Value consists of to or three tokens. The first token is name of the integer in the union that is used as selector for the union itself. The second token is name of the union. The third token overrides the name of the CHOICE member; if omitted the member name is used. FILES /usr/share/yaz/z39.50/z.tcl /usr/share/yaz/z39.50/*.asn SEE ALSO yaz 7 Section "The ODR Module" in the YAZ manual. YAZ 4.2.30 Index Data yaz-marcdump 1 Commands yaz-marcdump MARC record dump utility yaz-marcdump file DESCRIPTION yaz-marcdump reads MARC records from one or more files. It parses each record and supports output in line-format, ISO2709, MARCXML, MarcXchange as well as Hex output. This utility parses records ISO2709(raw MARC) as well as XML if that is structured as MARCXML/MarcXchange. As of YAZ 2.1.18, OAI-MARC is no longer supported. OAI-MARC is deprecated. Use MARCXML instead. By default, each record is written to standard output in a line format with newline for each field, $x for each subfield x. The output format may be changed with option -o, yaz-marcdump can also be requested to perform character set conversion of each record. OPTIONS -i format Specifies input format. Must be one of marcxml, marc (ISO2709), marcxchange (ISO25577), line (line mode MARC), or turbomarc (Turbo MARC). -o format Specifies output format. Must be one of marcxml, marc (ISO2709), marcxchange (ISO25577), line (line mode MARC), or turbomarc (Turbo MARC). -f from Specify the character set from of the input MARC record. Should be used in conjunction with option -t. Refer to the yaz-iconv man page for supported character sets. -t to Specify the character set of of the output. Should be used in conjunction with option -f. Refer to the yaz-iconv man page for supported character sets. -l leaderspec Specify a simple modification string for MARC leader. The leaderspec is a list of pos=value pairs, where pos is an integer offset (0 - 23) for leader. Value is either a quoted string or an integer (character value in decimal). Pairs are comma separated. For example, to set leader at offset 9 to a, use 9='a'. -s prefix Writes a chunk of records to a separate file with prefix given, i.e. splits a record batch into files with only at most "chunk" ISO2709 record per file. By default chunk is 1 (one record per file). See option -C. -C chunksize Specifies chunk size; to be used conjunction with option -s. -p Makes yaz-marcdump prints record number and input file offset of each record read. -n MARC output is omitted so that MARC input is only checkecd. -v Writes more information about the parsing process. Useful if you have ill-formatted ISO2709 records as input. -V Prints YAZ version. EXAMPLES The following command converts MARC21/USMARC in MARC-8 encoding to MARC21/USMARC in UTF-8 encoding. Leader offset 9 is set to 'a'. Both input and output records are ISO2709 encoded. yaz-marcdump -f MARC-8 -t UTF-8 -o marc -l 9=97 marc21.raw >marc21.utf8.raw The same records may be converted to MARCXML instead in UTF-8: yaz-marcdump -f MARC-8 -t UTF-8 -o marcxml marc21.raw >marcxml.xml Turbo MARC is a compact XML notation with same semantics as MARCXML, but which allows for faster processing via XSLT. In order to generate Turbo MARC records encoded in UTF-8 from MARC21 (ISO), one could use: yaz-marcdump -f MARC8 -t UTF8 -o turbomarc -i marc marc21.raw >out.xml FILES prefix/bin/yaz-marcdump prefix/include/yaz/marcdisp.h SEE ALSO yaz 7 yaz-iconv 1 MARCXML. ISO25577. YAZ 4.2.30 Index Data yaz-iconv 1 Commands yaz-iconv YAZ Character set conversion utility yaz-iconv file DESCRIPTION yaz-iconv converts data in file in character set specified by from to output in character set as specified by to. This yaz-iconv utility similar to the iconv found on many POSIX systems (Glibc, Solaris, etc). If no file is specified, yaz-iconv reads from standard input. OPTIONS -ffrom] Specify the character set from of the input file. Should be used in conjunction with option -t. -tto] Specify the character set of of the output. Should be used in conjunction with option -f. -v Print more information about the conversion process. ENCODINGS The yaz-iconv command and the API as defined in yaz/yaz-iconv.h is a wrapper for the library system call iconv. But YAZ' iconv utility also implements conversions on its own. The table below lists characters sets (or encodings). that are supported by YAZ. Each character set is marked with either encode or decode. If an encoding is encode-enabled YAZ may convert to to the designated encoding. If an encoding is decode-enabled, YAZ may convert from the designated encoding. marc8 (encode, decode) The MARC8 encoding as defined by the Library of Congress. Most MARC21/USMARC records usees this encoding. marc8s (encode, decode) Like MARC8 but with conversion prefers non-combined characters in the Latin-1 plane over combined characters. marc8lossy (encode) Lossy encoding of MARC-8. marc8lossless (encode) Lossless encoding of MARC8. utf8 (encode, decode) The most commonly used UNICODE encoding on the Internet. iso8859-1 (encode, decode) ISO-8859-1, AKA Latin-1. iso5426 (decode) ISO 5426. Some MARC records (UNIMARC) uses this encoding. iso5428:1984 (encode, decode) ISO 5428:1984. advancegreek (encode, decode) An encoding for Greek used by some vendors (Advance). danmarc (decode) Danmarc (in danish) is an encoding based on UNICODE which is used for DanMARC2 records. EXAMPLES The following command converts from ISO-8859-1 (Latin-1) to UTF-8. yaz-iconv -f ISO-8859-1 -t UTF-8 -X <input.lst >output.lst FILES prefix/bin/yaz-iconv prefix/include/yaz/yaz-iconv.h SEE ALSO yaz(7) iconv(1) YAZ 4.2.30 Index Data yaz-log 7 Conventions and miscellaneous yaz-log Log handling in all yaz-based programs yaz-XXXX DESCRIPTION All YAZ-based programs use a common log subsystem, and should support common command line options for controlling it. This man page documents those. OPTIONS -l logfile Specify the file where the log is to be written. If none is specified, stderr is used. The log is appended to this file. If the file grows overly large, it is silently rotated: It is renamed to logfile.1, logfile.2, .., 9 (old such file is deleted), and a new file is opened. The limit defaults to 1GB, but can be set by the program. The rotating limit can be specified with option -r for the YAZ frontend server (yaz-ztest). Rotation can also be implicitly enabled by using a filename which gets changed for a given date, due to substitutions as given by the strftime(3) function. -v loglevel Specify the logging level. The argument is a set of log level names, separated by commas (no whitespace!), optionally preceded by a '-' to negate that level. Most programs have their own default, often containing fatal,warn,log, and some application-specific values. The default list can be cleared with the word none, or individual bits can be removed by prefixing them with a dash '-'. LOG LEVELS TO CONTROL LOGGING Some of the log levels control the way the log is written. flush causes the log to be flushed after every write. This can have serious implications to performance, and should not be used in production. On the other hand, when debugging a program crash, this can be extremely useful. The option debug implies flush as well. notime prevents the writing of time stamps. This is intended for automatic test scripts, which should produce predictable log files that are easy to compare. GENERAL LOG LEVELS IN YAZ ITSELF YAZ itself uses the following log levels: fatal for fatal errors, that prevent further execution of the program. warn for warnings about things that should be corrected. debug for debugging. This flag may be used temporarily when developing or debugging yaz, or a program that uses yaz. It is practically deprecated, you should be defining and using your own log levels (see below). all turns on almost all hard-coded log levels. loglevel logs information about the log levels used by the program. Every time the log level is changed, lists all bits that are on. Every time a module asks for its log bits, this is logged. This can be used for getting an idea of what log levels are available in any program that uses yaz-log. Start the program with -v none,loglevel, and do some common operations with it. Another way is to grep for yaz_log_module_level in the source code, as in find . -name '*.[ch]' -print | xargs grep yaz_log_module_level | grep '"' | cut -d'"' -f2 | sort -u eventl, malloc, nmem, odr are used internally for debugging yaz. LOG LEVELS FOR CLIENTS zoom logs the calls to the zoom API, which may be useful in debugging client applications. LOG LEVELS FOR SERVERS server logs the server functions on a high level, starting up, listening on a port, etc. session logs individual sessions (connections). request logs a one-liner for each request (init, search, etc). requestdetail logs the details of every request, before it is passed to the back-end, and the results received from it. Each server program (zebra, etc) is supposed to define its own log levels in addition to these. As they depend on the server in question, they can not be described here. See above how to find out about them. LOGGING EXAMPLES See what log levels yaz-ztest is using: yaz-ztest -1 -v none,loglevel 14:43:29-23/11 [loglevel] Setting log level to 4096 = 0x00001000 14:43:29-23/11 [loglevel] Static log bit 00000001 'fatal' is off 14:43:29-23/11 [loglevel] Static log bit 00000002 'debug' is off 14:43:29-23/11 [loglevel] Static log bit 00000004 'warn' is off 14:43:29-23/11 [loglevel] Static log bit 00000008 'log' is off 14:43:29-23/11 [loglevel] Static log bit 00000080 'malloc' is off 14:43:29-23/11 [loglevel] Static log bit 00000800 'flush' is off 14:43:29-23/11 [loglevel] Static log bit 00001000 'loglevel' is ON 14:43:29-23/11 [loglevel] Static log bit 00002000 'server' is off 14:43:29-23/11 [loglevel] Dynamic log bit 00004000 'session' is off 14:43:29-23/11 [loglevel] Dynamic log bit 00008000 'request' is off 14:44:13-23/11 yaz-ztest [loglevel] returning log bit 0x4000 for 'session' 14:44:13-23/11 yaz-ztest [loglevel] returning log bit 0x2000 for 'server' 14:44:13-23/11 yaz-ztest [loglevel] returning NO log bit for 'eventl' 14:44:20-23/11 yaz-ztest [loglevel] returning log bit 0x4000 for 'session' 14:44:20-23/11 yaz-ztest [loglevel] returning log bit 0x8000 for 'request' 14:44:20-23/11 yaz-ztest [loglevel] returning NO log bit for 'requestdetail' 14:44:20-23/11 yaz-ztest [loglevel] returning NO log bit for 'odr' 14:44:20-23/11 yaz-ztest [loglevel] returning NO log bit for 'ztest' See the details of the requests for yaz-ztest ./yaz-ztest -1 -v requestdetail 14:45:35-23/11 yaz-ztest [server] Adding static Z3950 listener on tcp:@:9999 14:45:35-23/11 yaz-ztest [server] Starting server ./yaz-ztest pid=32200 14:45:38-23/11 yaz-ztest [session] Starting session from tcp:127.0.0.1 (pid=32200) 14:45:38-23/11 yaz-ztest [requestdetail] Got initRequest 14:45:38-23/11 yaz-ztest [requestdetail] Id: 81 14:45:38-23/11 yaz-ztest [requestdetail] Name: YAZ 14:45:38-23/11 yaz-ztest [requestdetail] Version: 2.0.28 14:45:38-23/11 yaz-ztest [requestdetail] Negotiated to v3: srch prst del extendedServices namedresults scan sort 14:45:38-23/11 yaz-ztest [request] Init from 'YAZ' (81) (ver 2.0.28) OK 14:45:39-23/11 yaz-ztest [requestdetail] Got SearchRequest. 14:45:39-23/11 yaz-ztest [requestdetail] ResultSet '1' 14:45:39-23/11 yaz-ztest [requestdetail] Database 'Default' 14:45:39-23/11 yaz-ztest [requestdetail] RPN query. Type: Bib-1 14:45:39-23/11 yaz-ztest [requestdetail] term 'foo' (general) 14:45:39-23/11 yaz-ztest [requestdetail] resultCount: 7 14:45:39-23/11 yaz-ztest [request] Search Z: @attrset Bib-1 foo OK:7 hits 14:45:41-23/11 yaz-ztest [requestdetail] Got PresentRequest. 14:45:41-23/11 yaz-ztest [requestdetail] Request to pack 1+1 1 14:45:41-23/11 yaz-ztest [requestdetail] pms=1048576, mrs=1048576 14:45:41-23/11 yaz-ztest [request] Present: [1] 1+1 OK 1 records returned LOG FILENAME EXAMPLES A file with format my_YYYYMMDD.log is where Y, M, D is year, month, and day digits is given as follows -l my_%Y%m%d.log . And since the filename is depending on day, rotaion will occur on midnight. A weekly log could be specified as -l my_%Y%U.log. FILES prefix/include/yaz/log.h prefix/src/log.c SEE ALSO yaz 7 yaz-ztest 8 yaz-client 1 strftime 3 YAZ 4.2.30 Index Data yaz-illclient 1 Commands yaz-illclient ILL client yaz-illclient name=value server-addr DESCRIPTION yaz-illclient is an client which sends an ISO ILL request to a remote server and decodes the response from it. Exactly one server address ( server-addr ) must be specified. OPTIONS -f filename] Specify filename. -v loglevel] Specify the log level -D name=value] Defines name & value pair. -o Enable OCLC authentication. -u user] Specify user. -p password] Specify password. -V Show yaz-illclient version. EXAMPLES None yet. FILES None yet. SEE ALSO yaz(7) YAZ 4.2.30 Index Data yaz-icu 1 Commands yaz-icu YAZ ICU utility yaz-icu -c config -p opt -s -x infile DESCRIPTION yaz-icu is utility which demonstrates the ICU chain module of yaz. (yaz/icu.h). The utility can be used in two ways. It may read some text using an XML configuration for configuring ICU and show text analysis. This mode is triggered by option -c which specififies the configuration to be used. The input file is read from standard input or from a file if infile is specified. The utility may also show ICU information. This is triggered by option -p. OPTIONS -c config Specifies the file containing ICU chain configuration which is XML based. -p type Specifies extra information to be printed about the ICU system. If type is c then ICU converters are printed. If type is l available locales are printed. If type is t available transliterators are printed. -s Specifies that output should include sort key as well. Note that sort key differs between ICU versions. -x Specifies that output should be XML based rather than "text" based. ICU chain configuration The ICU chain configuration speicifies one or more rules to convert text data into tokens. The configuration format is XML based. The toplevel element must be named icu_chain. The icu_chain element has one required attribute locale which specifies the ICU locale to be used in the conversion steps. The icu_chain element must include elements where each element specifies a conversion step. The conversion is performed in the order in which the conversion steps are specified. Each conversion element takes one attribute: rule which serves as argument to the conversion step. The following conversion elements are available: casemap Converts case and rule specifies how: l Lowercase using ICU function u_strToLower. u Upper case using ICU function u_strToUpper. t To title using UCU function u_strToTitle. f Fold case using ICU function u_strFoldCase. display This is a meta step which specifies that a term/token is to be displayed. This term is retrieved in an application using function icu_chain_token_display (yaz/icu.h). transform Specifies an ICU transform rule using a transliterator Identifier. The rule attribute is the transliterator Identifier. See ICU Transforms for more information. transliterate Specifies a rule-based transliterator. The rule attribute is the custom transformation rule to be used. See ICU Transforms for more information. tokenize Breaks / tokenizes a string into components using ICU functions ubrk_open, ubrk_setText, .. . The rule is one of: l Line. ICU: UBRK_LINE. s Sentence. ICU: UBRK_SENTENCE. w Word. ICU: UBRK_WORD. c Character. ICU: UBRK_CHARACTER. t Title. ICU: UBRK_TITLE. EXAMPLES The following command analyzes text in file text using ICU chain configuration chain.xml: cat text | yaz-icu -c chain.xml The chain.xml might look as follows: <icu_chain locale="en"> <transform rule="[:Control:] Any-Remove"/> <tokenize rule="w"/> <transform rule="[[:WhiteSpace:][:Punctuation:]] Remove"/> <transliterate rule="xy > z"/> <display/> <casemap rule="l"/> </icu_chain> SEE ALSO yaz 7 ICU Home ICU Transforms YAZ 4.2.30 Index Data yaz-url 1 Commands yaz-url YAZ URL fetch utility yaz-url -H name:value -m method -O fname -p fname -u user/password -x proxy url DESCRIPTION yaz-url is utility to get web content. It is very limited in functionality compared to programs such as curl, wget. The options must be precede the URL given on the command line to take effect. Fetched HTTP content is written to stdout, unless option -O is given. OPTIONS -H name:value Specifies HTTP header content with name and value. This option can be given multiple times (for different names, of course). -m method Specifies the HTTP method to be used for the next URL. Default is method "GET". However, option -p sets it to "POST". -O fname Sets output filename for HTTP content. -p fname Sets a file to be POSTed in the folloing URL. -u user/password Specifies a user and a password to be uesd in HTTP basic authentication in the following URL fetch. The user and password must be separated by a slash (this it is not possible to specify a user with a slash in it). -x proxy Specifies a proxy to be used for URL fetch. SEE ALSO yaz 7 YAZ 4.2.30 Index Data Bib-1 Attribute Set 7 Conventions and miscellaneous bib1-attr Bib-1 Attribute Set DESCRIPTION This reference entry lists the Bib-1 attribute set types and values. TYPES The Bib-1 attribute defines six attribute types: Use (1), Relation (2), Position (3), Structure (4), Truncation (5) and completeness (6). USE (1) 1 Personal-name 2 Corporate-name 3 Conference-name 4 Title 5 Title-series 6 Title-uniform 7 ISBN 8 ISSN 9 LC-card-number 10 BNB-card-number 11 BGF-number 12 Local-number 13 Dewey-classification 14 UDC-classification 15 Bliss-classification 16 LC-call-number 17 NLM-call-number 18 NAL-call-number 19 MOS-call-number 20 Local-classification 21 Subject-heading 22 Subject-Rameau 23 BDI-index-subject 24 INSPEC-subject 25 MESH-subject 26 PA-subject 27 LC-subject-heading 28 RVM-subject-heading 29 Local-subject-index 30 Date 31 Date-of-publication 32 Date-of-acquisition 33 Title-key 34 Title-collective 35 Title-parallel 36 Title-cover 37 Title-added-title-page 38 Title-caption 39 Title-running 40 Title-spine 41 Title-other-variant 42 Title-former 43 Title-abbreviated 44 Title-expanded 45 Subject-precis 46 Subject-rswk 47 Subject-subdivision 48 Number-natl-biblio 49 Number-legal-deposit 50 Number-govt-pub 51 Number-music-publisher 52 Number-db 53 Number-local-call 54 Code-language 55 Code-geographic 56 Code-institution 57 Name-and-title 58 Name-geographic 59 Place-publication 60 CODEN 61 Microform-generation 62 Abstract 63 Note 1000 Author-title 1001 Record-type 1002 Name 1003 Author 1004 Author-name-personal 1005 Author-name-corporate 1006 Author-name-conference 1007 Identifier-standard 1008 Subject-LC-childrens 1009 Subject-name-personal 1010 Body-of-text 1011 Date/time-added-to-db 1012 Date/time-last-modified 1013 Authority/format-id 1014 Concept-text 1015 Concept-reference 1016 Any 1017 Server-choice 1018 Publisher 1019 Record-source 1020 Editor 1021 Bib-level 1022 Geographic-class 1023 Indexed-by 1024 Map-scale 1025 Music-key 1026 Related-periodical 1027 Report-number 1028 Stock-number 1030 Thematic-number 1031 Material-type 1032 Doc-id 1033 Host-item 1034 Content-type 1035 Anywhere 1036 Author-Title-Subject RELATION (2) 1 Less than 2 Less than or equal 3 Equal 4 Greater or equal 5 Greater than 6 Not equal 100 Phonetic 101 Stem 102 Relevance 103 AlwaysMatches POSITION (3) 1 First in field 2 First in subfield 3 Any position in field STRUCTURE (4) 1 Phrase 2 Word 3 Key 4 Year 5 Date (normalized) 6 Word list 100 Date (un-normalized) 101 Name (normalized) 102 Name (un-normalized) 103 Structure 104 Urx 105 Free-form-text 106 Document-text 107 Local-number 108 String 109 Numeric-string TRUNCATION (5) 1 Right truncation 2 Left truncation 3 Left and right truncation 100 Do not truncate 101 Process # in search term . regular #=.* 102 RegExpr-1 103 RegExpr-2 104 Process # ?n . regular: #=., ?n=.{0,n} or ?=.* Z39.58 Thw 105-106 truncation attributes below are only supported by Index Data's Zebra server. 105 Process * ! regular: *=.*, !=. and right truncate 106 Process * ! regular: *=.*, !=. COMPLETENSS (6) 1 Incomplete subfield 2 Complete subfield 3 Complete field SORTING (7) 1 ascending 2 descending Type 7 is an Index Data extension to RPN queries that allows embedding a sort critieria into a query. SEE ALSO Bib-1 Attribute Set Attibute Set Bib-1 Semantics. YAZ 4.2.30 Index Data yaz-json-parse 1 Commands yaz-json-parse YAZ JSON parser yaz-json-parse -p DESCRIPTION yaz-json-parse is utility which demonstrates the JSON API of YAZ. (yaz/json.h). The program attempts to parse a JSON from standard input (stdin). It will return exit code 1 if parsing fails and the parsing error message will be printed to standard error (stderr). The program returns exit code 0 parsing succeeds and return no output, unless -p is given (see below). OPTIONS -p Makes the JSON parser echo the JSON result string to standard output - if parsing from stdin was successful. SEE ALSO yaz 7 yaz-4.2.30/doc/future.xml0000644000175000017500000000345311654451754012146 00000000000000 Future Directions We have a new and better version of the front-end server on the drawing board. Resources and external commitments will govern when we'll be able to do something real with it. Features should include greater flexibility, greater support for access/resource control, and easy support for Explain (possibly with Zebra as an extra database engine). &yaz; is a BER toolkit and as such should support all protocols out there based on that. We'd like to see running ILL applications. It shouldn't be that hard. Another thing that would be interesting is LDAP. Maybe a generic framework for doing IR using both LDAP and Z39.50 transparently. The SOAP implementation is incomplete. In the future we hope to add more features to it. Perhaps make a WSDL/XML Schema compiler. The authors of libxml2 are already working on XML Schema / RelaxNG compilers so this may not be too hard. It would be neat to have a proper module mechanism for the Generic Frontend Server so that backend would be dynamically loaded (as shared objects / DLLs). Other than that, &yaz; generally moves in the directions which appear to make the most people happy (including ourselves, as prime users of the software). If there's something you'd like to see in here, then drop us a note and let's see what we can come up with. yaz-4.2.30/doc/tools.html0000644000175000017500000017365111741237744012146 00000000000000Chapter 7. Supporting Tools

Chapter 7. Supporting Tools

In support of the service API - primarily the ASN module, which provides the pro-grammatic interface to the Z39.50 APDUs, YAZ contains a collection of tools that support the development of applications.

1. Query Syntax Parsers

Since the type-1 (RPN) query structure has no direct, useful string representation, every origin application needs to provide some form of mapping from a local query notation or representation to a Z_RPNQuery structure. Some programmers will prefer to construct the query manually, perhaps using odr_malloc() to simplify memory management. The YAZ distribution includes three separate, query-generating tools that may be of use to you.

1.1. Prefix Query Format

Since RPN or reverse polish notation is really just a fancy way of describing a suffix notation format (operator follows operands), it would seem that the confusion is total when we now introduce a prefix notation for RPN. The reason is one of simple laziness - it's somewhat simpler to interpret a prefix format, and this utility was designed for maximum simplicity, to provide a baseline representation for use in simple test applications and scripting environments (like Tcl). The demonstration client included with YAZ uses the PQF.

Note

The PQF have been adopted by other parties developing Z39.50 software. It is often referred to as Prefix Query Notation - PQN.

The PQF is defined by the pquery module in the YAZ library. There are two sets of function that have similar behavior. First set operates on a PQF parser handle, second set doesn't. First set set of functions are more flexible than the second set. Second set is obsolete and is only provided to ensure backwards compatibility.

First set of functions all operate on a PQF parser handle:

     #include <yaz/pquery.h>

     YAZ_PQF_Parser yaz_pqf_create (void);

     void yaz_pqf_destroy (YAZ_PQF_Parser p);

     Z_RPNQuery *yaz_pqf_parse (YAZ_PQF_Parser p, ODR o, const char *qbuf);

     Z_AttributesPlusTerm *yaz_pqf_scan (YAZ_PQF_Parser p, ODR o,
                          Odr_oid **attributeSetId, const char *qbuf);


     int yaz_pqf_error (YAZ_PQF_Parser p, const char **msg, size_t *off);
    

A PQF parser is created and destructed by functions yaz_pqf_create and yaz_pqf_destroy respectively. Function yaz_pqf_parse parses query given by string qbuf. If parsing was successful, a Z39.50 RPN Query is returned which is created using ODR stream o. If parsing failed, a NULL pointer is returned. Function yaz_pqf_scan takes a scan query in qbuf. If parsing was successful, the function returns attributes plus term pointer and modifies attributeSetId to hold attribute set for the scan request - both allocated using ODR stream o. If parsing failed, yaz_pqf_scan returns a NULL pointer. Error information for bad queries can be obtained by a call to yaz_pqf_error which returns an error code and modifies *msg to point to an error description, and modifies *off to the offset within last query were parsing failed.

The second set of functions are declared as follows:

     #include <yaz/pquery.h>

     Z_RPNQuery *p_query_rpn (ODR o, oid_proto proto, const char *qbuf);

     Z_AttributesPlusTerm *p_query_scan (ODR o, oid_proto proto,
                             Odr_oid **attributeSetP, const char *qbuf);

     int p_query_attset (const char *arg);
    

The function p_query_rpn() takes as arguments an ODR stream (see section The ODR Module) to provide a memory source (the structure created is released on the next call to odr_reset() on the stream), a protocol identifier (one of the constants PROTO_Z3950 and PROTO_SR), an attribute set reference, and finally a null-terminated string holding the query string.

If the parse went well, p_query_rpn() returns a pointer to a Z_RPNQuery structure which can be placed directly into a Z_SearchRequest. If parsing failed, due to syntax error, a NULL pointer is returned.

The p_query_attset specifies which attribute set to use if the query doesn't specify one by the @attrset operator. The p_query_attset returns 0 if the argument is a valid attribute set specifier; otherwise the function returns -1.

The grammar of the PQF is as follows:


     query ::= top-set query-struct.

     top-set ::= [ '@attrset' string ]

     query-struct ::= attr-spec | simple | complex | '@term' term-type query

     attr-spec ::= '@attr' [ string ] string query-struct

     complex ::= operator query-struct query-struct.

     operator ::= '@and' | '@or' | '@not' | '@prox' proximity.

     simple ::= result-set | term.

     result-set ::= '@set' string.

     term ::= string.

     proximity ::= exclusion distance ordered relation which-code unit-code.

     exclusion ::= '1' | '0' | 'void'.

     distance ::= integer.

     ordered ::= '1' | '0'.

     relation ::= integer.

     which-code ::= 'known' | 'private' | integer.

     unit-code ::= integer.

     term-type ::= 'general' | 'numeric' | 'string' | 'oid' | 'datetime' | 'null'.
    

You will note that the syntax above is a fairly faithful representation of RPN, except for the Attribute, which has been moved a step away from the term, allowing you to associate one or more attributes with an entire query structure. The parser will automatically apply the given attributes to each term as required.

The @attr operator is followed by an attribute specification (attr-spec above). The specification consists of an optional attribute set, an attribute type-value pair and a sub-query. The attribute type-value pair is packed in one string: an attribute type, an equals sign, and an attribute value, like this: @attr 1=1003. The type is always an integer but the value may be either an integer or a string (if it doesn't start with a digit character). A string attribute-value is encoded as a Type-1 ``complex'' attribute with the list of values containing the single string specified, and including no semantic indicators.

Version 3 of the Z39.50 specification defines various encoding of terms. Use @term type string, where type is one of: general, numeric or string (for InternationalString). If no term type has been given, the general form is used. This is the only encoding allowed in both versions 2 and 3 of the Z39.50 standard.

1.1.1. Using Proximity Operators with PQF

Note

This is an advanced topic, describing how to construct queries that make very specific requirements on the relative location of their operands. You may wish to skip this section and go straight to the example PQF queries.

Warning

Most Z39.50 servers do not support proximity searching, or support only a small subset of the full functionality that can be expressed using the PQF proximity operator. Be aware that the ability to express a query in PQF is no guarantee that any given server will be able to execute it.

The proximity operator @prox is a special and more restrictive version of the conjunction operator @and. Its semantics are described in section 3.7.2 (Proximity) of Z39.50 the standard itself, which can be read on-line at http://www.loc.gov/z3950/agency/markup/09.html#3.7.2

In PQF, the proximity operation is represented by a sequence of the form

@prox exclusion distance ordered relation which-code unit-code
	

in which the meanings of the parameters are as described in in the standard, and they can take the following values:

  • exclusion.  0 = false (i.e. the proximity condition specified by the remaining parameters must be satisfied) or 1 = true (the proximity condition specified by the remaining parameters must not be satisifed).

  • distance.  An integer specifying the difference between the locations of the operands: e.g. two adjacent words would have distance=1 since their locations differ by one unit.

  • ordered.  1 = ordered (the operands must occur in the order the query specifies them) or 0 = unordered (they may appear in either order).

  • relation.  Recognised values are 1 (lessThan), 2 (lessThanOrEqual), 3 (equal), 4 (greaterThanOrEqual), 5 (greaterThan) and 6 (notEqual).

  • which-code.  known or k (the unit-code parameter is taken from the well-known list of alternatives described in below) or private or p (the unit-code paramater has semantics specific to an out-of-band agreement such as a profile).

  • unit-code.  If the which-code parameter is known then the recognised values are 1 (character), 2 (word), 3 (sentence), 4 (paragraph), 5 (section), 6 (chapter), 7 (document), 8 (element), 9 (subelement), 10 (elementType) and 11 (byte). If which-code is private then the acceptable values are determined by the profile.

(The numeric values of the relation and well-known unit-code parameters are taken straight from the ASN.1 of the proximity structure in the standard.)

1.1.2. PQF queries

Example 7.1. PQF queries using simple terms

	dylan

	"bob dylan"
       


Example 7.2. PQF boolean operators

	@or "dylan" "zimmerman"

	@and @or dylan zimmerman when

	@and when @or dylan zimmerman
       


Example 7.3. PQF references to result sets

	@set Result-1

	@and @set seta @set setb
       


Example 7.4. Attributes for terms

	@attr 1=4 computer

	@attr 1=4 @attr 4=1 "self portrait"

	@attrset exp1 @attr 1=1 CategoryList

	@attr gils 1=2008 Copenhagen

	@attr 1=/book/title computer
       


Example 7.5. PQF Proximity queries

	@prox 0 3 1 2 k 2 dylan zimmerman
       

Note

Here the parameters 0, 3, 1, 2, k and 2 represent exclusion, distance, ordered, relation, which-code and unit-code, in that order. So:

  • exclusion = 0: the proximity condition must hold

  • distance = 3: the terms must be three units apart

  • ordered = 1: they must occur in the order they are specified

  • relation = 2: lessThanOrEqual (to the distance of 3 units)

  • which-code is ``known'', so the standard unit-codes are used

  • unit-code = 2: word.

So the whole proximity query means that the words dylan and zimmerman must both occur in the record, in that order, differing in position by three or fewer words (i.e. with two or fewer words between them.) The query would find ``Bob Dylan, aka. Robert Zimmerman'', but not ``Bob Dylan, born as Robert Zimmerman'' since the distance in this case is four.


Example 7.6. PQF specification of search term type

	@term string "a UTF-8 string, maybe?"
       


Example 7.7. PQF mixed queries

	@or @and bob dylan @set Result-1
	
	@attr 4=1 @and @attr 1=1 "bob dylan" @attr 1=4 "slow train coming"
	
	@and @attr 2=4 @attr gils 1=2038 -114 @attr 2=2 @attr gils 1=2039 -109
      

Note

The last of these examples is a spatial search: in the GILS attribute set, access point 2038 indicates West Bounding Coordinate and 2030 indicates East Bounding Coordinate, so the query is for areas extending from -114 degrees to no more than -109 degrees.


1.2. CCL

Not all users enjoy typing in prefix query structures and numerical attribute values, even in a minimalistic test client. In the library world, the more intuitive Common Command Language - CCL (ISO 8777) has enjoyed some popularity - especially before the widespread availability of graphical interfaces. It is still useful in applications where you for some reason or other need to provide a symbolic language for expressing boolean query structures.

1.2.1. CCL Syntax

The CCL parser obeys the following grammar for the FIND argument. The syntax is annotated by in the lines prefixed by --.

      CCL-Find ::= CCL-Find Op Elements
                | Elements.

      Op ::= "and" | "or" | "not"
      -- The above means that Elements are separated by boolean operators.

      Elements ::= '(' CCL-Find ')'
                | Set
                | Terms
                | Qualifiers Relation Terms
                | Qualifiers Relation '(' CCL-Find ')'
                | Qualifiers '=' string '-' string
      -- Elements is either a recursive definition, a result set reference, a
      -- list of terms, qualifiers followed by terms, qualifiers followed
      -- by a recursive definition or qualifiers in a range (lower - upper).

      Set ::= 'set' = string
      -- Reference to a result set

      Terms ::= Terms Prox Term
             | Term
      -- Proximity of terms.

      Term ::= Term string
            | string
      -- This basically means that a term may include a blank

      Qualifiers ::= Qualifiers ',' string
                  | string
      -- Qualifiers is a list of strings separated by comma

      Relation ::= '=' | '>=' | '<=' | '<>' | '>' | '<'
      -- Relational operators. This really doesn't follow the ISO8777
      -- standard.

      Prox ::= '%' | '!'
      -- Proximity operator

     

Example 7.8. CCL queries

The following queries are all valid:

       dylan
       
       "bob dylan"
       
       dylan or zimmerman
       
       set=1
       
       (dylan and bob) or set=1
       
      

Assuming that the qualifiers ti, au and date are defined we may use:

       ti=self portrait
       
       au=(bob dylan and slow train coming)

       date>1980 and (ti=((self portrait)))
       
      

1.2.2. CCL Qualifiers

Qualifiers are used to direct the search to a particular searchable index, such as title (ti) and author indexes (au). The CCL standard itself doesn't specify a particular set of qualifiers, but it does suggest a few short-hand notations. You can customize the CCL parser to support a particular set of qualifiers to reflect the current target profile. Traditionally, a qualifier would map to a particular use-attribute within the BIB-1 attribute set. It is also possible to set other attributes, such as the structure attribute.

A CCL profile is a set of predefined CCL qualifiers that may be read from a file or set in the CCL API. The YAZ client reads its CCL qualifiers from a file named default.bib. There are four types of lines in a CCL profile: qualifier specification, qualifier alias, comments and directives.

1.2.2.1. Qualifier specification

A qualifier specification is of the form:

qualifier-name [attributeset,]type=val [attributeset,]type=val ...

where qualifier-name is the name of the qualifier to be used (eg. ti), type is attribute type in the attribute set (Bib-1 is used if no attribute set is given) and val is attribute value. The type can be specified as an integer or as it be specified either as a single-letter: u for use, r for relation,p for position, s for structure,t for truncation or c for completeness. The attributes for the special qualifier name term are used when no CCL qualifier is given in a query.

Table 7.1. Common Bib-1 attributes

TypeDescription
u=value Use attribute (1). Common use attributes are 1 Personal-name, 4 Title, 7 ISBN, 8 ISSN, 30 Date, 62 Subject, 1003 Author), 1016 Any. Specify value as an integer.
r=value Relation attribute (2). Common values are 1 <, 2 <=, 3 =, 4 >=, 5 >, 6 <>, 100 phonetic, 101 stem, 102 relevance, 103 always matches.
p=value Position attribute (3). Values: 1 first in field, 2 first in any subfield, 3 any position in field.
s=value Structure attribute (4). Values: 1 phrase, 2 word, 3 key, 4 year, 5 date, 6 word list, 100 date (un), 101 name (norm), 102 name (un), 103 structure, 104 urx, 105 free-form-text, 106 document-text, 107 local-number, 108 string, 109 numeric string.
t=value Truncation attribute (5). Values: 1 right, 2 left, 3 left& right, 100 none, 101 process #, 102 regular-1, 103 regular-2, 104 CCL.
c=value Completeness attribute (6). Values: 1 incomplete subfield, 2 complete subfield, 3 complete field.


Refer to Bib-1 Attribute Set(7) or the complete list of Bib-1 attributes

It is also possible to specify non-numeric attribute values, which are used in combination with certain types. The special combinations are:

Table 7.2. Special attribute combos

NameDescription
s=pw The structure is set to either word or phrase depending on the number of tokens in a term (phrase-word).
s=al Each token in the term is ANDed. (and-list). This does not set the structure at all.
s=ol Each token in the term is ORed. (or-list). This does not set the structure at all.
r=o Allows ranges and the operators greather-than, less-than, ... equals. This sets Bib-1 relation attribute accordingly (relation ordered). A query construct is only treated as a range if dash is used and that is surrounded by white-space. So -1980 is treated as term "-1980" not <= 1980. If - 1980 is used, however, that is treated as a range.
r=r Similar to r=o but assumes that terms are non-negative (not prefixed with -). Thus, a dash will always be treated as a range. The construct 1980-1990 is treated as a range with r=r but as a single term "1980-1990" with r=o. The special attribute r=r is available in YAZ 2.0.24 or later.
t=l Allows term to be left-truncated. If term is of the form ?x, the resulting Type-1 term is x and truncation is left.
t=r Allows term to be right-truncated. If term is of the form x?, the resulting Type-1 term is x and truncation is right.
t=n If term is does not include ?, the truncation attribute is set to none (100).
t=b Allows term to be both left&right truncated. If term is of the form ?x?, the resulting term is x and trunctation is set to both left&right.
t=x Allows masking anywhere in a term, thus fully supporting # (mask one character) and ? (zero or more of any). If masking is used, trunction is set to 102 (regexp-1 in term) and the term is converted accordingly to a regular expression.
t=z Allows masking anywhere in a term, thus fully supporting # (mask one character) and ? (zero or more of any). If masking is used, trunction is set to 104 (Z39.58 in term) and the term is converted accordingly to Z39.58 masking term - actually the same truncation as CCL itself.


Example 7.9. CCL profile

Consider the following definition:

	ti       u=4 s=1
	au       u=1 s=1
	term     s=105
	ranked   r=102
	date     u=30 r=o
      

ti and au both set structure attribute to phrase (s=1). ti sets the use-attribute to 4. au sets the use-attribute to 1. When no qualifiers are used in the query the structure-attribute is set to free-form-text (105) (rule for term). The date sets the relation attribute to the relation used in the CCL query and sets the use attribute to 30 (Bib-1 Date).

You can combine attributes. To Search for "ranked title" you can do

	 ti,ranked=knuth computer
	

which will set relation=ranked, use=title, structure=phrase.

Query

	 date > 1980
	

is a valid query. But

	 ti > 1980
	

is invalid.


1.2.2.2. Qualifier alias

A qualifier alias is of the form:

q q1 q2 ..

which declares q to be an alias for q1, q2... such that the CCL query q=x is equivalent to q1=x or q2=x or ....

1.2.2.3. Comments

Lines with white space or lines that begin with character # are treated as comments.

1.2.2.4. Directives

Directive specifications takes the form

@directive value

Table 7.3. CCL directives

NameDescriptionDefault
truncationTruncation character?
fieldSpecifies how multiple fields are to be combined. There are two modes: or: multiple qualifier fields are ORed, merge: attributes for the qualifier fields are merged and assigned to one term. merge
caseSpecificies if CCL operatores and qualifiers should be compared with case sensitivity or not. Specify 0 for case sensitive; 1 for case insensitive.0
andSpecifies token for CCL operator AND.and
orSpecifies token for CCL operator OR.or
notSpecifies token for CCL operator NOT.not
setSpecifies token for CCL operator SET.set

1.2.3. CCL API

All public definitions can be found in the header file ccl.h. A profile identifier is of type CCL_bibset. A profile must be created with the call to the function ccl_qual_mk which returns a profile handle of type CCL_bibset.

To read a file containing qualifier definitions the function ccl_qual_file may be convenient. This function takes an already opened FILE handle pointer as argument along with a CCL_bibset handle.

To parse a simple string with a FIND query use the function

struct ccl_rpn_node *ccl_find_str (CCL_bibset bibset, const char *str,
                                   int *error, int *pos);
     

which takes the CCL profile (bibset) and query (str) as input. Upon successful completion the RPN tree is returned. If an error occur, such as a syntax error, the integer pointed to by error holds the error code and pos holds the offset inside query string in which the parsing failed.

An English representation of the error may be obtained by calling the ccl_err_msg function. The error codes are listed in ccl.h.

To convert the CCL RPN tree (type struct ccl_rpn_node *) to the Z_RPNQuery of YAZ the function ccl_rpn_query must be used. This function which is part of YAZ is implemented in yaz-ccl.c. After calling this function the CCL RPN tree is probably no longer needed. The ccl_rpn_delete destroys the CCL RPN tree.

A CCL profile may be destroyed by calling the ccl_qual_rm function.

The token names for the CCL operators may be changed by setting the globals (all type char *) ccl_token_and, ccl_token_or, ccl_token_not and ccl_token_set. An operator may have aliases, i.e. there may be more than one name for the operator. To do this, separate each alias with a space character.

1.3. CQL

CQL - Common Query Language - was defined for the SRU protocol. In many ways CQL has a similar syntax to CCL. The objective of CQL is different. Where CCL aims to be an end-user language, CQL is the protocol query language for SRU.

Tip

If you are new to CQL, read the Gentle Introduction.

The CQL parser in YAZ provides the following:

  • It parses and validates a CQL query.

  • It generates a C structure that allows you to convert a CQL query to some other query language, such as SQL.

  • The parser converts a valid CQL query to PQF, thus providing a way to use CQL for both SRU servers and Z39.50 targets at the same time.

  • The parser converts CQL to XCQL. XCQL is an XML representation of CQL. XCQL is part of the SRU specification. However, since SRU supports CQL only, we don't expect XCQL to be widely used. Furthermore, CQL has the advantage over XCQL that it is easy to read.

1.3.1. CQL parsing

A CQL parser is represented by the CQL_parser handle. Its contents should be considered YAZ internal (private).

#include <yaz/cql.h>

typedef struct cql_parser *CQL_parser;

CQL_parser cql_parser_create(void);
void cql_parser_destroy(CQL_parser cp);
      

A parser is created by cql_parser_create and is destroyed by cql_parser_destroy.

To parse a CQL query string, the following function is provided:

int cql_parser_string(CQL_parser cp, const char *str);
      

A CQL query is parsed by the cql_parser_string which takes a query str. If the query was valid (no syntax errors), then zero is returned; otherwise -1 is returned to indicate a syntax error.

int cql_parser_stream(CQL_parser cp,
                      int (*getbyte)(void *client_data),
                      void (*ungetbyte)(int b, void *client_data),
                      void *client_data);

int cql_parser_stdio(CQL_parser cp, FILE *f);
      

The functions cql_parser_stream and cql_parser_stdio parses a CQL query - just like cql_parser_string. The only difference is that the CQL query can be fed to the parser in different ways. The cql_parser_stream uses a generic byte stream as input. The cql_parser_stdio uses a FILE handle which is opened for reading.

1.3.2. CQL tree

The the query string is valid, the CQL parser generates a tree representing the structure of the CQL query.

struct cql_node *cql_parser_result(CQL_parser cp);
      

cql_parser_result returns the a pointer to the root node of the resulting tree.

Each node in a CQL tree is represented by a struct cql_node. It is defined as follows:

#define CQL_NODE_ST 1
#define CQL_NODE_BOOL 2
struct cql_node {
    int which;
    union {
        struct {
            char *index;
	    char *index_uri;
            char *term;
            char *relation;
	    char *relation_uri;
            struct cql_node *modifiers;
        } st;
        struct {
            char *value;
            struct cql_node *left;
            struct cql_node *right;
            struct cql_node *modifiers;
        } boolean;
    } u;
};
      

There are two node types: search term (ST) and boolean (BOOL). A modifier is treated as a search term too.

The search term node has five members:

  • index: index for search term. If an index is unspecified for a search term, index will be NULL.

  • index_uri: index URi for search term or NULL if none could be resolved for the index.

  • term: the search term itself.

  • relation: relation for search term.

  • relation_uri: relation URI for search term.

  • modifiers: relation modifiers for search term. The modifiers list itself of cql_nodes each of type ST.

The boolean node represents both and, or, not as well as proximity.

  • left and right: left - and right operand respectively.

  • modifiers: proximity arguments.

1.3.3. CQL to PQF conversion

Conversion to PQF (and Z39.50 RPN) is tricky by the fact that the resulting RPN depends on the Z39.50 target capabilities (combinations of supported attributes). In addition, the CQL and SRU operates on index prefixes (URI or strings), whereas the RPN uses Object Identifiers for attribute sets.

The CQL library of YAZ defines a cql_transform_t type. It represents a particular mapping between CQL and RPN. This handle is created and destroyed by the functions:

cql_transform_t cql_transform_open_FILE (FILE *f);
cql_transform_t cql_transform_open_fname(const char *fname);
void cql_transform_close(cql_transform_t ct);
      

The first two functions create a tranformation handle from either an already open FILE or from a filename respectively.

The handle is destroyed by cql_transform_close in which case no further reference of the handle is allowed.

When a cql_transform_t handle has been created you can convert to RPN.

int cql_transform_buf(cql_transform_t ct,
                      struct cql_node *cn, char *out, int max);
      

This function converts the CQL tree cn using handle ct. For the resulting PQF, you supply a buffer out which must be able to hold at at least max characters.

If conversion failed, cql_transform_buf returns a non-zero SRU error code; otherwise zero is returned (conversion successful). The meanings of the numeric error codes are listed in the SRU specifications at http://www.loc.gov/standards/sru/resources/diagnostics-list.html

If conversion fails, more information can be obtained by calling

int cql_transform_error(cql_transform_t ct, char **addinfop);
      

This function returns the most recently returned numeric error-code and sets the string-pointer at *addinfop to point to a string containing additional information about the error that occurred: for example, if the error code is 15 (``Illegal or unsupported context set''), the additional information is the name of the requested context set that was not recognised.

The SRU error-codes may be translated into brief human-readable error messages using

const char *cql_strerror(int code);
      

If you wish to be able to produce a PQF result in a different way, there are two alternatives.

void cql_transform_pr(cql_transform_t ct,
                      struct cql_node *cn,
                      void (*pr)(const char *buf, void *client_data),
                      void *client_data);

int cql_transform_FILE(cql_transform_t ct,
                       struct cql_node *cn, FILE *f);
      

The former function produces output to a user-defined output stream. The latter writes the result to an already open FILE.

1.3.4. Specification of CQL to RPN mappings

The file supplied to functions cql_transform_open_FILE, cql_transform_open_fname follows a structure found in many Unix utilities. It consists of mapping specifications - one per line. Lines starting with # are ignored (comments).

Each line is of the form


       CQL pattern =   RPN equivalent
      

An RPN pattern is a simple attribute list. Each attribute pair takes the form:


       [settype=value
      

The attribute set is optional. The type is the attribute type, value the attribute value.

The character * (asterisk) has special meaning when used in the RPN pattern. Each occurrence of * is substituted with the CQL matching name (index, relation, qualifier etc). This facility can be used to copy a CQL name verbatim to the RPN result.

The following CQL patterns are recognized:

index.set.name

This pattern is invoked when a CQL index, such as dc.title is converted. set and name are the context set and index name respectively. Typically, the RPN specifies an equivalent use attribute.

For terms not bound by an index the pattern index.cql.serverChoice is used. Here, the prefix cql is defined as http://www.loc.gov/zing/cql/cql-indexes/v1.0/. If this pattern is not defined, the mapping will fail.

The pattern, index.set.* is used when no other index pattern is matched.

qualifier.set.name (DEPRECATED)

For backwards compatibility, this is recognised as a synonym of index.set.name

relation.relation

This pattern specifies how a CQL relation is mapped to RPN. pattern is name of relation operator. Since = is used as separator between CQL pattern and RPN, CQL relations including = cannot be used directly. To avoid a conflict, the names ge, eq, le, must be used for CQL operators, greater-than-or-equal, equal, less-than-or-equal respectively. The RPN pattern is supposed to include a relation attribute.

For terms not bound by a relation, the pattern relation.scr is used. If the pattern is not defined, the mapping will fail.

The special pattern, relation.* is used when no other relation pattern is matched.

relationModifier.mod

This pattern specifies how a CQL relation modifier is mapped to RPN. The RPN pattern is usually a relation attribute.

structure.type

This pattern specifies how a CQL structure is mapped to RPN. Note that this CQL pattern is somewhat to similar to CQL pattern relation. The type is a CQL relation.

The pattern, structure.* is used when no other structure pattern is matched. Usually, the RPN equivalent specifies a structure attribute.

position.type

This pattern specifies how the anchor (position) of CQL is mapped to RPN. The type is one of first, any, last, firstAndLast.

The pattern, position.* is used when no other position pattern is matched.

set.prefix

This specification defines a CQL context set for a given prefix. The value on the right hand side is the URI for the set - not RPN. All prefixes used in index patterns must be defined this way.

set

This specification defines a default CQL context set for index names. The value on the right hand side is the URI for the set.

Example 7.10. CQL to RPN mapping file

This simple file defines two context sets, three indexes and three relations, a position pattern and a default structure.

       set.cql  = http://www.loc.gov/zing/cql/context-sets/cql/v1.1/
       set.dc   = http://www.loc.gov/zing/cql/dc-indexes/v1.0/

       index.cql.serverChoice = 1=1016
       index.dc.title         = 1=4
       index.dc.subject       = 1=21
  
       relation.<             = 2=1
       relation.eq            = 2=3
       relation.scr           = 2=3

       position.any           = 3=3 6=1

       structure.*            = 4=1

      

With the mappings above, the CQL query

        computer
       

is converted to the PQF:

        @attr 1=1016 @attr 2=3 @attr 4=1 @attr 3=3 @attr 6=1 "computer"
       

by rules index.cql.serverChoice, relation.scr, structure.*, position.any.

CQL query

        computer^
       

is rejected, since position.right is undefined.

CQL query

        >my = "http://www.loc.gov/zing/cql/dc-indexes/v1.0/" my.title = x
       

is converted to

        @attr 1=4 @attr 2=3 @attr 4=1 @attr 3=3 @attr 6=1 "x"
       


Example 7.11. CQL to RPN string attributes

In this example we allow any index to be passed to RPN as a use attribute.

       # Identifiers for prefixes used in this file. (index.*)
       set.cql  = info:srw/cql-context-set/1/cql-v1.1
       set.rpn  = http://bogus/rpn
       set      = http://bogus/rpn

       # The default index when none is specified by the query
       index.cql.serverChoice     = 1=any

       index.rpn.*                = 1=*
       relation.eq                = 2=3
       structure.*                = 4=1
       position.any               = 3=3

      

The http://bogus/rpn context set is also the default so we can make queries such as

        title = a
       

which is converted to

        @attr 2=3 @attr 4=1 @attr 3=3 @attr 1=title "a"
       


Example 7.12. CQL to RPN using Bath Profile

The file etc/pqf.properties has mappings from the Bath Profile and Dublin Core to RPN. If YAZ is installed as a package it's usually located in /usr/share/yaz/etc and part of the development package, such as libyaz-dev.


1.3.5. CQL to XCQL conversion

Conversion from CQL to XCQL is trivial and does not require a mapping to be defined. There three functions to choose from depending on the way you wish to store the resulting output (XML buffer containing XCQL).

int cql_to_xml_buf(struct cql_node *cn, char *out, int max);
void cql_to_xml(struct cql_node *cn, 
                void (*pr)(const char *buf, void *client_data),
                void *client_data);
void cql_to_xml_stdio(struct cql_node *cn, FILE *f);
      

Function cql_to_xml_buf converts to XCQL and stores result in a user supplied buffer of a given max size.

cql_to_xml writes the result in a user defined output stream. cql_to_xml_stdio writes to a a file.

yaz-4.2.30/doc/bib1-attr.70000644000175000017500000001430311741237741011756 00000000000000'\" t .\" Title: Bib-1 Attribute Set .\" Author: Index Data .\" Generator: DocBook XSL Stylesheets v1.76.1 .\" Date: 04/11/2012 .\" Manual: Conventions and miscellaneous .\" Source: YAZ 4.2.30 .\" Language: English .\" .TH "BIB\-1 ATTRIBUTE SET" "7" "04/11/2012" "YAZ 4.2.30" "Conventions and miscellaneous" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" bib1-attr \- Bib\-1 Attribute Set .SH "DESCRIPTION" .PP This reference entry lists the Bib\-1 attribute set types and values\&. .SH "TYPES" .PP The Bib\-1 attribute defines six attribute types: Use (1), Relation (2), Position (3), Structure (4), Truncation (5) and completeness (6)\&. .SH "USE (1)" .PP .sp .if n \{\ .RS 4 .\} .nf 1 Personal\-name 2 Corporate\-name 3 Conference\-name 4 Title 5 Title\-series 6 Title\-uniform 7 ISBN 8 ISSN 9 LC\-card\-number 10 BNB\-card\-number 11 BGF\-number 12 Local\-number 13 Dewey\-classification 14 UDC\-classification 15 Bliss\-classification 16 LC\-call\-number 17 NLM\-call\-number 18 NAL\-call\-number 19 MOS\-call\-number 20 Local\-classification 21 Subject\-heading 22 Subject\-Rameau 23 BDI\-index\-subject 24 INSPEC\-subject 25 MESH\-subject 26 PA\-subject 27 LC\-subject\-heading 28 RVM\-subject\-heading 29 Local\-subject\-index 30 Date 31 Date\-of\-publication 32 Date\-of\-acquisition 33 Title\-key 34 Title\-collective 35 Title\-parallel 36 Title\-cover 37 Title\-added\-title\-page 38 Title\-caption 39 Title\-running 40 Title\-spine 41 Title\-other\-variant 42 Title\-former 43 Title\-abbreviated 44 Title\-expanded 45 Subject\-precis 46 Subject\-rswk 47 Subject\-subdivision 48 Number\-natl\-biblio 49 Number\-legal\-deposit 50 Number\-govt\-pub 51 Number\-music\-publisher 52 Number\-db 53 Number\-local\-call 54 Code\-language 55 Code\-geographic 56 Code\-institution 57 Name\-and\-title 58 Name\-geographic 59 Place\-publication 60 CODEN 61 Microform\-generation 62 Abstract 63 Note 1000 Author\-title 1001 Record\-type 1002 Name 1003 Author 1004 Author\-name\-personal 1005 Author\-name\-corporate 1006 Author\-name\-conference 1007 Identifier\-standard 1008 Subject\-LC\-childrens 1009 Subject\-name\-personal 1010 Body\-of\-text 1011 Date/time\-added\-to\-db 1012 Date/time\-last\-modified 1013 Authority/format\-id 1014 Concept\-text 1015 Concept\-reference 1016 Any 1017 Server\-choice 1018 Publisher 1019 Record\-source 1020 Editor 1021 Bib\-level 1022 Geographic\-class 1023 Indexed\-by 1024 Map\-scale 1025 Music\-key 1026 Related\-periodical 1027 Report\-number 1028 Stock\-number 1030 Thematic\-number 1031 Material\-type 1032 Doc\-id 1033 Host\-item 1034 Content\-type 1035 Anywhere 1036 Author\-Title\-Subject .fi .if n \{\ .RE .\} .sp .SH "RELATION (2)" .PP .sp .if n \{\ .RS 4 .\} .nf 1 Less than 2 Less than or equal 3 Equal 4 Greater or equal 5 Greater than 6 Not equal 100 Phonetic 101 Stem 102 Relevance 103 AlwaysMatches .fi .if n \{\ .RE .\} .sp .SH "POSITION (3)" .PP .sp .if n \{\ .RS 4 .\} .nf 1 First in field 2 First in subfield 3 Any position in field .fi .if n \{\ .RE .\} .sp .SH "STRUCTURE (4)" .PP .sp .if n \{\ .RS 4 .\} .nf 1 Phrase 2 Word 3 Key 4 Year 5 Date (normalized) 6 Word list 100 Date (un\-normalized) 101 Name (normalized) 102 Name (un\-normalized) 103 Structure 104 Urx 105 Free\-form\-text 106 Document\-text 107 Local\-number 108 String 109 Numeric\-string .fi .if n \{\ .RE .\} .sp .SH "TRUNCATION (5)" .PP .sp .if n \{\ .RS 4 .\} .nf 1 Right truncation 2 Left truncation 3 Left and right truncation 100 Do not truncate 101 Process # in search term \&. regular #=\&.* 102 RegExpr\-1 103 RegExpr\-2 104 Process # ?n \&. regular: #=\&., ?n=\&.{0,n} or ?=\&.* Z39\&.58 .fi .if n \{\ .RE .\} .PP Thw 105\-106 truncation attributes below are only supported by Index Data\*(Aqs Zebra server\&. .sp .if n \{\ .RS 4 .\} .nf 105 Process * ! regular: *=\&.*, !=\&. and right truncate 106 Process * ! regular: *=\&.*, !=\&. .fi .if n \{\ .RE .\} .sp .SH "COMPLETENSS (6)" .PP .sp .if n \{\ .RS 4 .\} .nf 1 Incomplete subfield 2 Complete subfield 3 Complete field .fi .if n \{\ .RE .\} .sp .SH "SORTING (7)" .PP .sp .if n \{\ .RS 4 .\} .nf 1 ascending 2 descending .fi .if n \{\ .RE .\} .PP Type 7 is an Index Data extension to RPN queries that allows embedding a sort critieria into a query\&. .SH "SEE ALSO" .PP \m[blue]\fBBib\-1 Attribute Set\fR\m[]\&\s-2\u[1]\d\s+2 .PP \m[blue]\fBAttibute Set Bib\-1 Semantics\fR\m[]\&\s-2\u[2]\d\s+2\&. .SH "NOTES" .IP " 1." 4 Bib-1 Attribute Set .RS 4 \%http://www.loc.gov/z3950/agency/defns/bib1.html .RE .IP " 2." 4 Attibute Set Bib-1 Semantics .RS 4 \%http://www.loc.gov/z3950/agency/bib1.html .RE yaz-4.2.30/doc/NEWS0000644000175000017500000034021311732052201010564 00000000000000--- 4.2.29 2012/03/20 record_conv: leader spec may be given for marc element. The leader spec is given as attribute leaderspec for element marc. For example to convert a MARC21 record from MARC-8 to UTF-8: record_conv: allow user-XSLT params. For example: record_conv: fix error handling for missing marc charsets. CQL: fix extra terms in wrong order. --- 4.2.28 2012/03/06 record_conv: modify new API for conversion types. The conversion types may be passed in new functions yaz_record_conv_configure_t and yaz_retrieval_configure_t. Removing yaz_record_conv_add_type . Avoid mixed statement/variable declare; fixes compilation with Visual Studio. --- 4.2.27 2012/02/28 Add non-standard SRU diagnostic: 235: "Database does not exist". Couldn't live without it. HTTP 404: "Not found" is just so anonymous. Update SRU to Bib-1 diagnostic maps accordingly. CCL: add two new diagnostics for unsupported masking. The new diagnostics are: "Embedded truncation not supported" and "Single charcacter mask not supported". --- 4.2.26 2012/02/23 CCL: fix use of "term" field in sub queries. Bug introduced in YAZ 4.2.25. --- 4.2.25 2012/01/11 Build YAZ for Ubuntu Oneiric. CCL: allow parantheses for proximity operands. For example CCL query (a) % (b) is now allowed. GFS: fix bend_assoc_is_alive. When cs_get returns 0 the association is marked dead, rather then being destroyed. If not, the session memory is being free'd before the search/scan handler is finished. Also destroy 'request' memory in request_release rather than in various places, which resulted in leaks from time to time. --- 4.2.24 2011/12/21 cql_sortby_to_sortkeys: honor sort prefix. RPN to CQL: always quote resulting terms. For bizarre reasons, JSTOR's SRU server returns 0 hits on ISSN searches unless a CQL term is quoted. The rpn2cql family of functions now always returns quoted CQL terms. Fix CQL to CCL conversion for multiple terms. Add two test cases as well. --- 4.2.23 2011/12/15 Allow =val to be omitted for yaz_uri_to_array. Also, multiple &'s in sequence is treated as one. For example, &&a=b&&&c& is identical to a=b&c= . --- 4.2.22 2011/12/05 Add ZOOM_connection_save_apdu_wrbuf. This function may be used to save APDUs for a connection to a WRBUF. --- 4.2.21 2011/11/23 Fix cql_sortby_to_sortkeys. Completely broken before. Make CCL's @truncation work again. --- 4.2.20 2011/11/09 New ZOOM connection setting: tproxy. It's like proxy, but does not set Z39.50 proxy OID or change HTTP for proxy behavior. Can be used to set resolved address + port for a connection outside ZOOM itself. Fix atoi_n_check digit test. Thanks to Giannis Kosmas for spotting it. --- 4.2.19 2011/11/07 Fix uninitialized variable in Solr spell support (could cause SEGV for SRU response decoding). Error handling for Z_APDU_close uses ZOOM_set_dset_error() to pass back-end's addinfo through into the ZOOM response addinfo. When ZOOM_set_dset_error() is passed an addinfo2 as well as addinfo, they are separated by a colon and a space rather than simply concatenated. --- 4.2.18 2011/10/28 Add support for Solr spell-checking/suggestions through ZOOM. If a Solr target has been configured correctly for spelling-checking and suggestions, these will now be returned on the ResultSet option "suggestions". zoomsh has been extended to show this with the cmd suggestions. --- 4.2.17 2011/09/28 Fix function nmem_strsplit_escape2 which extends nmem_strsplit_escape with a flag whether to substitute escape sequences or not. --- 4.2.16 2011/09/22 Fix nmem_strsplit_escape to substitute escape char properly. New option for zoomsh -e , which makes it abort on first error and return process exit code to indicate success/failure. YAZ options utility supports special option -- which makes all it treat all following arguments as non-options. --- 4.2.15 2011/09/16 Fix yaz_file_path_resolve/yaz_path_fopen/yaz_fopen so that path is not searched if absolute filename is given. Fix conv_xslt() error-reporting when stylesheet is not found. (The value of fullpath is meaningless in this situation.) --- 4.2.14 2011/09/07 Fix problem in CQL sort node creation: un-initialized memory. New ZOOM utility ZOOM_query_sortby2. That takes a strategy parameter: one of "z3950", "type7", "cql", "sru11" or "embed". The "embed" chooses type-7 or CQL sortby depending on whether Type-1 or CQL is actually sent to the target. New sortspec utilities: yaz_srw_sortkeys_to_sort_spec, yaz_sort_spec_to_srw_sortkeys, yaz_sort_spec_to_type and 7yaz_sort_spec_to_cql. rpn2solr supports Z39.58 truncation (104). Thus, CCL truncation mode t=z will make it possible to use both single-character mask (#) and wildcard (?) in CCL . Throw diagnostic for left truncation because that is not supported by SOLR. --- 4.2.13 2011/09/01 Fixes for cql2rpn, cql2ccl and ccl2rpn; mostly in the area of special cases using escapes (\-sequences) and masking. PQF parse fix: A trailing backslash followed by end-of-string (\0) would result in a read one byte beyond string. rpn2ccl may use Z39.50 masking for terms (t=z). ICU check fix. Don't include library -lCrun on Solaris, unless present. ICU check fix: Use --cppflags-searchpath to determine ICU include files; not --cppflags (which seeems like an error in icu-config). --- 4.2.12 2011/08/27 RPM package only cql2ccl: fix conversion of terms: operator characters were not quoted/escaped. --- 4.2.11 2011/08/25 RPM package only ccl2rpn: Conversion to regexp-1 terms (trunc=102). For mode t=x, the CCL parser will map both # and ? to their regular expression quivalents (. and .*). rpn2cql: deal with truncation=102 (regexp-1). And ensure proper quoting of reserved CQL characters. cql2ccl: deal with both * and ? in conversion. Also leave escaped ones as is, so that they are passed through. --- 4.2.10 2011/08/24 ZOOM SRU mode: more aggressive re-connect. Private function prox_unit_name() renamed to yaz_prox_unit_name() and made available as a utility function, declared in rpn2cql_structure() supports proximity nodes (except that the Type-1 proximity node's "exclusion" binary is ignored, as there is no way to express that in CQL). Fixes bug #4564. --- 4.2.9 2011/08/18 Fix SEGV that could occur if set command of zoomsh was given without value (2nd argument). Fix SEGV that could occur if unsupported transport was given for COMSTACK - say https (when SSL was unavailable). Build yaz-url on Windows too. --- 4.2.8 2011/08/11 New utility to get web content. Header is url.h. A command line tool yaz-url is part of the distribution and packages. Fixes for SSL COMSTACK (when gnutls is in use). New functions yaz_base64{encode,decode}. Header is base64.h. --- 4.2.7 2011/08/03 ZOOM C includes HTTP response buffer as additional info if it fails to decode the SRU response. Make wrbuf_json_puts available. --- 4.2.6 2011/07/28 zoom: throw diagnostic for invalid value for option "sru". Before a bad SRU request was sent. Adding new utility wrbuf_vp_puts. Add cclxmlconfig.obj to win/makefile. It was missing completely. --- 4.2.5 2011/07/21 ZOOM HTTP: use absoluteURI's in proxy mode as required by RFC 2616 (HTTP). Fix a bug in handling of cookies. Fix a bug that would occur if proxy + redirect was used at the same time. MARC line mode decoding: be less picky about length given - first 5 digits of header that is. CQL to CCL conversion: deal with CQL proximity (cql_to_ccl function). Changes to decoding of SRU records: a record with recordPacking=xml is modified with a new root element if the recordData contains multiple children elements. This is to make the record XML parseable afterwards. RPN to SOLR conversion: encode special characters. Generic Frontend Server: fix uinitialized member, stepSize. --- 4.2.4 2011/06/21 Fix a bug in SRU decoding of records.. The database records stored had un-initialized memory, but it would only be seen with yaz_record_render and type_spec="ext" . Fix a bug in ccl_qual_dup introduced in 4.2.3. --- 4.2.3 2011/06/17 Add new CCL utility, ccl_qual_dup, which makes a copy of a CCL bibset. --- 4.2.2 2011/06/10 Add new utilities to convert from CQL to CCL . These utilities have prefix cql_to_ccl defined in cql.h. Defensive coding for an off-by-one bug in ucol_getSortKey. This could lead to memory heap corruptions when ICU utilities were in use. --- 4.2.1 2011/06/07 Make compilation work without Libxml2. yaz-client: remove redundant blanks in display of searchResult-1 term hit counts. --- 4.2.0 2011/05/18 CQL: parse CQL sortby spec. The resulting sort spec is stored in the resulting CQL node (tree) in a new node CQL_NODE_SORT. CQL and GFS: add utility cql_sortby_to_sortkeys which converts CQL sortby 1.2 node tree to CQL 1.1 spec. This in turn allows the generic frontend server to only consider srw_sortkeys and support both SRU 1.1 and 1.2. Note that the CQL sortby spec is only converted when the GFS is already converting from CQL to RPN (cql2rpn element). New function nmem_strsplitx. This is like nmem_strsplit but allows us to specify whether to collapse delimitors or not. The existing nmem_strsplit do collapse (collapse parameter = 1). Windows installer: For NSIS, set InstallDir depending on x86/x64. Rename internal func yaz_use_attribute_create. While non-static, this function is not declared in a public header. --- 4.1.7 2011/03/15 Add -lCrun when linking with ICU on Solaris. More quicks character set conversions for OPAC records. --- 4.1.6 2011/03/10 fix problem with record_render: records were converted (character set wise) even if no charset was given. Problem introduced in YAZ 4.1.5. --- 4.1.5 2011/03/08 SRU: add methods for handling DADS SRU-proxy facets. Separate OPAC record character set for ZOOM_record. yaz_record_render allows a character set given as charset=from/opacfrom,to where 'from' is the character set of a bibliographic record, 'opacfrom' is character set of OPAC record and 'to' is the target character set. --- 4.1.4 2011/02/21 yaz-client: show may XML format records. Command show followed by 'format' will format XML records retrieved using Libxml2's xmlDocDumpFormatMemory function. src/stemmer.c: Avoid using unnamed union. It is not supported by some older C compilers. For PHPYAZ: set YAZVERSION, not YAZ_VERSION. --- 4.1.3 2011/01/27 Update yaz.spec to operate on both SLES11 / Centos 5.5. RPM: Release includes 'indexdata' name. Use indexdata in release name so this package can be distinguished from other vendors. yaz-config: Use exec_prefix, libdir, includedir . Use these variables as determined by configure yaz-config: set YAZ_VERSION env. php_yaz relies on it. GFS: Z_PresentStatus_partial_4 for missing record. If bend_fetch handler returns no error and no record, the present request is considered partial (only a subset of the records could be returned by backend), and so it is appropriate to set Present Status to partial-4. --- 4.1.2 2010/11/02 Move yaz-config man pages to section 1. More documentation about SOLR. tcp comstack: change behavior for @-specs (anyaddr). @ listens on AF_INET (IPV4) peers, and @6 listens to AF_INET6 (ipv6) peers. Previously @ listened on AF_INET6 which accepted both IPV4 and IPV6 peers on some Linux systems. However, in general that does not work so YAZ can not rely on that to work. Debian changed behavior in this respect from Debian lenny to Debian squeeze (still testing as of Oct 2010). Refer to: http://www.mail-archive.com/debian-devel@lists.debian.org/msg277726.html zoomsh: remove "debugging" output. Was added by mistake in 4.1.0. --- 4.1.1 2010/10/05 Fix yaz-config output: echo_source not set correctly by configure. --- 4.1.0 2010/10/05 SOLR WebService support for yaz-client and ZOOM. Define record syntax JSON. OID: 1.2.840.10003.5.1000.81.3 . --- 4.0.12 2010/08/17 Z39.50 facet support. Facet specifications are passed for search in other-information with ASN.1 as defined in facet.asn and OID .10.1000.81.5 . Facets are expressed as an Attribute list as known from Type-1/RPN queries. Type 1 is field. Type 2 is sort order. Type 3 is limit (number of entries to get in response). yaz-ztest returns dummy facets if a client asks for them. --- 4.0.11 2010/07/09 CCL fixes: bug 2895 and bug 3539. GR1-display: add comma in display - was removed by mistake in version 4.0.0. Windows installer: bundle MSVCP90.dll - used by icuuc42.dll. SRU: Merge cookies on HTTP redirects (Giannis Kosmas ). --- 4.0.10 2010/06/18 ZOOM C: Add ZOOM_resultset_release. ZOOM_resultset_release releases a result set from a connection. The result set will be on its own thereafter; no operations on it will perform retrievals from a target. Only cached copies are returned. ZOOM C:fix case for HTTP servers responding with Connection:close. Ensure that if there is a current task it is resumed (like fetching more records in a result set) . Bug #3484. PQF parser: use odr_atoi for Odr_int (not atoi) Minor PQF encoding and decoding changes; reformat. PQF decoding: attribute values that contain any non-digits are treated as string attributes (previously decoding only checked for leading character ([0-9]). PQF encoding: attribute string values are not surrounded by double-quotes. --- 4.0.9 2010/05/21 New utility for managing threads - thread_create.h. Add socket pipe utility - spipe.h. The socket pipe has same purpose as Unix pipe . Unfortunately Windows pipes do not work on select/poll - but YAZ' implementation do. Fixes for yaz_cond-functions on Windows 7. DLL export more symbols. zoomsh: show record do NOT render opac. Remove *.la files from Debian and RPM packages. --- 4.0.8 2010/05/11 Debian package libyaz-dev depends on libgnutls-dev again (was removed in YAZ 4.0.6, but due to Libtool it is still needed even though yaz-config do not list libgnutls libs). ZOOM: Use only one WRBUF for returning string results for ZOOM_resultset. Reduces memory usage for ZOOM in general. ZOOM: ZOOM_connection do not use a shared pointer to ZOOM_resultset after ZOOM_resultset is destructed by user. Reverts to YAZ 4.0.4 behavior. --- 4.0.7 2010/05/04 record-conv: fix problem with at least one XSL conversion - due to probably incorrect usage of XML XSL documents. --- 4.0.6 2010/04/29 Fix yaz-config for static mode and the use of SSL (gnutls). --- 4.0.5 2010/04/29 Forward decl timeval struct in mutex.h and gettimeofday.h. yaz-config: fix 'static' mode linking. --- 4.0.4 2010/04/28 Add functions yaz_cond_{create,destroy,wait,signal,broadcast}. These are wrappers for pthreads or Windows. For Windows these are put in a separate DLL: yaz_cond4. libyaz.la (whole source) is compiled with thread. If thread support is enabled enabled, all source of YAZ is compiled with treading support. This allows core utilities such as yaz_log to use thread facilities. Previously (YAZ 3 and YAZ 4 releases), only libyaz_server.la was using thread utilities. This commit moves mutex utilities (mutex.c) from libyaz_server.la to libyaz.la. yaz-json-parse displays leading text until error. --- 4.0.3 2010/04/09 Handle HTTP redirect for SRU GET in yaz-client and ZOOM C. Based on patch from Giannis Kosmas. SRU: no longer URL encode SRU database. The URL for an SRU server is a URL and such is alreeady encoded - at least when given with leading http:// or https://. This reverts behavior to YAZ 3.0.50. Support for new MARC XML notation TurboMARC which like MARCXML is a complete representation of MARC/ISO2709.. This one, however, is more compact and allows for faster processing with XSLT. TurboMARC can be used in the marcdisp.h API, from the yaz-marcdump utility and from the API of ZOOM C. yaz-ztest can be configured - via the database - to perform certain delays when it performs operations search, present and single record fetch. This allows testers to make yaz-ztest act as a real or even slow Z39.50 server. Refer to the yaz-ztest man pages for details. --- 4.0.2 2010/03/09 wrbuf_destroy allows NULL WRBUF passed to it. Fix CCL qualifier aliases (did not work since YAZ 2.1.56). Add ZOOM_connection_close. No fixed size buffers for ZOOM shell - bug #3257. tstodr: make it work on s390 platform. New icu iterator-functions. The new icu_iter-functions makes it possible to use ICU chains from many threads. yaz-client: better syntax check for show command. --- 4.0.1 2010/01/26 New glob file pattern utility. Like POSIX glob. For Windows too. Refer to yaz/file_glob.h. New simple local-file XML include facility which allows file glob-patterns. Refer to yaz/xml_include.h. Utility yaz-json-parse which parses JSON and demonstrates the JSON parser API. ZOOM_record_get supports new parameter "format" which makes it format XML record content. Fix JSON parser WRT start symbol. The start grammar symbol (referred to as JSONText in ECMA-262) is JSONValue, not JSONObject. --- 4.0.0 2010/01/20 Windows binaries for YAZ now compiled with Visual Studio 2008 (VC9). Older versions of YAZ was compiled with Visual Studio 6.0 (1998). Update so/DLL to version 4. Windows version builds YAZ4.DLL. POSIX/Unix builds .so with major version 4. Remove old LOG_-defines from log.h. They have been obsolete and undefined by default for the last 5 years. Odr_int is now of type 'long long'. Used to be 'int' in YAZ 3 series. GFS: Remove socket (int *fd) from search_rr handler. The socket descriptor ptr is a facility that allowed a search handler to supply a socket which would serve as a callback - when search was complete. This facility has now been in use for years. COMSTACK API changes: cs_stackerr, cs_addrstr. COMSTACK method cs_stackerr removed. It is not implemented by tcpip or unix COMSTACK, perhaps for ISO SR which was removed 7 years ago. COMSTACK macro / method cs_addrstr now returns 'const char *' rather than 'char *. The returned string is read-only and should not be modified by applications. COMSTACK cs_close is now a void function - it no longer returns int. No applications check for the value and the implementations has always returned 0. ZOOM: use size_t for scan hit counts and str size. Functions ZOOM_scanset_term and ZOOM_scanset_display_term have changed, so that occ (hit count) and len (string length) are now of type size_t pointer rather than int pointer. This is to be able to represent large hit counts and to also just to use the proper type for string length (strlen result). New JSON parser. Refer to include/yaz/json.h . WRBUF API changes.. For size parameters for WRBUF size_t is now used .. Used to be int in some cases. Many wrbuf_-functions used to return an int indicating some length.. These return values were never used. And so they are now void. ODR: odr_malloc, odr_total now takes size_t for size. clone_z_type: fix leak; occurred for encoding failures. --- 3.0.52 2009/12/03 tcpip comstack: fix use of uinitialized variable in cs_straddr. This bug was introduced in 3.0.51. --- 3.0.51 2009/12/02 tcpip comstack: Remove TCP receiver buffer optimizations for Solaris. tcpip comstack: fix leak for getaddrinfo. Encoding of SRU database is performed by yaz_encode_sru_dbpath_odr or yaz_encode_sru_dbpath_buf. Now used by yaz-client and the ZOOM API. Decoding of SRU "path" database is performed by private function yaz_decode_sru_dbpath_odr . This in turn is used by yaz_srw_decode and yaz_sru_decode in server applications, GFS, yazproxy, metaproxy. yaz-client: honor base command for SRU. Change when database setting is applied for SRU and ensure it is kept when a connection is reset. Change also the way errors are displayed or SRU (decoding of packages). --- 3.0.50 2009/11/02 Add support for extra request / response data for SRU codecs and GFS. The Z_SRW_PDU structure has two new members extraResponseData_{buf,len} for extra data response buffer and length. For the GFS, both request and response data (XML) is carried in extra_args and extra_response_data for the search handler. Patch by Ko van der Sloot. ZOOM: For queries that cannot be converted to the specified rpnCharset, ZOOM now returns a diagnostic on the client-side ('invalid query' / 10010). This fixes bug #2113. yaz-client fix: If cmdfile is passed to yaz-client (option -f) and that cmdfile included a 'quit' command that would result in a memory violation. --- 3.0.49 2009/10/01 Make a number of functions defined in xmlquery.c static. These have never been declared in a public header file (yaz/xmlquery.h) and was made public by mistake. Improve speed of character conversions (iconv utilities). This makes conversions from MARC-8 faster. ZOOM_record_get returns 0 pointer if a MARC record can not be decoded - unless type desired is "raw". This will prevent type "xml" from returning ISO2709 .. Which obviously can not be XML parsed. Fix memory leak in ZOOM that would occur if option apdulog was used on a re-used connection. Frontend server logs HTTP requests. Frontend server now sends Z39.50 close when it times out (sesssion has been idle for too long). Versions 2.0.30 and earlier also sent close. But due to a mistake this was disabled in all versions after that, i.e. the server would just close the socket immediately. yaz-client emits a better message when receiving an unrecognised userInformationField. Skip zero-length subfields when decoding ISO2709. This rare case happens if a record has two FS characters in a sequence. Without this patch there would be a reference beyond char array in using_code_len fragments in marcdisp.c. Fix yaz-marcdump error that would occur if option -n was used (bug #3028). --- 3.0.48 2009/08/28 The show command offered by the zoomsh command now takes a 3d optional parameter type which is what is passed to ZOOM_record. If the type argument is omitted, "render" is used. RPN to CQL conv may use USE string attributes (bug #2978). MarcXchange NS is now info:lc/xmlns/marcxchange-v1 . --- 3.0.47 2009/07/08 Function yaz_xml2query allows a diagnostic element in the PQF XML representation .. diagnostic@code and diagnostic@addinfo is diagnostic code and additional info respectively. The BER BOOLEAN is now the integral type Odr_bool which still happens to be an 'int'. The BER INTEGER which used to be a plain 'int' is now typedef'd to Odr_int. This is still an integral 'int', but it may be changed to 64-bit via a one-liner in nmem.h (NMEM_64=1). The documentation, ASN-1 compiler as well as programs has been updated to use the new types. --- 3.0.46 2009/06/08 zoom: ZOOM_record_get now renders OPAC records when type=xml. Previously only the bibliographic record was rendered. For type=opac, an OPAC record is only returned if it is present. iconv: small fix for encoding of advancegreek. yaz-client: avoid double display of SRU/SRW records (bug #2798). yaz-client: option auto_reconnect=on really reconnects. yaz-client: fix bug #2770 - avoid length limit for auth parameters. server: avoid null ptr ref for for yaz_poll errors. build: fix RPM build for RHEL 5.3. comstack: prefer IPV6 addresses over IPV4 - should refix bug #2350 --- 3.0.45 2009/03/31 Fixed bug #2709: TCP connect returns Invalid argument. Fixed compilation for mingw. Honor charset for raw records (ZOOM_record_get). Fixed use of errno for threaded mode that was seen on Solaris 10. Fixed argument passing with blanks in value for Windows Service. Disable YAZ' own log rotate by default (no 1 GB limit). The variable l_max_size which specifies the log file limit is set to 0 (DISABLED): This is due to the fact that YAZ is most often deployed using logrotate. Also YAZ can not perform log rotate because of unsufficient permissions (setuid). --- 3.0.44 2009/02/17 List supported encodings in man page for yaz-iconv. Fixed missing SSL libs for --libs output Re-established OID record syntax application-xml. Nobody should use it but we don't want to change soname because of this symbol being absent. --- 3.0.42 2009/02/02 YAZ' RPM spec works for both SUSE Linux Enterprise and RedHat Fedora. Added member named_result_sets for init handler struct for the GFS. This allows a server to disable named result sets. Removed OID record syntax application-xml. Added support for rule-based transliterator for ICU wrapper of YAZ. Fixed bug #1902: yaz-icu XML output. Make YAZ checks Emacs friendly. BITSTRING value shows value. Bug #2346. ISO2709 decoding: skip control characters from indicator data. Omit sort key by default in yaz-icu's output. Allow combined single char options (again) for YAZ' options function. Utility yaz-marcdump got option to display YAZ version (-V). Allow YAZ to use ICU 3.4. Added new ICU test case which illustrates removal of diacritics. --- 3.0.41 2008/12/29 Fixed Fixed test that makes VERSION_SHA1 appear on dist versions too. --- 3.0.40 2008/12/29 For configure, using option --without-xml2 also disables Libxslt/Libexslt support. Fixed bug #2352: yaz-marcdump crashes for certain record. Added man page 'bib1-attr' which includes list of common Bib-1 attributes. Added support for Danmarc2 to UTF-8 conversion. Added support for ISO5426 to UTF-8 conversion. zget_InitRequest/zget_InitResponse returns GIT SHA1 hash as part of implementation version. Function yaz_version returns GIT SHA1 hash for parameter sha1_str. --- 3.0.38 2008/11/10 ZOOM C now only fires one ZOOM_EVENT_SEARCH per search-task. Previously, ZOOM_EVENT_SEARCH was fired for each searchRetrieve Response received. ZOOM C now interprets databaseName option for ZOOM connection as path (SRU "database"). Windows version bundled with Libxml2 2.7.1 / Libxslt 1.1.24 / ICU 4.0. Fixed CCL to RPN/PQF conversion which could result in invalid PQF. Dummy Libxml2 types no longer defined in headers of YAZ'. Fixed memory violation for ZOOM C - could occur when SRU diagnostics was received. --- 3.0.36 2008/09/26 Various ODR chapter fixes. Windows version uses libxml2 2.6.32+, libxslt 1.1.23+ and ICU 4.0. Added missing source for Windows compilation, mutex.c. Fixed compilation of YAZ for Visual Studio 2008. Bug #2256. For SRU connections in ZOOM all records up to "count" are now fetched. Fixed crash in generic frontend server (and yaz-ztest) which occurred in Windows due to bad error handling for Libxml2. Added facility for sending arbitrary records (ASN.1 any) using ZOOM C's Extended service update. Patch by Sam Reynolds. New options for ZOOM C's connection, logapdu which makes ZOOM log APDUs. --- 3.0.34 2008/06/18 YAZ uses GNU TLS without the OpenSSL compatibility wrapper. --- 3.0.32 2008/06/12 Fixed memory violation that could occur when decoding UTF-8. This bug was only present in 3.0.30 of YAZ. --- 3.0.30 2008/06/06 Implemented SSL sockets using GNU TLS. OpenSSL is still supported, but GNU TLS is used by default (if found). yaz-ztest returns OPAC records if a client asks for OPAC. Improved speed of MARC-8 encoding. Added support for lossy and loss-less MARC-8 encoding. Changed yaz_record_conv_record to be reentrant for XSLT conversions. Added new Windows Service wrapper (sc). yaz-client's itemorder command may now send a file. Fixed yaz-marcdump to allow the use of NS prefix for record element. Added new function yaz_log_xml_errors. Allow (but warn) unknown XML attributes in MARCXML parsing. Handle G1 sequneces in MARC-8 decoding. Bug #2115. The UTF-8 to MARC-8 conversion now uses a different set of characters for Greek symbols. Bug #2120. --- 3.0.26 2008/02/21 Added yaz_daemon (daemon.h). Fixed bug #2068: pkg-config trouble Fixed bug #395: ZOOM_record / OPAC record encoding problems. --- 3.0.24 2008/01/28 Document --with-xml2 option. Added OPAC XML XSD (etc/opacxml.xsd). Allow glob mask for name attribute in retrieval element for the generic frontend server's retrieval facility. Changed yaz_poll_poll to return yaz_poll_except for all returned events except POLLIN/POLLOUT. Fixed error handling in cs_listen. Bug #2037. --- 3.0.22 2008/01/20 Fixed version in yaz/yaz-version.h. Fixed bug #2027: Crash when closing connection. Changed configure so that ICU support is only enabled if only ICU and Libxml2 is available (because the ICU chain is XML based). --- 3.0.20 2008/01/15 YAZ now makes ICU utilities for Windows. A separate DLL, yaz_icu3.dll, is built. Only this DLL depends on the ICU runtime. yaz-ziffy is no longer part of YAZ. It is distributed separately by Index Data because ziffy's license is GPL2 rather then 'Revised BSD'. Changed license of CCL module to 'Revised BSD'. After consultation with remaining members of the original EUROPAGATE consortium, we are re-issuing the CCL module without a separate license. The software was developed by Index Data as part of a research project. The special license was included to help feed usage information back to the project consortium to support project evaluation. At this time, the project consortium has long-since disbanded, and the majority of the original principals have retired. At the same time, we have significantly modified the software during the following years, to the point where very practically no original code remains. To simplify re-use of the software, we have contacted those members of the consortium who could be reached, and agreed to re-issue the module as a proper part of the YAZ package. Tcl scripts uses /usr/bin/tclsh as preferred shell. CQL closer to being version 1.2 compliant. CQL also allows free-form terms, such as 'title=a b', and thus, make the CQL parser more CCL-like and user-frendly. Fixed bug in ZOOM_options_getl WRT setting of parameter lenp. This bug could make Extended services handling crash in the ZOOM layer. This bug was only present in YAZ 3.0.18. --- 3.0.18 2007/12/19 ziffy uses YAZ' options rather than getopt; getopt is unavailable on some systems. yaz-marcdump reads and writes collection wrapped records. Handle OPAC for record conversion module. Fixes for ICU wrapper. Allow ICU libs to be controlled with --with-icu . --- 3.0.16 2007/11/12 Added yaz_poll which is a wrapper for select/poll. When poll is available and non-buggy, it is used, by yaz_poll . This allows more than 1024 sockets to be in use. Added ICU wrapper library which exposes ICU http://www.icu-project.org/ functionality through an XML based configuration (ICU chain). This system is useful for search facilities such as Pazpar2 and Zebra that needs to perform tokenization of indexed material. The ICU code in a separate library libyaz3_icu.a. Added HTTP tunnel facility for COMSTACK, bug #1752. This is a facility that allows a Web proxy, such as squid, to tunnel Z39.50 traffic. This facility is "transparent" to must applications using YAZ. It's enabled by using pseudo transport connect: followed by the proxy address, followed by command, then follwed by he regular "virtual" addresss. For example, connect:webproxy.com:3128,tcp:z3950.loc.gov:7090/voyager . More MARC-8/UTF-8 conversion fixes. Bugs #1666, #1667, #1778. --- 3.0.14 2007/09/21 Fixed bad memory reference in ZOOM_record - cuased by member not being initialized. This was a problem only in YAZ 3.0.12. Fixed bug in conversion from MARC to XML: Non-XML characters in control fields were not removed. Changed the way C code is generated from codetables.xml. Made a MARC-8 conversion trie for each characterSet section rather than codeTable. This is ensure the code can deal with G0/G1 sequences. Use of a newer version of codetables.xml from Larry Dixson, LOC. Bug #1464. --- 3.0.12 2007/09/12 ZOOM C now handles SRU surrogate diagnostics (i.e. errors returned from ZOOM_record_error). ZOOM C function ZOOM_record_get returns record schema for type="schema". Implemented HTTP Basic authentication to SRU/GET, SRU/POST and SRW requests. Added new ZOOM C connection option 'sru_option' which specifies SRU version. Better SRW-to-Bib-1 diagnostic mapping. ZOOM C and yaz-client announces SRU version 1.2 by default. yaz-client 'sru' command may specifiy both SRU version and transport (SOAP, GET or POST). Fixed in yaz_sru_decode to allow other version than 1.1. --- 3.0.10 2007/08/22 Added support for SRU scan for ZOOM. Added support for the use of the older versions or Extended Service Update in ZOOM. To faciliate this, an option "updateVersion" may be set to the version , 1=first, 2=second, 3=third. The third version is what ZOOM C has used so far. And that, obviously, is the default. Added support for CCL queries in Z39.50 queries sent to the GFS (and therefore in Zebra and in SimpleServer-based applications). The new element in a GFS configuration file, if present, names a CCL qualifier file used to transform incoming CCL queries into Type-1 RPN, which is passed into the back-end search callback function. Added support for HTTP Basic authentication in clients: the SRU/W codec encodes the username/password elements of the PDU structure appropriately, and these may be set using the "user" and "password" options in ZOOM-C applications (the same options that are used for Z39.50 authentication). --- 3.0.8 2007/06/25 Fixed bug #1208: SSL appears to be broken in ZOOM. Fixed bug #1206: Libxml2 include path weirdness. Added oid_name_to_dotstring. Allow elementSetName to be specified for ZOOM C record update. Allow waitAction to be specified for ZOOM C based for Extended Services. Fixed NULL ptr reference bug in yaz-ztest - caused by omitted record syntax OID. Bug introduced in YAZ 3 series. Updated WIN32 build to include Libxml2 2.6.28 / Libxslt 1.1.19. --- 3.0.6 2007/06/06 Fixed bug #1157: yaz-client does not read .yazclientrc from current directory. yaz-client now reads commands from file given by option -f if specified; then tries to read .yazclientrc in current directory. Failing that, it reads .yazclientrc from user's home directory. Added support for correlationInfo Note and ID for Record Update via ZOOM C. Added yaz-client command querycharset which specifies character set for query terms for Z39.50 RPN queries and Z39.50 Scan Requests (termListAndStartPoint). Charset ISO5428:1984 is an alias for ISO5428-1984. Implemented a way to perform scan in a result set using Z39.50. This is achieved by attaching the result set name in the characterInfo (type InternationalString) of OtherInformation in the Scan Request PDU. The result set is identified in the otherinformation by the new OID: USERINFO, Z3950_PREFIX.10.1000.81.4, "Scan-Set This allows for scan in result set and faceted search . Zebra did some of this in the APT term using attribute type 8 and value being result set. Using the OtherInformation approach for this is cleaner and easier to work with in proxies and the like. This facility can be used in yaz-client using new command setscan which takes a result set as first argument, start position (APT) as second. Changed decoding of SRU XML packed records to deal with servers that have recordData with XML data with multiple root nodes. Also make comparison for recordPacking case insensitive. Again, one server returns "XML" where others return "xml". For SRU responses allow Content-Type application/xml as well as text/xml. --- 3.0.4 2007/05/21 Fixed bug in character set conversion of BER strings. Bug introduced in 3.0.0. --- 3.0.2 2007/05/08 For OIDs use Odr_oid type everywhere, i.e. do not assume Odr_oid=int. For OID class, use oid_class consistently. Fixed external handling for SUTRS and Explain records (bug appeared in 3.0 series). Added partial support for ISO5428-1984, which is the "Greek alphabet coded character set for bibliographic information interchange". By Giannis Kosmas. Added documentation on new OID API. --- 3.0.0 2007/05/02 Changes to generic frontend server interface: added new member 'query_charset' for bend_initrequest structure. A backend init handler should set this member to its native character set for query terms. When defined, the frontend server logic will announce this character set to a client if the negotiationModel bit is set by the client. All server implementors are encouraged to specify this. If a backend server does not specify this a warning is issued using yaz_log(YLOG_WARN,..). Added CCL utility to remove terms (stop words) from resulting RPN tree. This is handled by functions with prefix ccl_stop_words_ . New ZOOM C option, "rpnCharset", which allows client-side conversion of terms in RPN queries. Clean-up the CCL API. Moved some internal structures from ccl.h to private header cclp.h. Changed ccl_parser_create so that a Bibset must be supplied. Removed tokenize API from ccl.h - including ccl_parser_find. This is replaced by ccl_parser_find_str which takes a string instead. Split YAZ library into two libs : libyaz.la and libyaz_server.la. libyaz.la is the core of YAZ except the generic frontend server and does not depend on POSIX threads anymore. libyaz_server.la is the generic frontend server facilities and uses POSIX thread functionality if available. The libyaz.la no longer depends on POSIX threads because the number of global structures is limited. NMEM no longer re-uses blocks between threads ; it simply free's memory immediately but allocates in "large" chunks as usual. We don't expect any performance penalties because of this. The yaz_log system is still using a global log_level so caution must be taken when modifying it with yaz_log_init_.. + yaz_log_mask_str. This, however, should not cause any trouble because these functions are called during initialization of application code anyway. `yaz-config --libs server` returns libs for server applications; `yaz-config --libs` returns libs for non-server applications. New OID database - with public definitions in oid_db.h. Removed old OID database including the head oid.h and definitions such as enum oid_value and struct oident. The new OID database uses the same string names as before but the 'protocol' is gone. There are now only two representations raw OID (int *) and string. Functions with prefix yaz_string_to_oid converts from string to OID; functions with prefix yaz_oid_to_string converts the other way. Change to emit_term() in CQL-to-PQF query translation: when a term has the /regexp relation modifier, do not process it for leading and trailing "^" and "*", which have quite different meanings in regular expressions. Attempted fix of bug #976: Segfault in yaz_iconv. The yaz_iconv function write handlers no longer carries a 'last' parameter. This will make yaz_iconv flush "less" characters. A flush is performed by call to yaz_iconv(cd, 0, 0, &outbut, &outbytesleft) . Definition of wrbuf_diags moved to querytowrbuf.h. Function wrbuf_put_zquery removed, because function yaz_query_to_wrbuf does the same. API changes to WRBUF. wrbuf_free removed; replaced by wrbuf_destroy. And wrbuf_puts no longer appends '\0'. Use wrbuf_cstr to get C-string out. Deprecated MARC utility functions removed. Changed prototype of yaz_marc_decode_buf: const char for result and size_t for rsize. Branch split: YAZ_2_1_55_branch --- 2.1.54 2007/03/16 Fix to ZOOM-C so that transparent reconnection is properly handled on connections that are in asynchronous mode. Fixed compilation on OpenBSD 4.0. Large strings in GRS-1 records are now properly displayed in yaz-client. Added character conversion support for "advancegreek"; based on patch from Giannis Kosmas. Fixed yaz_iconv to return YAZ_ICONV_EINVAL if an incomplete MARC-8 combo sequence is met. Before the error was not set so it would be unknown. Adjust yaz-marcdump MARC reader so that it skips until record separator is read --- 2.1.52 2007/03/07 ZOOM-C: Removed hardcoded limit of 1024 sockets in ZOOM_event_sys_poll(). Note that ZOOM_event_sys_select() still has the limit due to the fixed-size fd_set structure used as a bitmask for the FDs to be selected on. Using ACX_PTHREAD macro to check for POSIX threads. Fixed have-vsnprintf check. --- 2.1.50 2007/02/23 Fixes for configure on BSD. Bug #900. Added snprintf/vsnprintf wrappers for systems that don't have limits (heavens forbid). Fixed bug in ZOOM-C's event and task handling. If a ZOOM task was created before all previous tasks were completed and removed from the task queue, the new task could be removed by a mistake. Fixed bug #615: Document retrievalInfo facilities for Frontend Server. Implemented pass-through CQL-to-PQF conversions. Bug #861. Fixed bug #832: Problem with MARC/charset in yaz-client. Fixed bug #668: save command line history for yaz-client. Fixed bug #830: pkg-config support. --- 2.1.48 2007/01/23 Extended ZOOM result set options with two options that may be read by a client: resultSetStatus and presentStatus with values as specified for the ASN.1. See: http://www.loc.gov/z3950/agency/markup/04.html#Search-status Fixed bug #827: Using SSL fails on Debian etch. Fixed bug #826: Weird looking chars for set of MARC records. Implemented alternative Item Order package for ZOOM. If option "doc" is set, that is treated as an ItemOrder with itemRequest being an XML document external. The value of "doc" is the content. Extended the GFS search facility. New member of bend_search_rr 'estimated_hit_count' signals that hits is known to be an estmate (higher or lower than real hit count). New member 'partial_resultset' signals that the search was partial (hit count is lower or equal than real hit count). For Z39.50, the information is stored in resultSetStatus member of SearchResponse APDU. For SRU, the information is signalled via SRU diagnostic 59: "Result set created with valid partial results available". Switched from jade/pdfjdaetex to dblatex for Docbook documentation in PDF. --- 2.1.46 2007/01/13 Implemented bug #806: Deal with HTTP clients sending LF in HTTP headers. Added ZOOM_connection_peek_event. Implemented Generic select hook for ZOOM (bug #803). This is achieved with the following new functions: ZOOM_event_nonblock, ZOOM_connection_process, ZOOM_connection_get_{socket,mask,timeout}, ZOOM_connection_fire_event_{timeout,socket}. The existing blocking event handler, ZOOM_event, is a wrapper for the + blocking ZOOM_event_sys_{poll,select}. Implemented function ccl_xml_config which parses XML version of CCL configuration (bug #798). Fixed bug #797: yaz_marc_write_xml does not honor character conversion. Added timings utility (yaz/timing.h) --- 2.1.44 2007/01/03 Added yaz_marc_write_xml which creates MARCXML/MarcXchange record as Libxml2 tree. Fixed bug #779: Rotation of apdu.log fails. Fixed for character set conversions: Unicode to MARC-8 conversion for certain less preferred UTF-8 sequences. Honor G1 set in MARC-8 decoding. --- 2.1.42 2006/12/17 Fixed bug #775: char conversion does not handle Alternative UTF-8 sequences. Implemented function yaz_marc_read_line which parses MARC line format records. There is a wealth of formats out there. So far, this function reads line records produced by yaz_marc_write_line. yaz-marcdump's options -x, -X, -I, -e have been replaced with the more generic and easier to remember(!) options: -i format and -o format which specifies input format and output format respectively - where format is one of "marc", "marcxml", "line", "marcxchange". Added 'check only' option for MARC utilities. Option -n for yaz-marcdump does not print anything except warnings for records. For yaz-marcdump, added support for MARC split into files (-s) with a given chunk size (-C). Changed the SRU update structures and codecs to reflect the SRU pre 1.0 spec, at http://www.loc.gov/standards/sru/record-update/ This has changed the binary layout of the following structs: Z_SRW_extra_record, Z_SRW_updateRequest, Z_SRW_updateResponse and bend_update_rr . Patch by Ko van der Sloot. Added GFS utility function bend_assoc_is_alive which returns 1 if association is still alive (client is connected); 0 otherwise (client closed connection). This allows busy servers to stop working for impatient clients. Added ziffy: the promiscuous Z39.50 APDU sniffer. until now, ziffy has been a separate piece of software. This version of ziffy has been modified to fit with YAZ. ziffy is copyright Rocco Carbone and covered by GPL v2. Fixed bug #740: Handle SRU records referring to xmlns's outside recordData. Fixed bug #722: Allow Z39.50 Init Options to be specified / retrieved. Client code may now interrogate options such as "init_opt_sort" to find out whether the server claims to support various options. --- 2.1.40 2006/11/27 Added utilities yaz_{set,get}_esn to set/get element set name from record composition. Removed the build of libyazthread.la. The libyaz.so is the threaded version of YAZ and has been so since YAZ 2.1.10. Implemented ZOOM_record_error which returns error information for record (surrogate diagnostic). --- 2.1.38 2006/10/31 Updates for SRU Update by Ko van der Sloot: 1. Changed name from "operation" to "action" 2. Fixed that that "recordIdentifier" was called "recordId". Kept the old versions in the code, marked as 'backward compatible'. 3. Added diagnostics for SRU Update. Fixed bug #709: Records are fetched in wrong format when tasks are queued. Fixed bug #707: CQL->RPN ignores lines with leading spaces. Fixed bug #706: XML hex encoding UTF-8 chars out of range 0-255. For GFS, fixed problem with SRU diagnostic 'First record position out of range' being issued for 0 hits. zoomtst10 part of Windows Build. --- 2.1.36 2006/10/13 Implemented yaz_filepath_comp which splits a path into file path components (required by Zebra 2.0.3+). Change wording of YAZ license to the 'Revised BSD License'. YAZ has used a BSD inspired license until now so this should not have any real impact on anybody. See http://www.opensource.org/licenses/bsd-license.php Fixed bug #687: Missing log lines. Fixed bug #678: CQL to PQF translation does not preserve double-quote escaping. Fixed bug #689: SRU diagnostics to be added. Implemented new ZOOM function, ZOOM_connection_is_idle, which checks whether a connection is idle (no more work do do). --- 2.1.34 2006/10/04 Change type of optval from long to int for invocation of setsockopt with the SO_REUSEADDR option. Thanks to Ateeq A. Altaf, Talis. Added support for specifying the max log file size for the Generic Frontend Server. The size is given with option -r. --- 2.1.32 2006/09/21 Fix problem introduced in YAZ 2.1.28 WRT unix sockets in the ZOOM code. --- 2.1.30 2006/09/17 Fixes for getaddrinfo use, Bugs #655 + #660. These bugs were introduced in YAZ 2.1.28. Fixed bug in Generic Frontend Server that could cause a server to stop accepting new connections. Bug only seen on dual CPU Windows 2003 server. For the generic frontend server, the maximum record size is used as maximum size of incoming packages (SRU + Z39.50). The value until was previously only used in Z39.50 Init negotiation and, later, in a session controlled sizes of records returned. This is controlled using -k option. It can be specified, per server, with element maximumrecordsize in YAZ' GFS XML config. --- 2.1.28 2006/09/04 TCP/IP comstack uses getaddrinfo now to resolve names. It should be IPV6 friendly now. Fixed bug #644: Using Non Reentrant gethostbyname causes SIGSEGV. New option for yaz-marcdump -lpos=value which allows setting a portion of MARC header to a certain value. Fixes for MARC generation when encoded as MARC-8 (bug 642, 643). ZOOM-C reads option extraArgs. If set the value of extraArgs is appended to SRU URI (POST/GET). Value must be URL encoded, such as x-id-a=v1&x-id-b=v2 . --- 2.1.26 2006/08/15 Fixed problem with SRU mode type (soap, get, post) for yaz-client and ZOOM-C. Fixed problem another problem with ZOOM_EVENT_RECV_RECORD . Bug #626. --- 2.1.24 2006/08/08 Fixed MARC ISO2709 encoding routines to deal with character set conversion. Minor changes to GFS logging. Database included in search request log line. Fixes for ZOOM-C: event ZOOM_EVENT_RECV_RECORD was not generated for cached/multiple records. Shared libraries are built by default on Unix+configure. Changed cql2pqf transformation to use a different evaluation order. The new order is: always, relation, structure, position, truncation, index and relationModifier. Old order was: always, relation, relationModifier, structure, index, position, truncation. Note that the the latter ones override former ones for identical attributes.. The new scheme means that it is possible to override any existing attribute with a relationModifier. And also that it is possible to override everything for the index rule (except the ones listed in relationModifier). No order is perfect but this one, we believe, covers more real cases.. The "always" should have been called "default", since the attributes there can be overridden with all the rest. For Libxml2 and friends, YAZ defines YAZ_HAVE_{XML2,XSLT,EXSLT) in the compilation phase, but also for yaz-config --cflags output. This allows us to have public headers with Libxml2 stuff in them . It should also, eventually, make Libxml2 checks redundant in packages using YAZ, such as yazproxy. --- 2.1.22 2006/06/15 Changed SRU update structure bend_update_rr so that SRU diagnostics are stored in uri, message and details.. Previously diagnostics were stored in errcode, errstring. Patch by Ko van der Sloot. Breaks binary compatibility.. but he's probably the only one affected, so. Added support for CCL, compiled on the client side, in ZOOM-C. This is invoked using ZOOM_query_ccl2rpn() with the CCL configuration as input; the resulting query objects can be used for for searching with ZOOM_connection_search() and scanning with ZOOM_connection_scan1(). YAZ' configure searches for OpenSSL by default. SSL comstack uses SL_CTX_use_certificate_chain_file rather than SL_CTX_use_certificate_file. See http://lists.indexdata.dk/pipermail/yazlist/2006-June/001615.html for more info. Thanks to Ko van der Sloot. --- 2.1.20 2006/06/02 Bug #600: SRU GET, POST support for yaz-client. Introduced command 'sru' which selects method SOAP/GET/POST. Allow missingValueAction to be specified for the sortspec string - function yaz_sort_spec. By default, the missing value action is null. Use ! to specify "abort". Use = followed by stringvalue to specify default value. Ensured that Present-handler (if defined) is called in GFS before any call to fetch-hhndler. This now includes piggy-backed presents as well as SRW/U searchRetrieve requests. Documentation for YAZ is now based on the Docbook XML/XSLT using xsltproc + N Walsh's stylesheets. It means that the CVS version of YAZ is no longer depending on jade/openjade or docbook-to-man scripts. PDF is no longer part of the distribution - but can optionally be made using DSSSL/jadetex or FOP. Added retrieval handling support in Generic Frontend Server to support conversion between MARC/XML as well as XSLTtransforms. See etc/yazgfs.xml for an example. Added Authentication support to Generic Frontend Server in SRU mode. Authentication using HTTP Basic is supported, as is the use of 'x-username' and 'x-password' parameters in the request itself. Added support for a new character set MARC8s identical to MARC8 except that it converts combined characters to single Unicode characters in the Latin-1 range (when possible). --- 2.1.18 2006/04/24 ASN.1 compiler 0.4: generates brief Doxygen file header for generated .h/.c files. Utility yaz_iconv now supports conversion to MARC-8. New facilities for the MARC module. The reading - and writing of content are separate methods for the yaz_marc_t handle. The following read functions are available: yaz_marc_read_iso2709 (Reads MARC in ISO2709 format), yaz_marc_read_xml (reads MARC in MARCXML/MarcXchange format). Write functions have prefix yaz_marc_write_.. The existing utilities yaz_marc_decode_wrbuf and yaz_marc_decode_buf are still available. Removed support for OAI-MARC and simplexml (not the simplexml from PHP5). Added a new ZOOM event type ZOOM_EVENT_END which signals no more events to be returned for this connection. --- 2.1.16 2006/03/31 Allow multiple languages and charsets to be specified with yaz-client. Each item must be separated by comma (NO BLANKS). E.g. negcharset iso-8859-1,utf-8 Translation of proximity nodes from CQL into PQF now works. Moved to automake 1.8, 1.9. Added function yaz_log_set_handler which allows a log handler to be installed. This handler will be called for all log messages. Output to file is also produced; but that can be disabled by passing NULL fname to yaz_log_init_file. Fixed another problem with MARC-8 -> ISO-8859-1 conversions. Bug #537. For SRW (including GFS), accept application/soap+xml as content-type for SOAP msg. For GFS in SRU mode, an empty stylesheet in SRU URL (&stylesheet=&) produces NO stylesheet reference even if a default stylesheet is specified in GFS XML config. --- 2.1.14 2006/03/14 Updated Windows package to include yazd.dll + yazd.lib for the Development component. If the environment variable YAZ_LOG is set, then it is used as a string indicating the default level of logging to use if not overridden by calls to yaz_log_init() or yaz_log_init_level(). If it's not defined, then the manifest constant YLOG_DEFAULT_LEVEL is used as before. So, for example, to omit warnings from YAZ logging, export YAZ_LOG=-warn cql_transform() now map structure and other attributes before indexes, so that index-specific structures and other attributes can override defaults. So now a combination of mapping specifications such as: structure.* = 4=1 index.dc.date = 1=date-modified 4=5 does the right thing. cql_transform() now also respects the "always" mapping specification, which establishes an initial set of attributes to be used for all terms except where overridden by more specific attributes associated with the index, relation or modifier. Added SRU-GET and SRU-POST support for ZOOM C. Option "sru" specifies which mode to use; one of "post", "get" or "soap" (SRW, default). Fixes for yaz_iconv routines: changed trie-based character set conversions to use only non-negative values for bit fields due to Sun's C compiler not supporting negative values. Fixed bug in character set conversion yaz_iconv. Some three byte UTF-8 sequences where not read correctly. Fix by Rustam Usmanov. Updated win/makefile to use options, settings which makes things compile with VS C 2005. --- 2.1.12 2006/02/01 Fixed bug in yaz_oi_update which used incorrect value for categoryValue. In ZOOM socket code, use select instead of poll on MacOSX. ZOOM-C now support client-side compilation of CQL into RPN that is sent to the server, enabling CQL to be used against all Z39.50 servers. Use ZOOM_query_cql2rpn() to set the compiled CQL into a ZOOM_query object, and submit it using ZOOM_connection_search(). The CQL-to-RPN translation uses a configuration file, the name of which must be specified in the Connection's "cqlfile" option. ZOOM-C also support CQL scanning, via the new ZOOM_connection_scan1() function, which takes as its start-term parameter a ZOOM_query object (which may have had either CQL or RPN set into it). --- 2.1.10 2005/11/29 Added ZiNG Update Support. New codecs are defined in srw.h. Extended the GFS to support this as well. Backend handler, bend_srw_update, does the update work. Code contributed by Ko van der Sloot. Allow retrieval of Search Result-1 information in ZOOM by the use of options that are attached to a result set. ZOOM documentation updated accordingly. Fixed bug #416: First/second comb characters not handled in the MARC-8 to UTF-8 conversion. Patch by Raj Patel. Added option -m to GFS to control formatting of timestamps in log file. Added 'exit' as synonym for 'quit' in yaz-client Added support for specifying SRW resultSetId + resultSetIdleTime in a Generic Frontend Server's search handler. Refer to include/yaz/backend.h for the new members. Patch by Ko van der Sloot. Added support for SRU POST. It is supported for content-type application/x-www-form-urlencoded only. Patch by Ko van der Sloot. Do not build the separate Multi-threaded (MT) library libyazthread.la. Instead make the library libyaz.la multi-threaded. Threading as a whole can still be disabled by configure option --disable-threads. Previosly, with older GLIBCs there were problems with MT libs under Apache. This has now been fixed a long time ago. Fixed bugs in yaz_log that occurred on Sparc Solaris in Multi-threaded applications. CQL module modified to be case insensitive for relations/indexes/operations. Fixed bug in CQL transform code: incorrect value relationModifieder was used. Added 'show all' command for yaz-client which retrieves all results for last search. Added new yaz-client, xmles, which takes a (private) OID and a document to be sent as an extended service request. Describe new yaz-client commands wait_response and set_auto_wait. Increase TCP/IP listener backlog from 3 (which I am guessing was copied from the SunOS manual entry way back when) so SOMAXCONN, so that the socket will queue as many incoming connections as it's able to handle ongoing connections. In other words, it will never now refuse a connection that it would be able to handle merely because it's not got around to accepting() enough of the pending connections yet. This is the behaviour anyway under Linux, where the listen() argument is ignored; but not under BSD and on systems such as MS-Windows that use BSD-derived TCP/IP stacks. The behaviour of YAZ-based servers should now be uniform across operating systems in this respect. yaz-marcdump uses 64-bit file access on some systems. This is enabled on Linux and other Unix variants where _FILE_OFSET_BITS=64 is supported. This allows yaz-marcdump to read large MARC batches (>2 GB). Modified all YAZ source files - except the source which is auto-generated by tools - to use spaces rather than TABS. Emacs/VIM trailer added to all source files. Add ZOOM_connection_option_getl() and ZOOM_options_getl(), corresponding to the existing *_setl() function. These allow option values containing arbitrary valuues. Add ZOOM_resultset_sort1(), which should ALWAYS be used in place of ZOOM_resultset_sort() in new applications. Its behaviour is identical except that it returns an indicator of whether or not the sort criterion was accepted (0 for OK, -1 for invalid). --- 2.1.8 2005/06/07 Fixed bug in yaz_marc_decode_buf. By mistake the routine appended MARC output rather than returning "new" buffer. yaz-client warns about unknown init options. Fixed bug #371: "options concurrentOperations ignores concurrentOperations" --- 2.1.6 2005/05/24 Added support for SRW sort in Generic Frontend Server. Patch by Ko van der Sloot. Member srw_sortKeys in bend_search_rr holds sortKeys - or NULL if none is provided. Fixed bug #307: It was impossible to specify indefinite/no timeout for ZOOM_event. Special timeout value -1 now means indefinite timeout (i.e. no timeout). Added support for multiple languages and charsets to be specified in ZOOM. Each charset/language is separated by a blank. If negotiation is in effect in init-response, Option "negotiation-charset-in-effect-for-records" set to 1(true) or 0(false). Code based on patch by Vasiliy Osadchuk. Fixed bug #306: infinite recursion that occurred when calling yaz_log_level_init as the first call (before other log level or nmem_init calls) Fixed bug in scan handling in front end server: if preferred-Position-In- Response was non-present, a NULL pointer referece was performed. --- 2.1.4 2005/04/26 Changed include/yaz/diagbib1.h and added include/yaz/diagsrw.h with diagnostic messages+codes for Bib-1 and SRW. Preprocessor defines are now defined for all those error codes. So instead of putting 109 in your program you'd use YAZ_BIB1_DATABASE_UNAVAILABLE. The messages are generated from a .csv - file. See src/bib1.csv and srw/srw.csv. Modified the yaz-marcdump utility to skip garbage bytes between MARC records in a file. Fixed bug - uninitialized memory - due to bad code for fix of bug #272. Program yaz-client now exits and produces an error message if multiple Z39.50 servers are specified on the command line (none or one allowed only). Program yaz-marcdump skips garbage bytes between ISO2709 records rather than abort. --- 2.1.2 2005/03/16 Fixed bug #273: Update for recent MARC-8 -> UNICODE changes. Fixed bug #272: Preserve spacing for CCL terms. --- 2.1.0 2005/03/14 Added support for virtual hosts and multiple backend servers for the YAZ frontend server. The configution is XML based and support specificition of CQL to RPN mappings and explain information. See section "Virtual Hosts" in the YAZ manual. Extended OPAC display utility. OPAC display utility renders bibliographic (MARC) record as well. Added yaz_opac_decode_wrbuf to supplement yaz_marc_decode_wrbuf. Fixed a bug in MARC decoder that could caused it to crash for some invalid MARC records. More diagnostics and warnings where added in XML output (warnings, etc are stored in comments). --- 2.0.34 2005/02/08 Fixes for UNIX domain sockets. Bug #261. Fixes for MARC-8 to UTF-8 conversion. Bugs #258 and #260. Fixed bug #263: YAZ MARCXML dump shows extra spaces after control fields. Added yaz_marc_subfield_str which defines subfield lead string which is used in YAZ_MARC_LINE format. Default string is blank+$. Added yaz_marc_endline_str which defines end of fields string used in YAZ_MARC_LINE format. Default string is newline. Experimental support for MarcXChange. This format can be produced by yaz-marcdump and is implemented in yaz_marc_decode - functions. http://www.bs.dk/standards/MarcXchange.xsd Added yaz-client commands scansize that sets maximum number of entries to be returned by scan. --- 2.0.32 2005/01/11 Added support for SRW scan in yaz-client and Generic Frontend Server. * Added whereInList member to SRW Scan Term. * Changed Z_SRW_scanRequest to be able to carry both CCL and PQF. Fixed NMEM system to return aligned blocks on the smallest boundaries that are suitably aligned for all possible types on the particular architecture YAZ is being built for. --- 2.0.30 2005/01/04 Fixed numerious warnings that was issued with newer versions of GCC. Fixed NMEM system to return aligned blocks on 8 byte boundaries rather than 4 bytes, since 4 may not be enough on some systems such as GCC 3.4.3 on Solaris. Make YAZ Generic Frontend Server slightly faster. Enhance (and reduce) logging for Generic Frontend Server. Revert YAZ log system so that it flushes every write operation by default. (YAZ 2.0.26 and earlier verisons did that). Bug #240. Modified the YAZ logging system. The LOG level defines use YLOG_ prefix instead of LOG_, due to name clash with syslog(3). LOG_ are still present. New applications should define YAZ_USE_NEW_LOG=1 - this will effectively disable old definitions. --- 2.0.28 2004/11/09 Added yaz_log_time_format which specifies log format using strftime(3). Added yaz_log_module_level which returns mask for a module. Value is non-zero mask a if module is enabled; zero if disabled. * Fixed bug #148: CQL parser may leak. A few prototypes were changed in include/yaz/cql.h. Fixed bug #176: Dont throw diagnostics on empty SRU args. Fixed bug #175: surrogate diagnostics in SRW lacking NS. Fixed bug #172: RPM builds does not enable SSL. Doxyfile.in part of dist. Doxyfile generated by configure. Configure aborts if any of --with-xml2, --with-openssl, --enable-tcpd are given and the corresponding component does not exist. Extend CCL documentation in YAZ reference. Describe r=r. --- 2.0.26 2004/10/01 Fixed MARC->MARCXML conversion to properly deal with fields, subfields, indicators having non-ASCII characters. Fixed MARC->MARCXML conversion so that ASCII control characters except TAB,CR,LF are removed from resulting XML (XML 1.0 does not support these). Added YAZ GFS support for conversion from Z39.50 surrogate diagnostics to SRW surrogate diagnostics. Bug fix: YAZ GFS did not return schema in explainResponse. --- 2.0.25 2004/09/30 The YAZ GFS when converting SRW/SRU requests to Z39.50 structures now converts recordSchema to elementSetName as well as schema URI. Fixed bug in COMSTACK that prevented HTTP request packages from being decoded properly. --- 2.0.24 2004/09/29 Added CCL facility r=r "range" which is similar to r=o "ordered" but does not require white-space before and after the dash in a range, e.g. x=-1990 is equivalent to x <= 1990 iff r=r, but equivalent to x= -1980 iff r=o. Fixed a few AC_TRY_LINK configure tests that did not operate properly due to new GCC removing "redundant" code. Added yaz-client commands scanpos and scanstep that sets preferred position and step-size for scan. Macro YAZ_INIT in yaz.m4: option --with-yazconfig renamed to --with-yaz. Added CCL utility ccl_qual_buf which parses one or more CCL spec lines in a buffer. Added CCL utility ccl_qual_line which adds CCL qualifier line consisting of name and value - ignoring empty lines and comments. On Windows, the debug DLL/import lib is now named yazd.{dll,lib}. Added odr_get_element_path which returns current element path for an ODR handle. This utility is useful in error handling or user-defined ODR_PRINT stream. Added ODR_PRINT utility odr_set_stream which is is a more generic alternative to odr_setprint. odr_set_stream takes a stream handle, pointer to a write function and pointer to close function. The close function - if non-NULL - will be called during odr_destroy. Fixed bug in CCL parser where truncation char was not removed from right side when truncation=both was in effect. Fixed CQL parser to use unsigned chars for isxxx from ctype.h due to VS.NET. --- 2.0.23 2004/08/11 Fix buffer overrun in CQL parser when dealing with proximity (%). Fixes for MARC-8 in yaz_iconv character set utilies. The MARC-8 to UTF-8/UCS conversion is now only based on codetables.xml. yaz_marc_decode_buf sets leader pos 9 to "a" for MARCXML output. --- 2.0.22 2004/08/06 Add support for more "commit changes" in ZOOM (uses Extended Services). For yaz-client, command set_marcdump / -m dumps SUTRS/XML/.. records as well. Yet another small fix for configure of SSL. --- 2.0.21 2004/05/14 Fix SSL libs for configure when --with-openssl=DIR is given. --- 2.0.20 2004/05/10 Add autoconf m4 macro YAZ_DOC for YAZ documentation setup (docbook). SSL comstack now uses yaz.pem certificate file on server side by default. Certificate filename can be configured by calling comstack function cs_set_ssl_certificate_file before cs_bind is used. Fix bug regarding multiple calls to ZOOM_connection_connect. Implement cs_set_ssl_ctx which sets SSL_CTX for SSL comstack. Do not create SSL_CTX in cs_create (ssl_type). Create in tcpip_bind, tcpip_rcvconnect instead. This allows user to set custom SSL_CTX. ZOOM now allows inspection of X509 peer certificate for verification. The X509 buffer is retrived by reading ZOOM option "sslPeerCert". Removed libyazssl.la. When SSL is enabled, libyaz.la has SSL support and all programs have too (yaz-ztest, yaz-client, zoom..). May not be as "modular" but it simplifies things. Added cs_get_peer_certificate to that returns peer X509 PEM. Added cs_get_ssl that returns SSL handle (SSL *) for SSL comstack; returns NULL if SSL is unavailable. Documentation about MARC decoding tools. Fix --disable-tcpd to really disable tcpd. Patch by Robin H. Johnson. --- 2.0.19 2004/03/30 Rename CHANGELOG to NEWS to follow GNU style packing. Fix bug with missing initialization of member in init_diagnostics. This bug affects threaded version of GFS server. --- 2.0.18 2004/03/20 Use wrbuf_xmlputs_n instead of wrbuf_write_cdata to avoid clash with Zebra symbol. Ensure zlib.dll is packed with Windows install. --- 2.0.17 2004/03/17 Fix encoding of xsd:string to use text instead of CDATA. Fix endless loop in CQL parser with unbalanced ". Use a more compact way to store MARC-8 conversion tables. --- 2.0.16 2004/03/16 Debian only Oleg Kolobov Fixed a bug in yaz_iconv regarding conversion to UCS4 / UCS4LE. Update CQL parser to use new CQL 1.1 modifiers for booleans and relations. Add CQL test cases. --- 2.0.15 2004/03/01 Another fix for decoding of XML packed records. --- 2.0.14 2004/02/25 Fixes for Chunked encoding. White space not ignored after length spec. Update NS and use default NS for SRW diagnostic elements. --- 2.0.13 2004/02/23 Implement ZOOM_resultset_cache_reset which resets record cache. Implement ZOOM_resultset_sort which sorts a result set. Implement chunked HTTP transfer. For SSL, use -lssl -lcrypto on systems that don't have pkg-config. --- 2.0.12 2004/02/16 Added member 'schema' to bend_explain_rr structure so that backend can specify explain record identifier. Defaults to Zeerex 2.0. Fix encoding of OID's of form 1.0.X. Bug introduced in 2.0.11. --- 2.0.11 2004/02/16 * SRW/SRU 1.1 updates: updated diagnostic in srw.h to use uri instead of code. Added init command for yaz-client which sends "extra" init request. Fixed two bugs in OID codec - ber_oidc. Throw error when encoding/decoding bad truncated OID. Fix decoding of OID X.Y... when X=2 and Y>39. Fixed a bug in ASN.1 compiler that caused Type-1 Operator codec to fail. Make ZOOM error code for "invalid query". Fixed compilation for SSL which wasn't properly enabled for all platforms. --- 2.0.10 2004/02/05 For yaz.m4, allow second argument for YAZ_INIT to hold minimal version of YAZ required. * SRW/SRU 1.1 updates. Diagnostic code now a URI. Added option -p to make Generic Frontend Server to write PID file. Added option -D to put Generic Frontend Server in background on its own. Make ZOOM C recognize option "password". If unset, "pass" is used (for backwards compatibility). Fixed a bug in Generic Frontend Server that could make it crash if a client sets characterSetNegotation bit, but didn't pass negotiation stuff in InitRequest. New YAZ client command, zversion, that sets Z39.50 version (1,2,3..). Must be issued before open, in order to be in effect. --- 2.0.9-6 2004/01/12 Debian/Windows Make the SRU server more picky WRT unknown params, etc. Bug fix: ZOOM scan response didn't return displayTerm - when present. New YAZ client command, options, that sets Z39.50 options. New utility functions yaz_init_opt_{encode,decode} to encode/decode Z39.50 options from a string of tokens (one token for each option bit). Update SRW diagnostic code messages. --- 2.0.9-5 2004/01/07 Debian/Windows Handle user defined stylesheet for SRW/SRU. --- 2.0.9-4 2004/01/06 Debian/Windows Fix bug in decoding of Content-Length. --- 2.0.9-3 2004/01/06 Debian/Windows Fix a bug with decoding of XML packed records. --- 2.0.9-2 2004/01/05 Debian only Allow empty ODR (NMEM=0) for odr_oiddup and odr_getoidbystr. Fix bug in SRW/SRU diagnostics decoding. --- 2.0.9 2004/01/05 Fixed bug in Generic Frontend Server which could drop records exceeding preferred message size. Reported and fixed by Irina Dijour. Fixed calculation of package size for structured records in Generic Frontend Server. Reported and fixed by Irina Dijour. Fixed namespace for SRW/SRU diagnostics. Fixed SEGV in yaz-client that occured for HTTP connection errors. --- 2.0.8 2003/12/22 * SRW/SRU 1.1. Since the Namespace has changed for SRW/SRU, it means that this version is incompatible with version 1.0 and older YAZ SRW/SRU implementations. CQL changes to reflect recent changes to the specification: * Documentation talks about context sets instead of index sets. * Documentation talks about indexes instead of qualifiers. * The CQL-to-PQF transformer's configuration file now uses "index.set.name = " instead of the old form "qualifier.set.name = ". (Both forms are still understood but the latter is deprecated.) * CQL terms with no explicit index specified are now interpreted as cql.serverChoice instead of srw.serverChoice (which of course behaves exactly the same.) --- 2.0.7 2003/12/16 MARC conversion can now generate ISO2709 output in another character set. yaz-marcdump uses this facility if you invoke it with option -O. Added missing C decl macros for include/yaz/{soap.h,srw.h,cql.h}, so that functions from there can be used from C++. --- 2.0.6 2003/12/04 Frontend server now transfers memory from decoded packages to stream ODR for search. NMEM now clears freed blocks with 'Y' (hex 59) to force bad memory references to show up. ZOOM-C now supports standard ZOOM option names as described in v1.4 of the ZOOM Abstract API. The older names for the same options are still also supported for the benefit of old applications. ZOOM-C supports "implementationId" and "implementationVersion" options to go along with "implementationName". These allow the user code to specify identification strings to be sent to servers. Add OID for the new ExtLite attribute set. Add OIDs for NACSIS-CATP, FINMARC2000 and MARC21-fin record-syntaxes, as requested/supplid by Ere Maijala For generic frontend server, reverse the order of "toolkit-supplied / application-supplied" strings sent as implementationId, Name and Version. Also, remove the spaces around the slash. This brings the GFS in line with the behaviour of ZOOM-C on the client side. Add function ZOOM_scanset_display_term. yaz-client shows scan displayTerm if present. Utility yaz-iconv is now installed by default along with the man page yaz-iconv.1. Extend configure check for OpenSSL to use pkg-config where available (such as RedHat 9). Incorporate patch by Morten Bogeskov which allows a Unix file socket server to specify uid/gid/mask for socket using the format unix:[user=uid,][group=gid,][umask=mask,]file=path If file= is omitted the existing format is assumed, e.g. unix:path in which case the mask is 0666 (rw for everybody). Major restructure of YAZ source. All source in libyaz is in src directory. Programs in client (yaz-client), ztest (yaz-ztest), zoom (zoom programs), util (utility programs such as ASN.1 compiler, yaz-marcdump). Added man page for utility yaz-marcdump (used to be called marcdump). yaz-marcdump is installed by 'make install'. Fixed a memory leak in Generic Frontend Server that occurred when decoding of incoming package failed. Fixed a potential DOS attack vulnerability in COMSTACK/ODR. Change prototype of odr_perror: add const to message string. New function yaz_log_reopen which reopens log file (for log rotate, etc.) * Blocking parameter for COMSTACK cs_create is now a bit mask rather than a blocking flag. Bit 0 is set for blocking, reset for non-blocking. Bit 1 is set if cs_addrstr should avoid DNS lookup; reset for full DNS lookup. There should not be any compatibility problems with this assuming that blocking=1 or 0 is used. Fix bad reference in UNIX comstack in function cs_addrstr. Fix for compilation on AIX. The generic front-end server (server/seshigh.c) now supports returning Init diagnostics to the client in User-information-field, in accordance with Z35.90 Implementor Agreement 5 (Returning diagnostics in an InitResponse) --- 2.0.4 2003/09/04 Allow any CQL relation (not just all,any,exact,scr). Fixes for OCLC UI ASN.1 to make it work with SilverPlatter targets that features the same UI. Implemented command update0 in YAZ client which is equivalent to update but uses old of Ext Update ASN.1. Use OID 1.2.840.10003.15.1000.81.1 for privately defined charsets in charset negotiation. Added VAL_ID_CHARSET in oid.h. Previously no OID was used for this info. ZOOM uses smallSetUpperBound=1 instead of 0 for piggyback searches. It apparantely upsets EBSCO Publishing IR Z39.50 Server which returns 'malformed search term' otherwise. SortResponse member resultCount now set to NULL in sort handler of frontend server. OPAC support ZOOM. ZOOM_record_get returns OPAC info (as XML) if type is "opac". Add three new utility functions for translating OIDs between various formats -- symbolic name such as "Usmarc", minus-1-terminated int arrays and dotted strings such as "1.2.840.10003.9.5.1": int *oid_name_to_oid(oid_class oclass, const char *name, int *oid); char *oid_to_dotstring(const int *oid, char *oidbuf); char *oid_name_to_dotstring(oid_class oclass, const char *name, char *oidbuf); Reverted modifications for ES Update definition for z_IU0Update (OID 1.2.840.10003.9.5.1 and 1.2.840.10003.9.5). The definition is back to YAZ 2.0.2. String value attributes for CCL parser. Support for OCLC's locally registered "OCLC-UserInformation" PDU, which their FirstSearch server returns in Init responses, sometimes carrying useful diagnostic information when Init fails. This has the OID 1.2.840.10003.10.1000.17.1 and is defined in the file "z39.50/oclcui.asn", where its definition is somewhat different from what OCLC document on their web-site, as required to interoperate with their servers. Support for anonymous authentication in yaz-client. Use the command "auth -". * Fix the OID of the Index Data-local "admin" Extended Service from 1.2.840.10003.9.81.1 to 1.2.840.10003.9.1000.81.1. The omission of the 1000, which indicates a locally-defined OID, was a mistake. --- 2.0.3 2003/06/20 Fix CCL directive @case handling so that it affects string match for both CCL keywords and qualifiers. * ESFormat-Update updates. Packages with OID 1.2.840.10003.9.5.1 and 1.2.840.10003.9.5 are now handled by the same decoder z_IU0Update . Decoder has been updated with ASN.1 changes as listed in http://lcweb.loc.gov/z3950/agency/defns/updateES.html Note that the "latest" DB Update, OID 1.2.840.10003.9.5.1.1 , handler z_IUUpdate, remains unchanged. ZOOM_record_get may now return a record in a specific character set. For type use "form; charset=from[,to]" where form (render, xml, ..) , "from" is the character set of record as returned by target. "to" is the character set to be returned. If omitted, "to" is UTF-8. YAZ ASN.1 compiler renamed from yaz-comp to yaz-asncomp New ODR utility, odr_getelement, which returns name of element for which encoding/decoding failed. Fixed ODR so that it returns error code OREQUIRED rather than ONONE in cases where a required element was omitted. Bug fix: some MARC8 sequences were not converted. New ZOOM option "step" which specifies number of records to be retrieved in one chunk. Used in conjunction with "start" and "count". SRW support for yaz-client. Use scheme http: to use it, e.g. http://host:port/db yaz-client no longer does (un)intelligent character set conversions by default. Can be enabled with charset and marc_charset commands. xmalloc trace fix for 64-bit systems such as DEC alpha. Solaris 2.6 compile fix. New function, cql_strerror() translates SRW error codes, as returned by cql_transform_error(), into human-readable English strings. Used in yaz-client diagnostics when appropriate. New CQL2RPN query-type for the command-line yaz-client, parses CQL and converts it into a type-1 query which is sent to the server. This makes CQL available for use with all Z-servers, as opposed to the tiny minority that can handle CQL queries themselves. --- 2.0.2 2003/04/28 New Debian package layout similar to the Redhat Package layout. New ZOOM events ZOOM_EVENT_RECV_{RECORD,SEARCH} for receiving a record and search result respectively. --- 2.0.1 2003/04/25 Redhat package is now several packages: libyaz (runtime libraries), libyaz-devel (development and documentation, and yaz (utility programs). Package spec file by Morten Bogeskov. New member 'schema' in struct bend_fetch_rr which the name of requested schema (SRW/SRU) for record (or NULL if none was given). The fetch handler MAY set this to reflect the schema of the returned record. New member 'display_term' in struct scan_entry. GFS now sets member entries and allocates scan entries to be filled by user scan handler. In previous version, entries member was allocated by the scan handler. That still works, but the GFS will ignore member display_term - assuming it was NOT set by the handler. The fact that the GFS now allocates the entries both allows for new members and makes a scan handler easier to write. Fix CQL lex buffer overflow. SRW/SRU recordPacking. For SRW default recordPacking is string. For SRU default recordPacking is string. SRU protocol support for frontend server. Fix compile bug for systems that have nl_langinfo but CODESET undefined. Added missing PQF transform rules for <= and >= . Thanks to Peter Popovics. Added scan for the ZOOM shell (zoomsh). --- 2.0 2003/02/23 * String Identifers for Schemas (Amendment 5). http://lcweb.loc.gov/z3950/agency/amend/am5.html Old definition for schema Odr_oid *schema; /* OPT */ New: int which; union { Odr_oid *oid; Z_InternationalString *uri; #define Z_Schema_oid 1 #define Z_Schema_uri 2 } schema; /* OPT */ * resultCount parameter to Sort Response (Amendment 1). http://lcweb.loc.gov/z3950/agency/amend/am1.html Support for SRW 1.0 over HTTP. This is an optional feature and requires libxml2 to operate. Enable SOAP by specifying --with-xml2 for configure. Generic frontend server supports HTTP/SOAP/SRW and Z39.50/BER on the same port. SRW SearchRetrieveRequests are mapped to bend_init,bend_search,bend_fetch,bend_close. Z39.50 Query Type-104 added - to facilitate CQL within Z39.50. CQL support. Source is directory 'cql'. CQL is supported in ZOOM (both SRW and Z39.50) and the YAZ client (Z39.50 only). ZOOM connections are SRW based if schem http is used for hostname in connect, e.g. z = ZOOM_connection_new("http://myserver"); ZOOM_query may be of type CQL, e.g. ZOOM_query_cql(q, "dc.title=x"); CCL proximity operators !n, %n converts to PQF @prox 0 n 1 2 k 2 and @prox 0 n 0 1 k 2 respectively, meaning: exlusion=false, distance=n, order=true/false, relation=le, prox unit=word. If n is omitted, distance 1 is used. Fixed problem with C compiler include path in wrong order. For TCP/IP COMSTACK, set recv buffer to an appropriate "large" value on Solaris. Patch from Ko van der Sloot. New MARC decode API. All new functions operate on a yaz_marc_t handle. The most important new functions are: yaz_marc_create, yaz_marc_decode_{buf,wrbuf}, yaz_marc_destroy, .. to create handler, decode and destroy respectively. Decoder can produce formats MARC line, simple XML, OAI MARC and MARC XML (LoC). See include/yaz/marcdisp.h. YAZ Iconv utility now supports MARC8 decoding (marc8.c). Converts to UTF-8, UCS-32, wchar_t or Latin-1. * Prototypes for yaz_iconv_-functions moved to separate header include/yaz/yaz-iconv.h. Make a few private functions 'static' in unix.c. This prevents duplicate unix_close in PHP with YAZ and imap. PHP Bug 20977. For ZOOM connection, the options targetImplementation{Id,Name,Version} are set when Init Response is received. New function ZOOM_connection_error_x similar to ZOOM_connection_error but returns diagnostic set as well. New function yaz_strerror which is a portable wrapper for strerror/strerror_r/GetLastMessage. * ZOOM_record_get supports type "xml" in which case MARC XML (from LOC) is returned for MARC. If type is "oai", then OAI MARC is returned. Fix creation of lib/yaz-config so it works if srcdir != objdir. Patch from Kang-Jin Lee. --- 1.9.2 2002/11/26 yaz_marc_decode uses OAI MARC as XML format for ISO2709 records. Fix bad race conditions on SIGTERM and terminate gracefully in frontend server. Move retrieval (data1) module to Zebra since nobody seems to be using it. Add GRS-1 render for ZOOM using same format as yaz-client. --- 1.9.1 2002/10/05 Added man pages: yaz-client(1), yaz-ztest(8), yaz(7), zoomsh(1). Fix broken ESpec handling in data1 module. SGML reader parses comments and makes them part of the data1 tree. Added several type casts so that YAZ compiles as C++ code. ZOOM didn't handle PDU encoding failures properly. Added more Bib-1 diagnostics (approved extensions). GNU configure: better check for iconv. More portable use of accept, getpeername. Check for socklen_t. Use int/size_t if socklen_t is not defined. --- 1.9 2002/09/06 PQF parser rejects bad queries - including those with extra characters in them. PQF parser used to silently ignore that. Cleaner API for PQF added, which allows you to get detailed error information for bad queries (see yaz/pquery.h). Fixed bug in ZOOM_record_get for type "database". Implemented mini iconv library supporting conversions between UTF-8, UCS4, UCS4LE and ISO-8859-1. Implemented in util/siconv.c. * Removed XML reader (d1_expat.c). It's part of Zebra instead. --- 1.8.9 2002/08/20 Fixed ZOOM C record cache so that preferredRecordSyntax and elementSetName is used to check for already fetched records. --- 1.8.8 2002/08/02 Added three members in bend_initrequest structure to facilitate character set negotiation. Fixed a bug in frontend server that could cause indefinite loops under rare conditions. Revised character set utilities (charneg.h) so that encoding UCS-4, UCSA-4, UTF-16 and UTF-8 are encoded non-privately. For PQF, directive @term sets term type for Scan/Search. Here is general, string, numeric, null. The term type is inherited - just like @attr. New call odr_set_charset that sets character set conversion for international-strings on a ODR stream. Prototype is: int odr_set_charset(ODR o, const char *to, const char *from); The InternationalString is still represented as C string in YAZ so native strings of type UTF-8, ASCII, etc. will work (UTF-16 won't). On the protocol level, you can use any encoding. Support for UNIX sockets in ZOOM. Solaris recv sometimes returns errno == ENOENT. It is treated as EINPROGRESS. COMSTACK patch by Ko van der Sloot. New COMSTACK of type UNIX Socket. Use "unix:/path" as address for both client and server. Code by Morten Bogeskov. --- 1.8.7 2002/05/22 On Windows ZOOM functions are of type __stdcall rather than __cdecl, so that they can be used directly from Visual Basic. You must recompile your windows APP if you're using ZOOM. Character Set and Language Negotiation(3) for ZOOM API and YAZ client. Commands "lang" and "charset" sets language and character set respectively. Options "lang" and "charset" is interpreted by the ZOOM API. Note, these are not part of the official ZOOM spec) All is due to Oleg Kolobov. Attributes from multiple CCL fields may be OR'ed rather than merged using directive "@field or". Fields are still merged by default - equivalent to "@field merge". Fixed bug in ZOOM connect that occurred on OpenBSD (maybe others). Patch by Oleg Kolobov. Fixed bug in zget for parameter ExtendedServicesResponse. Fix OID for ILL. --- 1.8.6 2002/03/25 Added PQF feature: '@attr type=value' may be written as '@type=value'. Client displays USR.1:SearchResult-1 (hits per term). Additional Search Info for search in Generic Frontend Server. Fixed CCL parsing of "field=s". WIN32 installer - using the excellent NSIS software from nullsoft. Fixed CCL parsing of "field = - ". Added function yaz_marc_decode that decodes MARC for line mode display or XML (similar to that used by JZKit). Fixed BER decoding of OPTIONAL CHOICE. The bug didn't affect the Z39.50. But ISO/ILL was, however. Added patch by Rustam T. Usmanov that implements Z39.50 duplicate detection service (Z39.50-1995 Amendment 2) and Language Negotiation (3). See: http://lcweb.loc.gov/z3950/agency/amend/am2.html http://lcweb.loc.gov/z3950/agency/defns/charneg-3.html --- 1.8.5 2002/02/03 New YAZ client features: Command completion and new commands: push_command, set_apdufile, set_marcdump, set_cclfields, register_oid. Code provided by Jacob Poulsen. New call oid_trav, that visits all registered OIDs via callback. Function ZOOM_record_get now returns const char pointer rather than void pointer. It saves a lot of type casts. For YAZ client, command "auth" now allows you to set authentication in IdPass style. It is enabled when three tokens are given - order is user, group and password. Fix memory leaks in MARC record handling for ZOOM. New option for YAZ client, -k that sets maximum record size. Similar to -k option for generic frontend server and yaz-ztest. More fixes for scan. Non-zero stepSize handled. OID's fixes. Prefix query parser reports "fail" when bad attribute set is given. Fix in MARC decoder. Proximity logging. Fix for attribute set in scan handler for server. Patches by Shigeru Ishida. SSL/COMSTACK updates. cs_rcvconnect completes SSL handshake. ZOOM works with SSL. Configure option --with-openssl= now works when a directory is specified. Patch provided by Morten Bogeskov. New option for YAZ client, -u , that sets authentication. ZOOM fix: error information was sometimes "missing", since error was cleared/reset too when it shouldn't. ZOOM_record_get returns ISO2709 buffer when "raw" is given. --- 1.8.4 2002/01/04 Scan for ZOOM API. New object ZOOM_scanset. New functions ZOOM_connection_scan, ZOOM_scanset_size, ZOOM_scanset_term and ZOOM_scanset_destroy. New ZOOM function, ZOOM_connection_last_event, that returns type of last event (such as "receive data", "send data", "apdu received", etc. New ZOOM option, schema, that specifies schema for retrieval. New CCL feature. Qualifiers can be aliases for one or more other qualifiers (if more than one is given, OR is used). ZOOM uses named result sets if target supports it. Two new YAZ client commands: . (dot, which sources a script of YAZ client commands), and ! (to execute shell command.). Implemented by Jacob Poulsen. Working on Debian packages. --- 1.8.3 2001/11/19 YAZ client enables named result sets only if target supports it. *** ZOOM. Prefix for ZOOM definitions changed from Z3950_ to ZOOM_. * ZOOM. Removed Z3950_connection_host. Use Z3950_connection_option_get with key="host" to get same result. * ZOOM. Added Z3950_record_clone and removed Z3950_resultset_get. Function Z3950_resultset_record(s) returns references to records "owned" by resultset. To become owner use Z3950_record_clone. Function z_ext_record handles Extended Services. Thanks to Irina Dijour. --- 1.8.2 2001/11/12 CCL Parser fix: ignore token comma when dealing with and-lists. Documentation updates for COMSTACK. * ZOOM changes. Query object renamed from Z3950_search to Z3950_query. Changed prototype Z3950_records. For some functions, int parameters were changed to size_t. TCP/IP COMSTACK no longer uses getprotobyname to avoid memory leak on some Unices. New MARC decode/display function, marc_display_exl, which properly rejects non-ISO2709 records. YAZ client uses it. --- 1.8.1 2001/10/29 Fix bug: local attribute set wasn't set correctly in PQF strings. --- 1.8 2001/10/25 * Old Z39.50 codecs no longer supported. Added ZOOM C binding. See http://zoom.z3950.org/ Renamed states for COMSTACKs to avoid confusion with events. Implemented cs_look and proper cs_rcvconnect. Fixed COMSTACK error that occurred on HPUX. Fix by Giannis Kosmas. Configure detects POSIX threads on OpenBSD. When sort flag 'i' was specified in yaz-client the caseSensitivy flag was set to a wrong value. Thanks to Robert Sanderson for reporting this. When error is returned from present handler, non-surrogate diagnostic is returned in present response (and fetch handler is no longer called). * Minor adjustments to pquery parser (PQF). Token characters may be escaped by using backslash (C-style). PQF parser allows string attribute values to be specified. For @attr, non-numeric characters after the equal-sign are treated as strings (e.g. @attr 9=title). CCL trunction character may be defined (@truncation in file) * function zget_ExtendedServicesRequest sets waitAction to waitIfPossible (was wait). Added cs_set_blocking to set change blocking mode of a COMSTACK. Thanks to Matthew Carey. CCL operator names may be set in field definition files (CCL_bibset). See ccl/bib1 for an example. Fixes in ASN.1 compiler for C++ compatibility. * Renamed members "and" and "or" in struct Z_Operator to "op_and" and "op_or" to avoid conflict with C++. Fixed problem with GNU readline detection on Redhat 7.0. Added step-size for Scan backend handler. Fixed bug that made the frontend server crash when no attribute set was specified for scan. Front-end server automatically switches to original working directory when installed as an NT service. Previously -w had to be specified to make it work. Added extended attributes for retrieval module (data1), so that data1 records carry d1_readXML/SGML attributes. d1_read also supports null-data rules ( ) On UNIX when POSIX threads are available, a separate library libyazthread is created. Programmers should link with that library and the yaz library when using threads. The reason for the split was that some applications on Linux, such as Apache, doesn't work well when using shared objects that relies on threads. Added SSL support for the COMSTACK. You start yaz-client and yaz-ztest (or any frontend server) in SSL mode by specifying ssl: followed by address. Only tested on UNIX. Added feature for CCL module. Virtual structure s=al or s=ol generates and-list and or-list respectively instead of phrase search. Added some OID's. * Added prefix "yaz_" for the functions log_init.., log_file.. and log_mask_str. This was done to avoid name conflicts with other libraries (such as other PHP extensions). Added raw OID member for preferred record syntax (request_format_raw) and returned record syntax (output_format_raw) for backend fetch method. Config file yaz-config now accepts options so that it returns specific compile settings, etc. Thanks to Morten Bogeskov Shared library support for UNIX using GNU libtool. * Modified backend interface. Request/Response struct's replaced by one read/write C struct. For example bend_fetchrequest and bend_fetchresult have been replaced by single bend_fetch_rr struct. Every handler - even search has to be registered in bend_init handler. This means that the YAZ library no longer refers to external functions and it makes it possible to make the whole thing a single DLL/SO. Added Segment handler for backend server. Added Zmbol/Zebra administrative functions to YAZ client. Threaded frontend server on UNIX (when POSIX Threads are available). Starting the server with option -T enables multi-threading. --- 1.6 2000/03/03 Added configure option --enable-comp/disable-comp to control use of YAZ ASN.1 compiler. Use --disable-comp to use the old *coders located in sub directory asn. YAZ ASN.1 compiler renamed to yaz-comp in sub directory. It's installed in ${exec_prefix}/bin along with the other programs yaz-client and yaz-ztest. GNU automake used to maintain makefiles. Added several OID's. Changed retrieval module so that we can load records with no abstract syntax defined. Tagpaths in these records are fully composed of string tags. Implemented ISO ILL protocol. Refer to stuff in sub directory ill. --- 1.5 1999/12/10 On UNIX, the generated makefile now supports a proper 'make install'. The prefix can be set via GNU configure to set the install location (default is /usr/local). * YAZ programs client and ztest were renamed to yaz-client and yaz-ztest to avoid conflicts when users install YAZ in "standard" locations, such as /usr/bin,/usr/local/bin,etc. * YAZ Header files were moved from include to include/yaz. YAZ Header files are referred to as include rather than . The YAZ include path (-I ..) is therefore the same as before. Programmers should update their #include statements or use -Ipath/include/yaz instead. The main motivation for doing this change is that YAZ header files can be installed in "standard" locations /usr/include,/usr/local/include without introducing conflicts, since ALL YAZ header files are stored in subdirectory yaz (under /usr/include for example). Compilation of YAZ for WIN32 is now handled by an nmake-style makefile rather than project/workspace files. We switched because project files are incompatible between Visual C++ 5 and 6. Refer to windows.txt for details. Changed name of logging function, logf, to yaz_log, to prevent name clash with some math-log functions. The YAZ header log.h defines logf to yaz_log (#define) so there should be no incompatibilities by this modification. Added bend_start/bend_stop handlers for server. These handler are called on start/stop of server. For windows they are called whenever a service is started/stopped. * YAZ now auto-generates decoders/encoders for the Z39.50 protocol using a fairly small ASN.1 compiler written in Tcl. The compiler is located in util/yc.tcl. The auto-generated C code structures are, in a few cases, incompatible with the old decoders. There are differences in the following C structures Z_DiagRec, Z_External, Z_SortRequest, Z_SortResponse, Z_AttributesPlusTerm, Z_ProximityOperator, Z_DefaultDiagFormat. The preprocessor variable ASN_COMPILED is defined when the compiled ASN.1 is being used. Encoder/decoder routines as well as the Z39.50 protocol ASN.1 is located sub directory z39.50. If you wish to use the old encoders/decoders you can specify --disable-yc for configure. Assigned OID for old DB Update (VAL_DBUPDATE0). Updated YAZ compiled version so that it supports both new - and old version of DB Update * Added 'name' parameter to ODR encoder/decoder routines to facilitate pretty ODR print. Updated whole Z39.50 encoder/decoder to reflect the change. The name parameter can be set to 0 in which no name is specified for the construction. The macros odr_implicit and odr_explicit sets name parameter to zero for the construction involved. New macros odr_implicit_tag and odr_explicit_tag are similar to the others, except that a name parameter is added. For programmers' that don't use ODR they probably only need to change the call to z_APDU and z_External. Added access control facility by interfacing the TCP wrapper library. YAZ automatically attempts to find the TCP wrapper Library (-lwrap) and tcpd.h on Unix systems. For the server, option -d specifies the name of the daemon and enables the access control as specified in hosts.allow/hosts.deny. Refer to man pages tcpd(8) and hosts_access(5). Fixed memory leak in ccl_find_str and ccl_qual_rm. Thanks to Hans van den Dool . Added reference ID parameter to most functions in server API - refer to backend.h. Thanks to Hans van den Dool . Changed name of ccl library to libccl.a (was ccl.a). Fixed bug in decoder for Explain (Category TargetInfo). Added support for GNU readline in client. Thanks to Jacob Poulsen . GNU configure attempts to detect if readline is available. * CHANGED DEFINITION OF ES: UPDATE (INCLUDING THE OID) to reflect the new definition from the ZIG. NOTE THIS IF YOU HAVE AN UPDATE IMPLEMENTATION! This change was made to the development version before the ZIG decided to retract the amendment. If any users MUST be compatible with the original Update definition, PLEASE CONTACT US, and we will include a separate definition corresponding to the old Update ES. Note that because of the change to the ASN.1 of the TaskPackageRecordStructure we cannot define a single structure that will support both versions. * Added const modifier to buffer parameter for some ODR/BER encoding routines: ber_dectag, ber_declen, odp_more_chunks, completeBER, completeWAIS, odr_dumpBER. Fixed bug in client.c which caused a crash when a scanResponse didn't contain positionOfTerm. * Fixed inconsistency in the ScanResponse/ListEntries protocol. This * will cause an error in a client if a non-YAZ target sends both a * list of Scan entries and non-surrogate diagnostics. Retrieval module enhancements. Tag sets may be typed in the reference to it. From the .abs-file the "tagset" directive takes a third optional integer type for the tag set referenced. From a .tag-file the "include" directive takes a third optional type as well. The old "type" directive in the tag set itself is still recognized but acts as the default type for the tag set. Backend interface change. Individual Scan terms returned from bend_scan may also be tagged as Surrogate Diagnostics. Refer to struct scan_entry in include/backend.h. Retrieval module enhancements. Multiple tag sets and attribute sets may be specified in abstract syntax specs. Revised the error/warning for logging messages reported by the retrieval module when reading the various spec files. Object Identifier system (oid_..) changed. The API is backwards compatible but the oid-routines now allocates new OID's when needed. Raw OID's may be specified in oid_getvalbyname. YAZ now uses GNU configure to generate Makefile(s). * Minor changes in some of the member names of DeleteResultSetRequest and DeleteResultSetResponse. See include/proto.h. * Changed some C definitions regarding EXPLAIN record syntax (prt-exp.h) and added member 'languages' in TargetInfo (which was missing). Changed the way attribute sets are handled in the retrieval module. These are now cached, just like the abstract syntaxes (schemas). Changed YAZ so that it links with compiled ASN.1. Added Explain-schema definitions and mapping routines. The following Explain categories have been implemented: AttributeDetails, AttributeSetInfo, DatabaseInfo, CategoryList and TargetInfo. Fixed minor bug in Windows version of Server Library. --- 1.4pl2+ 1998/4/17 (Released with Zebra) Added Extended Services to server (backend.h). Thanks to Charles Woodfield. Added EXTERNAL: UNIverse Resource Report (non-standard). Implemened odr_enum and odr_set_of functions to handle ASN.1 types ENUMERATED and SET OF. * Added 'const' to some of the char pointer arguments for the functions, data1_read_node, data1_getelementbytagname, data1_insert_taggeddata, data1_getesetbyname, data1_getelementbyname, data1_get_absyn. Fixed bug in data1_insert_taggeddata - the last_child member of parent wasn't initialised. * Changed data1_read_record and data1_read_node so that the supplied "SGML"-buffer is read-only. In particular the resulting data1 - tree doesn't refer to any parts of the "SGML"-buffer. Fixed bug in server library (Windows version of statserv_remove). * Changed code so that it compiles as C++. The type definition of Odr_fun which is a member of Odr_arm was changed. The result is, that an explicit typecast is needed for the fun pointer when using Odr_arm - as in: {1, -1, -1, Z_IdAuthentication_idPass, (Odr_fun)z_IdPass}, Updated TagSet-G and -M definitions (tagsetm.tag and tagsetg.tag). Implemented the new structured date and time definition as approved by the ZIG. Added schemaId element to the specificTag in Espec-1 (also approved at the last ZIG). Thanks to RVDM. Added some Object identifiers (RVDM). Changed the Update Extended Service (RVDM). Added command "refid" to client which specifies referenceId for the following requests. Implemented extended service handling for server. See ztest.c for an example as well as backend.h. New handlers are registerd in the Init handler. * Changed interface for sort in server. Added new members to statserv_options_block. It allows a server to read options from another source than just the command line. Thanks to Charles Woodfield. * Changed definition of Z_Triple in file prt-grs.h - member boolean renamed to zboolean. Some C++ compilers complained about the name. Minor changes to gils.abs. Added index 's' (sort) on title and date/time-last-modified. --- 1.4pl2 1998/1/30 Fixed bug in server library regarding inetd mode (-i). This bug was introduced by release 1.4. --- 1.4pl1 1998/1/29 Added sort facility in client and backend server interface. Fixed problem with dependencies in Makefile(s). Fixed bugs for encoders/decoders of extended services and SearchInfoReport. Implemented sub-tree feature for schemas. Sub-trees are referenced in *.abs-files. See explain.abs for an example of the use of this feature. Modified bib1.att; local attributes for ANY didn't include ANY itself (only affects use of the retrieval module). Fixed bug in plain SGML reader in function data1_read_node: tags with prefix "var" was incorrectly interpreted as variants. Added feature "sub-schemas" to enable references to - and definitions of - group of elements. * Removed member parent from type data1_element (in data1.h). Implemented function odr_nullval() that returns the value of ODR_NULLVAL. * Removed member num_children from data1_node (in data1.h). Made NT service interface part of the server library. The function statserv_main uses the NT service when required and calls the statserv_start / statserv_close routines. Routine zget_SearchRequest and zget_PresentRequest fills resultSetName/Id member with "default" instead of "Default". Fixed memory leak in server. Request queue member wasn't freed. Fixed nmem_exit so that memory is freed. --- 1.4 1997/10/2 Revised the CCL parser utility to be thread safe. Added function, oid_ent_to_oid, to replace the function oid_getoidbyent, which is not thread safe. * Added nmem_init and nmem_exit to initialize and release NMEM resources. Function nmem_init should be called once in the initial thread before NMEM/ODR is used. statserv.c and client.c have been changed accordingly. The change was necessary to make NMEM thread safe. The NMEM memory pool is shared amongst threads in a process. Unix-based applications will still work fine without calling this. Added NT Services interface for the the Z39.50 (statserv) Server. Refer to the ztest.c source on the usage. Windows 95/NT port using MSVC5.0. Project files are included in the distribution. * Defined new 'global' handle for the retrieval (data1) system. The new handled, data1_handle, describes the state of the data1 system. This handle is passed as first argument to virtually all data1 related routines. The functions data1_create and data1_destroy creates and destroys a data1 handle respectively. Added ODR encode stream member to all backend request structures init, search, scan etc. This stream should be used to allocate all memory used for the response when thread safe operation is needed. Changed the comstack utility, cs_addstr, to be thread safe. The returned hostname string returned by the function is now part the COMSTACK instance. Added comstack utility, cs_straddr, which replaces the tcpip_strtoaddr function. The cs_straddr takes a COMSTACK handle as argument, so this function must be used after cs_create and before bind/connect. This function is thread safe. Moved test server to 'ztest' directory - generic server code still in 'server' directory. Made prefix query (pquery.c) utility thread safe. Added new function modifier YAZ_EXPORT to 'export' public DLL functions when using windows (see include/yconfig.h). Added definitions to the OID database (util/oid.c) (RVDM). Added new BIB-1 diagnostic messages to the handler diagbib1_str. Added call to ccl_rpn_delete in client program. Added ODR argument to ccl_rpn_query and ccl_scan_query to provide release of RPN structure. Added support for C++, headers uses extern "C" for public definitions. With input from RVDM. In handling of SEQUENCE OF: Counter set to zero when SEQUENCE OF is absent. Thanks to Ronald van der Meer (RVDM). Added initializers (zget_ routines) for a number of PDUs. Thanks to RVDM. Added support for private extensions to the OID database (oid_setprivateoids()). Thanks to RVDM. Added optional, physical ANY (key replication) Fixed null-reference problem in GRS-1 output filter. Proximity operator added to Prefix Query Format (PQF). In test client command "base" accepts multiple databases. Fixed bug in cs_close stack that caused trouble with WINSOCK. --- 1.3 1996/10/11 Fixed tagging bug in ResourceReportResponse PDU encoder/decode. Smallish bug-fixes in the new encoders/decoders (explain). Bug fixed in DeleteRequest. Fixed tagging bug of type 101 query in SearchRequest-Query PDU encoder/decoder. Fixed tagging bug in ResourceReportResponse PDU encoder/decode. Added SOIF syntax (using private OID for now) to retrieval module and client. Added Update extended service. Added SearchResult-1 additional info structure. Added optional CCL (ISO8777) interpreter as separate module. Available in linemode client. --- 1.2 1996/6/10 (1st anniversary release) Added Summary record syntax. Lightly tested. Added OPAC record syntax. Untested. Added ResourceReport service encoders/decoders. Untested. Fixed bug in z_Unit - wrong tagging on unitSystem. Fixed bug in the DiagRecs decoder. Added options for max PDU size and session timeout to frontend-server. Added documentation of query-language parsers and other supporting utilities. [frontend-server] Added Attribute set to the bend_scanrequest API. [frontend-server] NextResultSetPosition was sometimes set incorrectly when surrogate diagnostics were generated. [retrieval] Allow multiple local values for attribute. [retrieval] Allow multiple attributes per element in .abs files. index type. [retrieval] Added Summary tagset, abstract syntax, and d1-node/ASN filter. --- 1.1pl2 1996/4/10 Minor changes, mostly specific to Zebra's requirements (retrieval) --- 1.1 1996/2/20 Repaired bug in frontend server when running multiple listening endpoints in dynamic mode. z_External() now won't break if a known, ASN.1 value comes encapsulated in an octet-string. The value will pass through unmodified in an Odr_oct. Added a bit of code to the demo client to decode & display ASN.1-structured records represented in the octet-aligned branch of the EXTERNAL CHOICE. Thanks to CAS for prodding us to finally do this. Added z_ext_getentbyref() to the ASN module. Doc updated. * Completed the SCAN definition in the ASN module. This may break SCAN code based on older YAZ-versions at compile-time. The fix is easy - look in proto.h. * Added 'displayTerm' and OtherInformation to the TermInfo structure under the SCAN definition. Remember to initialize this, server-people. Comstack should now support the WAIS protocol in TCP/IP mode. Note that this does not extend to ODR and ASN. Comstack allows insertion of established socket (primarily for inetd-operation of servers). Doc updated. Front-end server can now start from the inetd in TCP mode. Doc updated. --- 1.0pl4 1996/1/24 Added Sort PDU. Fixed small problem in SUTRS-filter. A newline was sometimes inserted before the rank and record number. Adjustments to the frontend server. Fixed diagnostic BER dumper. It ignored the file argument. --- 1.0pl3 1996/1/2 Various changes to retrieval module. Changed the union discriminators of the protocol files from enums to ints paired with #defines. *Changed oident.class to oident.oclass to avoid a reserved word in C++ compilers. *Changed operator in the RPN structure to 'roperator', again to avoid a conflict with C++. Fixed problems in Explain decoders/encoders. --- 1.0pl2 1995/12/6 Memory bug in log module fixed. --- 1.0pl1 1995/12/5 Occasional malloc() of 0 bytes fixed in d1_espec.c. Bug in Explain DatabaseInfo module fixed. Some '\r' snuck into one or two of the ret'l config tables. A curse on Windows. --- 1.0 1995/11/28 The shift to v1.0 signals that we now consider the *core* functionality of YAZ reasonably stable (the core being more or less equivalent to Z39.50-1992). Some of the really nifty v3 stuff is still not heavily tested (Explain not at all - though that will happen soonish). Minor changes to code to support Windows port. Various minor changes after we're getting to use GRS-1 & co. more. Added Espec-1 format. Added VisibleString field body type to GRS-1. It is illegal acc. to my copy of the protocol and it cannot be selected when encoding (maps into 'string' when decoding). Needed to talk to some servers. Demo client can request simple element set names. Added Diagnostic Format encoders/decoders. Added simple Close handling to frontend server (no hooks for resource reporting yet), and demonstration client. Added cs_addrstr() command to COMSTACK to retrieve peer hostname/address. --- 1.0b3 1995/08/24 Fixed bug in the frontend-server. The numberOfRecordsReturned field was handled incorrectly when records were requested in the searchResponse. This will only affect you if you use the frontend-server. Added GRS-1 encoders/decoders to the service-level API. Lightly tested. Test-client will ask for and print GRS1. Ztest will return dummy records on request. Added Explain encoders/decoders to the service-level API. Untested. Added Extended Services: Item Order encoders and decoders to the Service- level API. Untested. We could use a recent copy of the pertinent bits of the ILL protocol to add those bits. Added diagnostic format 1 encoders/decoders to the service-level API. Untested. Moved pretty-printing of structure-wrappers ({..}) from odr_seq.c to odr_cons.c, which causes a more correct output. Fixed handling of searchRequest in frontend server. NextResultSetPosition was always set to 0 when no records were requested in the searchRequest. * Added better external-handling. This shouldn't harm old code that *encodes* externals. It can break code that looks for a 'single-ASN1-type' representation, since those types that are known are now decoded immediately. Look at the SUTRS sample code in seshigh.c and client.c. Documentation updated. Handling of structured records in bend_fetchresponse. Length -1 marks structured record, type is deduced from format field. --- 1.0b2 1995/06/27 Fairly quick maintenance release to add SUTRS support. Fixed handling of SUTRS records in the demonstration client. * Added format field to the bend_fetchrequest and bend_fetchresponce structures of the backend API (frontend server). When the record is returned, the value of the format field is mapped to an OID. The value VAL_SUTRS will also cause a slightly different ASN.1 packaging of the record. The special value VAL_NONE in the bend_request means that no specific format was requested by the client. Documentation updated accordingly. Test server (ztest) will return a fixed dummy SUTRS record if your client requests SUTRS. Documentation updated accordingly. You can now set external libraries and RANLIB support in the top-level Makefile. --- 1.0b 1995/06/19 First public release. yaz-4.2.30/doc/tools.log.html0000644000175000017500000002046411741237744012717 000000000000004. Log

4. Log

YAZ has evolved a fairly complex log system which should be useful both for debugging YAZ itself, debugging applications that use YAZ, and for production use of those applications.

The log functions are declared in header yaz/log.h and implemented in src/log.c. Due to name clash with syslog and some math utilities the logging interface has been modified as of YAZ 2.0.29. The obsolete interface is still available if in header file yaz/log.h. The key points of the interface are:

   void yaz_log(int level, const char *fmt, ...)

   void yaz_log_init(int level, const char *prefix, const char *name);
   void yaz_log_init_file(const char *fname);
   void yaz_log_init_level(int level);
   void yaz_log_init_prefix(const char *prefix);
   void yaz_log_time_format(const char *fmt);
   void yaz_log_init_max_size(int mx);

   int yaz_log_mask_str(const char *str);
   int yaz_log_module_level(const char *name);
  

The reason for the whole log module is the yaz_log function. It takes a bitmask indicating the log levels, a printf-like format string, and a variable number of arguments to log.

The log level is a bit mask, that says on which level(s) the log entry should be made, and optionally set some behaviour of the logging. In the most simple cases, it can be one of YLOG_FATAL, YLOG_DEBUG, YLOG_WARN, YLOG_LOG. Those can be combined with bits that modify the way the log entry is written:YLOG_ERRNO, YLOG_NOTIME, YLOG_FLUSH. Most of the rest of the bits are deprecated, and should not be used. Use the dynamic log levels instead.

Applications that use YAZ, should not use the LOG_LOG for ordinary messages, but should make use of the dynamic loglevel system. This consists of two parts, defining the loglevel and checking it.

To define the log levels, the (main) program should pass a string to yaz_log_mask_str to define which log levels are to be logged. This string should be a comma-separated list of log level names, and can contain both hard-coded names and dynamic ones. The log level calculation starts with YLOG_DEFAULT_LEVEL and adds a bit for each word it meets, unless the word starts with a '-', in which case it clears the bit. If the string 'none' is found, all bits are cleared. Typically this string comes from the command-line, often identified by -v. The yaz_log_mask_str returns a log level that should be passed to yaz_log_init_level for it to take effect.

Each module should check what log bits it should be used, by calling yaz_log_module_level with a suitable name for the module. The name is cleared from a preceding path and an extension, if any, so it is quite possible to use __FILE__ for it. If the name has been passed to yaz_log_mask_str, the routine returns a non-zero bitmask, which should then be used in consequent calls to yaz_log. (It can also be tested, so as to avoid unnecessary calls to yaz_log, in time-critical places, or when the log entry would take time to construct.)

Yaz uses the following dynamic log levels: server, session, request, requestdetail for the server functionality. zoom for the zoom client api. ztest for the simple test server. malloc, nmem, odr, eventl for internal debugging of yaz itself. Of course, any program using yaz is welcome to define as many new ones, as it needs.

By default the log is written to stderr, but this can be changed by a call to yaz_log_init_file or yaz_log_init. If the log is directed to a file, the file size is checked at every write, and if it exceeds the limit given in yaz_log_init_max_size, the log is rotated. The rotation keeps one old version (with a .1 appended to the name). The size defaults to 1GB. Setting it to zero will disable the rotation feature.

  A typical yaz-log looks like this
  13:23:14-23/11 yaz-ztest(1) [session] Starting session from tcp:127.0.0.1 (pid=30968)
  13:23:14-23/11 yaz-ztest(1) [request] Init from 'YAZ' (81) (ver 2.0.28) OK
  13:23:17-23/11 yaz-ztest(1) [request] Search Z: @attrset Bib-1 foo  OK:7 hits
  13:23:22-23/11 yaz-ztest(1) [request] Present: [1] 2+2  OK 2 records returned
  13:24:13-23/11 yaz-ztest(1) [request] Close OK
  

The log entries start with a time stamp. This can be omitted by setting the YLOG_NOTIME bit in the loglevel. This way automatic tests can be hoped to produce identical log files, that are easy to diff. The format of the time stamp can be set with yaz_log_time_format, which takes a format string just like strftime.

Next in a log line comes the prefix, often the name of the program. For yaz-based servers, it can also contain the session number. Then comes one or more logbits in square brackets, depending on the logging level set by yaz_log_init_level and the loglevel passed to yaz_log_init_level. Finally comes the format string and additional values passed to yaz_log

The log level YLOG_LOGLVL, enabled by the string loglevel, will log all the log-level affecting operations. This can come in handy if you need to know what other log levels would be useful. Grep the logfile for [loglevel].

The log system is almost independent of the rest of YAZ, the only important dependence is of nmem, and that only for using the semaphore definition there.

The dynamic log levels and log rotation were introduced in YAZ 2.0.28. At the same time, the log bit names were changed from LOG_something to YLOG_something, to avoid collision with syslog.h.

yaz-4.2.30/doc/asn.pdu.html0000644000175000017500000004607611741237744012356 000000000000004. PDU Contents Table

4. PDU Contents Table

We include, for reference, a listing of the fields of each top-level PDU, as well as their default settings.

Table 5.1. Default settings for PDU Initialize Request

FieldTypeDefault Value
referenceIdZ_ReferenceIdNULL
protocolVersionOdr_bitmaskEmpty bitmask
optionsOdr_bitmaskEmpty bitmask
preferredMessageSizeOdr_int30*1024
maximumRecordSizeOdr_int30*1024
idAuthenticationZ_IdAuthenticationNULL
implementationIdchar*"81"
implementationNamechar*"YAZ"
implementationVersionchar*YAZ_VERSION
userInformationFieldZ_UserInformationNULL
otherInfoZ_OtherInformationNULL

Table 5.2. Default settings for PDU Initialize Response

FieldTypeDefault Value
referenceIdZ_ReferenceIdNULL
protocolVersionOdr_bitmaskEmpty bitmask
optionsOdr_bitmaskEmpty bitmask
preferredMessageSizeOdr_int30*1024
maximumRecordSizeOdr_int30*1024
resultOdr_boolTRUE
implementationIdchar*"id)"
implementationNamechar*"YAZ"
implementationVersionchar*YAZ_VERSION
userInformationFieldZ_UserInformationNULL
otherInfoZ_OtherInformationNULL

Table 5.3. Default settings for PDU Search Request

FieldTypeDefault Value
referenceIdZ_ReferenceIdNULL
smallSetUpperBoundOdr_int0
largeSetLowerBoundOdr_int1
mediumSetPresentNumberOdr_int0
replaceIndicatorOdr_boolTRUE
resultSetNamechar *"default"
num_databaseNamesOdr_int0
databaseNameschar **NULL
smallSetElementSetNamesZ_ElementSetNames NULL
mediumSetElementSetNamesZ_ElementSetNames NULL
preferredRecordSyntaxOdr_oidNULL
queryZ_QueryNULL
additionalSearchInfoZ_OtherInformation NULL
otherInfoZ_OtherInformationNULL

Table 5.4. Default settings for PDU Search Response

FieldTypeDefault Value
referenceIdZ_ReferenceIdNULL
resultCountOdr_int0
numberOfRecordsReturnedOdr_int0
nextResultSetPositionOdr_int0
searchStatusOdr_boolTRUE
resultSetStatusOdr_intNULL
presentStatusOdr_intNULL
recordsZ_RecordsNULL
additionalSearchInfoZ_OtherInformationNULL
otherInfoZ_OtherInformationNULL

Table 5.5. Default settings for PDU Present Request

FieldTypeDefault Value
referenceIdZ_ReferenceIdNULL
resultSetIdchar*"default"
resultSetStartPointOdr_int1
numberOfRecordsRequestedOdr_int10
num_rangesOdr_int0
additionalRangesZ_RangeNULL
recordCompositionZ_RecordCompositionNULL
preferredRecordSyntaxOdr_oidNULL
maxSegmentCountOdr_intNULL
maxRecordSizeOdr_intNULL
maxSegmentSizeOdr_intNULL
otherInfoZ_OtherInformationNULL

Table 5.6. Default settings for PDU Present Response

FieldTypeDefault Value
referenceIdZ_ReferenceIdNULL
numberOfRecordsReturnedOdr_int0
nextResultSetPositionOdr_int0
presentStatusOdr_intZ_PresentStatus_success
recordsZ_RecordsNULL
otherInfoZ_OtherInformationNULL

Table 5.7. Default settings for Delete Result Set Request

FieldTypeDefault Value
referenceId Z_ReferenceIdNULL
deleteFunctionOdr_intZ_DeleteResultSetRequest_list
num_idsOdr_int0
resultSetListchar**NULL
otherInfoZ_OtherInformationNULL

Table 5.8. Default settings for Delete Result Set Response

FieldTypeDefault Value
referenceIdZ_ReferenceIdNULL
deleteOperationStatusOdr_intZ_DeleteStatus_success
num_statusesOdr_int0
deleteListStatusesZ_ListStatus**NULL
numberNotDeletedOdr_intNULL
num_bulkStatusesOdr_int0
bulkStatusesZ_ListStatusNUL L
deleteMessagechar*NULL
otherInfoZ_OtherInformationNULL

Table 5.9. Default settings for Scan Request

FieldTypeDefault Value
referenceIdZ_ReferenceIdNULL
num_databaseNamesOdr_int0
databaseNameschar**NULL
attributeSetOdr_oidNULL
termListAndStartPointZ_AttributesPlus... NULL
stepSizeOdr_intNULL
numberOfTermsRequestedOdr_int20
preferredPositionInResponseOdr_intNULL
otherInfoZ_OtherInformationNULL

Table 5.10. Default settings for Scan Response

FieldTypeDefault Value
referenceIdZ_ReferenceIdNULL
stepSizeOdr_intNULL
scanStatusOdr_intZ_Scan_success
numberOfEntriesReturnedOdr_int0
positionOfTermOdr_intNULL
entriesZ_ListEntrisNULL
attributeSetOdr_oidNULL
otherInfoZ_OtherInformationNULL

Table 5.11. Default settings for Trigger Resource Control Request

FieldTypeDefault Value
referenceIdZ_ReferenceIdNULL
requestedActionOdr_int Z_TriggerResourceCtrl_resou..
prefResourceReportFormatOdr_oidNULL
resultSetWantedOdr_boolNULL
otherInfoZ_OtherInformationNULL

Table 5.12. Default settings for Resource Control Request

FieldTypeDefault Value
referenceIdZ_ReferenceIdNULL
suspendedFlagOdr_boolNULL
resourceReportZ_ExternalNULL
partialResultsAvailableOdr_intNULL
responseRequiredOdr_boolFALSE
triggeredRequestFlagOdr_boolNULL
otherInfoZ_OtherInformationNULL

Table 5.13. Default settings for Resource Control Response

FieldTypeDefault Value
referenceIdZ_ReferenceIdNULL
continueFlagbool_tTRUE
resultSetWantedbool_tNULL
otherInfoZ_OtherInformationNULL

Table 5.14. Default settings for Access Control Request

FieldTypeDefault Value
referenceIdZ_ReferenceIdNULL
whichenumZ_AccessRequest_simpleForm;
uunionNULL
otherInfoZ_OtherInformationNULL

Table 5.15. Default settings for Access Control Response

FieldTypeDefault Value
referenceIdZ_ReferenceIdNULL
whichenumZ_AccessResponse_simpleForm
uunionNULL
diagnosticZ_DiagRecNULL
otherInfoZ_OtherInformationNULL

Table 5.16. Default settings for Segment

FieldTypeDefault Value
referenceIdZ_ReferenceIdNULL
numberOfRecordsReturnedOdr_intvalue=0
num_segmentRecordsOdr_int0
segmentRecordsZ_NamePlusRecordNULL
otherInfoZ_OtherInformationNULL

Table 5.17. Default settings for Close

FieldTypeDefault Value
referenceIdZ_ReferenceIdNULL
closeReasonOdr_intZ_Close_finished
diagnosticInformationchar*NULL
resourceReportFormatOdr_oidNULL
resourceFormatZ_ExternalNULL
otherInfoZ_OtherInformationNULL

yaz-4.2.30/doc/comstack.html0000644000175000017500000001067711741237744012610 00000000000000Chapter 9. The COMSTACK Module

Chapter 9. The COMSTACK Module

1. Synopsis (blocking mode)

    COMSTACK stack;
    char *buf = 0;
    int size = 0, length_incoming;
    char server_address_str[] = "localhost:9999";
    void *server_address_ip;
    int status;

    char *protocol_package = "GET / HTTP/1.0\r\n\r\n";
    int protocol_package_length = strlen(protocol_package);

    stack = cs_create(tcpip_type, 1, PROTO_HTTP);
    if (!stack) {
        perror("cs_create");  /* use perror() here since we have no stack yet */
        return -1;
    }
    
    server_address_ip = cs_straddr(stack, server_address_str);
    if (!server_address_ip)
    {
        fprintf(stderr, "cs_straddr: address could not be resolved\n");
        return -1;
    }
    
    status = cs_connect(stack, server_address_ip);
    if (status != 0) {
        fprintf(stderr, "cs_connect: %s\n", cs_strerror(stack));
        return -1;
    }
    
    status = cs_put(stack, protocol_package, protocol_package_length);
    if (status) {
        fprintf(stderr, "cs_put: %s\n", cs_strerror(stack));
        return -1;
    }
    /* Now get a response */
    
    length_incoming = cs_get(stack, &buf, &size);
    if (!length_incoming) {
        fprintf(stderr, "Connection closed\n");
        return -1;
    } else if (length_incoming < 0) {
        fprintf(stderr, "cs_get: %s\n", cs_strerror(stack));
        return -1;
    }
    
    /* Print result */
    fwrite(buf, length_incoming, 1, stdout);
    
    /* clean up */
    cs_close(stack);
    if (buf)
        free(buf);
    return 0;

   
yaz-4.2.30/doc/Makefile.in0000644000175000017500000007127011741237726012157 00000000000000# Makefile.in generated by automake 1.11.3 from Makefile.am. # @configure_input@ # Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, # 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011 Free Software # Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ VPATH = @srcdir@ pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ subdir = doc DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in \ $(srcdir)/local.ent.in NEWS ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/m4/ac_check_icu.m4 \ $(top_srcdir)/m4/acx_pthread.m4 $(top_srcdir)/m4/libtool.m4 \ $(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \ $(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \ $(top_srcdir)/m4/yaz.m4 $(top_srcdir)/m4/yaz_libxml2.m4 \ $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/include/config.h CONFIG_CLEAN_FILES = local.ent CONFIG_CLEAN_VPATH_FILES = SOURCES = DIST_SOURCES = RECURSIVE_TARGETS = all-recursive check-recursive dvi-recursive \ html-recursive info-recursive install-data-recursive \ install-dvi-recursive install-exec-recursive \ install-html-recursive install-info-recursive \ install-pdf-recursive install-ps-recursive install-recursive \ installcheck-recursive installdirs-recursive pdf-recursive \ ps-recursive uninstall-recursive am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; am__vpath_adj = case $$p in \ $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \ *) f=$$p;; \ esac; am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`; am__install_max = 40 am__nobase_strip_setup = \ srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'` am__nobase_strip = \ for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||" am__nobase_list = $(am__nobase_strip_setup); \ for p in $$list; do echo "$$p $$p"; done | \ sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \ $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \ if (++n[$$2] == $(am__install_max)) \ { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \ END { for (dir in files) print dir, files[dir] }' am__base_list = \ sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \ sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g' am__uninstall_files_from_dir = { \ test -z "$$files" \ || { test ! -d "$$dir" && test ! -f "$$dir" && test ! -r "$$dir"; } \ || { echo " ( cd '$$dir' && rm -f" $$files ")"; \ $(am__cd) "$$dir" && rm -f $$files; }; \ } man1dir = $(mandir)/man1 am__installdirs = "$(DESTDIR)$(man1dir)" "$(DESTDIR)$(man7dir)" \ "$(DESTDIR)$(man8dir)" "$(DESTDIR)$(docdir)" man7dir = $(mandir)/man7 man8dir = $(mandir)/man8 NROFF = nroff MANS = $(man_MANS) DATA = $(doc_DATA) RECURSIVE_CLEAN_TARGETS = mostlyclean-recursive clean-recursive \ distclean-recursive maintainer-clean-recursive AM_RECURSIVE_TARGETS = $(RECURSIVE_TARGETS:-recursive=) \ $(RECURSIVE_CLEAN_TARGETS:-recursive=) tags TAGS ctags CTAGS \ distdir ETAGS = etags CTAGS = ctags DIST_SUBDIRS = $(SUBDIRS) DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) am__relativize = \ dir0=`pwd`; \ sed_first='s,^\([^/]*\)/.*$$,\1,'; \ sed_rest='s,^[^/]*/*,,'; \ sed_last='s,^.*/\([^/]*\)$$,\1,'; \ sed_butlast='s,/*[^/]*$$,,'; \ while test -n "$$dir1"; do \ first=`echo "$$dir1" | sed -e "$$sed_first"`; \ if test "$$first" != "."; then \ if test "$$first" = ".."; then \ dir2=`echo "$$dir0" | sed -e "$$sed_last"`/"$$dir2"; \ dir0=`echo "$$dir0" | sed -e "$$sed_butlast"`; \ else \ first2=`echo "$$dir2" | sed -e "$$sed_first"`; \ if test "$$first2" = "$$first"; then \ dir2=`echo "$$dir2" | sed -e "$$sed_rest"`; \ else \ dir2="../$$dir2"; \ fi; \ dir0="$$dir0"/"$$first"; \ fi; \ fi; \ dir1=`echo "$$dir1" | sed -e "$$sed_rest"`; \ done; \ reldir="$$dir2" ACLOCAL = @ACLOCAL@ AMTAR = @AMTAR@ AR = @AR@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CYGPATH_W = @CYGPATH_W@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DLLTOOL = @DLLTOOL@ DSSSL_DIR = @DSSSL_DIR@ DSYMUTIL = @DSYMUTIL@ DTD_DIR = @DTD_DIR@ DUMPBIN = @DUMPBIN@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ FGREP = @FGREP@ GREP = @GREP@ HTML_COMPILE = @HTML_COMPILE@ ICU_CFLAGS = @ICU_CFLAGS@ ICU_CONFIG = @ICU_CONFIG@ ICU_CPPFLAGS = @ICU_CPPFLAGS@ ICU_CXXFLAGS = @ICU_CXXFLAGS@ ICU_LIBS = @ICU_LIBS@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ LD = @LD@ LDFLAGS = @LDFLAGS@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ LIPO = @LIPO@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ MAKEINFO = @MAKEINFO@ MANIFEST_TOOL = @MANIFEST_TOOL@ MAN_COMPILE = @MAN_COMPILE@ MKDIR_P = @MKDIR_P@ NM = @NM@ NMEDIT = @NMEDIT@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ OTOOL = @OTOOL@ OTOOL64 = @OTOOL64@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ PDF_COMPILE = @PDF_COMPILE@ PTHREAD_CC = @PTHREAD_CC@ PTHREAD_CFLAGS = @PTHREAD_CFLAGS@ PTHREAD_LIBS = @PTHREAD_LIBS@ RANLIB = @RANLIB@ READLINE_LIBS = @READLINE_LIBS@ SED = @SED@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ SSL_CFLAGS = @SSL_CFLAGS@ SSL_LIBS = @SSL_LIBS@ STRIP = @STRIP@ TCLSH = @TCLSH@ TCPD_LIBS = @TCPD_LIBS@ TKL_COMPILE = @TKL_COMPILE@ VERSION = @VERSION@ VERSION_HEX = @VERSION_HEX@ VERSION_SHA1 = @VERSION_SHA1@ WIN_FILEVERSION = @WIN_FILEVERSION@ XML2_CFLAGS = @XML2_CFLAGS@ XSLTPROC_COMPILE = @XSLTPROC_COMPILE@ XSL_DIR = @XSL_DIR@ YACC = @YACC@ YAZ_CONFIG_CFLAGS = @YAZ_CONFIG_CFLAGS@ YAZ_CONF_CFLAGS = @YAZ_CONF_CFLAGS@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_ct_AR = @ac_ct_AR@ ac_ct_CC = @ac_ct_CC@ ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ acx_pthread_config = @acx_pthread_config@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ pkgconfigpath = @pkgconfigpath@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ SUBDIRS = common XMLFILES = bookinfo.xml introduction.xml installation.xml \ indexdata.xml \ asn.xml tools.xml odr.xml comstack.xml server.xml license.xml \ future.xml zoom.xml credits.xml gfs-options.xml \ yaz.xml yaz-client-commands.xml soap.xml gfs-virtual.xml gfs-synopsis.xml \ std-oid-table.xml manref.xml HTMLFILES = index.html MANFILES = yaz-client.1 yaz-ztest.8 \ yaz-config.1 yaz.7 zoomsh.1 yaz-asncomp.1 \ yaz-marcdump.1 yaz-iconv.1 yaz-log.7 \ yaz-illclient.1 yaz-icu.1 yaz-url.1 bib1-attr.7 \ yaz-json-parse.1 REFFILES = yaz-client-man.xml yaz-ztest-man.xml yaz-config-man.xml \ yaz-man.xml zoomsh-man.xml yaz-asncomp-man.xml \ yaz-marcdump-man.xml yaz-iconv-man.xml yaz-log-man.xml \ yaz-illclient-man.xml yaz-icu-man.xml yaz-url-man.xml \ bib1-attr-man.xml yaz-json-parse-man.xml SUPPORTFILES = entities.ent apilayer.obj local.ent.in doc_DATA = $(HTMLFILES) apilayer.png man_MANS = $(MANFILES) EXTRA_DIST = $(XMLFILES) $(SUPPORTFILES) $(man_MANS) $(REFFILES) \ $(doc_DATA) all: all-recursive .SUFFIXES: $(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu doc/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --gnu doc/Makefile .PRECIOUS: Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): local.ent: $(top_builddir)/config.status $(srcdir)/local.ent.in cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ mostlyclean-libtool: -rm -f *.lo clean-libtool: -rm -rf .libs _libs install-man1: $(man_MANS) @$(NORMAL_INSTALL) test -z "$(man1dir)" || $(MKDIR_P) "$(DESTDIR)$(man1dir)" @list=''; test -n "$(man1dir)" || exit 0; \ { for i in $$list; do echo "$$i"; done; \ l2='$(man_MANS)'; for i in $$l2; do echo "$$i"; done | \ sed -n '/\.1[a-z]*$$/p'; \ } | while read p; do \ if test -f $$p; then d=; else d="$(srcdir)/"; fi; \ echo "$$d$$p"; echo "$$p"; \ done | \ sed -e 'n;s,.*/,,;p;h;s,.*\.,,;s,^[^1][0-9a-z]*$$,1,;x' \ -e 's,\.[0-9a-z]*$$,,;$(transform);G;s,\n,.,' | \ sed 'N;N;s,\n, ,g' | { \ list=; while read file base inst; do \ if test "$$base" = "$$inst"; then list="$$list $$file"; else \ echo " $(INSTALL_DATA) '$$file' '$(DESTDIR)$(man1dir)/$$inst'"; \ $(INSTALL_DATA) "$$file" "$(DESTDIR)$(man1dir)/$$inst" || exit $$?; \ fi; \ done; \ for i in $$list; do echo "$$i"; done | $(am__base_list) | \ while read files; do \ test -z "$$files" || { \ echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(man1dir)'"; \ $(INSTALL_DATA) $$files "$(DESTDIR)$(man1dir)" || exit $$?; }; \ done; } uninstall-man1: @$(NORMAL_UNINSTALL) @list=''; test -n "$(man1dir)" || exit 0; \ files=`{ for i in $$list; do echo "$$i"; done; \ l2='$(man_MANS)'; for i in $$l2; do echo "$$i"; done | \ sed -n '/\.1[a-z]*$$/p'; \ } | sed -e 's,.*/,,;h;s,.*\.,,;s,^[^1][0-9a-z]*$$,1,;x' \ -e 's,\.[0-9a-z]*$$,,;$(transform);G;s,\n,.,'`; \ dir='$(DESTDIR)$(man1dir)'; $(am__uninstall_files_from_dir) install-man7: $(man_MANS) @$(NORMAL_INSTALL) test -z "$(man7dir)" || $(MKDIR_P) "$(DESTDIR)$(man7dir)" @list=''; test -n "$(man7dir)" || exit 0; \ { for i in $$list; do echo "$$i"; done; \ l2='$(man_MANS)'; for i in $$l2; do echo "$$i"; done | \ sed -n '/\.7[a-z]*$$/p'; \ } | while read p; do \ if test -f $$p; then d=; else d="$(srcdir)/"; fi; \ echo "$$d$$p"; echo "$$p"; \ done | \ sed -e 'n;s,.*/,,;p;h;s,.*\.,,;s,^[^7][0-9a-z]*$$,7,;x' \ -e 's,\.[0-9a-z]*$$,,;$(transform);G;s,\n,.,' | \ sed 'N;N;s,\n, ,g' | { \ list=; while read file base inst; do \ if test "$$base" = "$$inst"; then list="$$list $$file"; else \ echo " $(INSTALL_DATA) '$$file' '$(DESTDIR)$(man7dir)/$$inst'"; \ $(INSTALL_DATA) "$$file" "$(DESTDIR)$(man7dir)/$$inst" || exit $$?; \ fi; \ done; \ for i in $$list; do echo "$$i"; done | $(am__base_list) | \ while read files; do \ test -z "$$files" || { \ echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(man7dir)'"; \ $(INSTALL_DATA) $$files "$(DESTDIR)$(man7dir)" || exit $$?; }; \ done; } uninstall-man7: @$(NORMAL_UNINSTALL) @list=''; test -n "$(man7dir)" || exit 0; \ files=`{ for i in $$list; do echo "$$i"; done; \ l2='$(man_MANS)'; for i in $$l2; do echo "$$i"; done | \ sed -n '/\.7[a-z]*$$/p'; \ } | sed -e 's,.*/,,;h;s,.*\.,,;s,^[^7][0-9a-z]*$$,7,;x' \ -e 's,\.[0-9a-z]*$$,,;$(transform);G;s,\n,.,'`; \ dir='$(DESTDIR)$(man7dir)'; $(am__uninstall_files_from_dir) install-man8: $(man_MANS) @$(NORMAL_INSTALL) test -z "$(man8dir)" || $(MKDIR_P) "$(DESTDIR)$(man8dir)" @list=''; test -n "$(man8dir)" || exit 0; \ { for i in $$list; do echo "$$i"; done; \ l2='$(man_MANS)'; for i in $$l2; do echo "$$i"; done | \ sed -n '/\.8[a-z]*$$/p'; \ } | while read p; do \ if test -f $$p; then d=; else d="$(srcdir)/"; fi; \ echo "$$d$$p"; echo "$$p"; \ done | \ sed -e 'n;s,.*/,,;p;h;s,.*\.,,;s,^[^8][0-9a-z]*$$,8,;x' \ -e 's,\.[0-9a-z]*$$,,;$(transform);G;s,\n,.,' | \ sed 'N;N;s,\n, ,g' | { \ list=; while read file base inst; do \ if test "$$base" = "$$inst"; then list="$$list $$file"; else \ echo " $(INSTALL_DATA) '$$file' '$(DESTDIR)$(man8dir)/$$inst'"; \ $(INSTALL_DATA) "$$file" "$(DESTDIR)$(man8dir)/$$inst" || exit $$?; \ fi; \ done; \ for i in $$list; do echo "$$i"; done | $(am__base_list) | \ while read files; do \ test -z "$$files" || { \ echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(man8dir)'"; \ $(INSTALL_DATA) $$files "$(DESTDIR)$(man8dir)" || exit $$?; }; \ done; } uninstall-man8: @$(NORMAL_UNINSTALL) @list=''; test -n "$(man8dir)" || exit 0; \ files=`{ for i in $$list; do echo "$$i"; done; \ l2='$(man_MANS)'; for i in $$l2; do echo "$$i"; done | \ sed -n '/\.8[a-z]*$$/p'; \ } | sed -e 's,.*/,,;h;s,.*\.,,;s,^[^8][0-9a-z]*$$,8,;x' \ -e 's,\.[0-9a-z]*$$,,;$(transform);G;s,\n,.,'`; \ dir='$(DESTDIR)$(man8dir)'; $(am__uninstall_files_from_dir) install-docDATA: $(doc_DATA) @$(NORMAL_INSTALL) test -z "$(docdir)" || $(MKDIR_P) "$(DESTDIR)$(docdir)" @list='$(doc_DATA)'; test -n "$(docdir)" || list=; \ for p in $$list; do \ if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ echo "$$d$$p"; \ done | $(am__base_list) | \ while read files; do \ echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(docdir)'"; \ $(INSTALL_DATA) $$files "$(DESTDIR)$(docdir)" || exit $$?; \ done uninstall-docDATA: @$(NORMAL_UNINSTALL) @list='$(doc_DATA)'; test -n "$(docdir)" || list=; \ files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \ dir='$(DESTDIR)$(docdir)'; $(am__uninstall_files_from_dir) # This directory's subdirectories are mostly independent; you can cd # into them and run `make' without going through this Makefile. # To change the values of `make' variables: instead of editing Makefiles, # (1) if the variable is set in `config.status', edit `config.status' # (which will cause the Makefiles to be regenerated when you run `make'); # (2) otherwise, pass the desired values on the `make' command line. $(RECURSIVE_TARGETS): @fail= failcom='exit 1'; \ for f in x $$MAKEFLAGS; do \ case $$f in \ *=* | --[!k]*);; \ *k*) failcom='fail=yes';; \ esac; \ done; \ dot_seen=no; \ target=`echo $@ | sed s/-recursive//`; \ list='$(SUBDIRS)'; for subdir in $$list; do \ echo "Making $$target in $$subdir"; \ if test "$$subdir" = "."; then \ dot_seen=yes; \ local_target="$$target-am"; \ else \ local_target="$$target"; \ fi; \ ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ || eval $$failcom; \ done; \ if test "$$dot_seen" = "no"; then \ $(MAKE) $(AM_MAKEFLAGS) "$$target-am" || exit 1; \ fi; test -z "$$fail" $(RECURSIVE_CLEAN_TARGETS): @fail= failcom='exit 1'; \ for f in x $$MAKEFLAGS; do \ case $$f in \ *=* | --[!k]*);; \ *k*) failcom='fail=yes';; \ esac; \ done; \ dot_seen=no; \ case "$@" in \ distclean-* | maintainer-clean-*) list='$(DIST_SUBDIRS)' ;; \ *) list='$(SUBDIRS)' ;; \ esac; \ rev=''; for subdir in $$list; do \ if test "$$subdir" = "."; then :; else \ rev="$$subdir $$rev"; \ fi; \ done; \ rev="$$rev ."; \ target=`echo $@ | sed s/-recursive//`; \ for subdir in $$rev; do \ echo "Making $$target in $$subdir"; \ if test "$$subdir" = "."; then \ local_target="$$target-am"; \ else \ local_target="$$target"; \ fi; \ ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ || eval $$failcom; \ done && test -z "$$fail" tags-recursive: list='$(SUBDIRS)'; for subdir in $$list; do \ test "$$subdir" = . || ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) tags); \ done ctags-recursive: list='$(SUBDIRS)'; for subdir in $$list; do \ test "$$subdir" = . || ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) ctags); \ done ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES) list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in files) print i; }; }'`; \ mkid -fID $$unique tags: TAGS TAGS: tags-recursive $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) set x; \ here=`pwd`; \ if ($(ETAGS) --etags-include --version) >/dev/null 2>&1; then \ include_option=--etags-include; \ empty_fix=.; \ else \ include_option=--include; \ empty_fix=; \ fi; \ list='$(SUBDIRS)'; for subdir in $$list; do \ if test "$$subdir" = .; then :; else \ test ! -f $$subdir/TAGS || \ set "$$@" "$$include_option=$$here/$$subdir/TAGS"; \ fi; \ done; \ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in files) print i; }; }'`; \ shift; \ if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ test -n "$$unique" || unique=$$empty_fix; \ if test $$# -gt 0; then \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ "$$@" $$unique; \ else \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ $$unique; \ fi; \ fi ctags: CTAGS CTAGS: ctags-recursive $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in files) print i; }; }'`; \ test -z "$(CTAGS_ARGS)$$unique" \ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ $$unique GTAGS: here=`$(am__cd) $(top_builddir) && pwd` \ && $(am__cd) $(top_srcdir) \ && gtags -i $(GTAGS_ARGS) "$$here" distclean-tags: -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags distdir: $(DISTFILES) @list='$(MANS)'; if test -n "$$list"; then \ list=`for p in $$list; do \ if test -f $$p; then d=; else d="$(srcdir)/"; fi; \ if test -f "$$d$$p"; then echo "$$d$$p"; else :; fi; done`; \ if test -n "$$list" && \ grep 'ab help2man is required to generate this page' $$list >/dev/null; then \ echo "error: found man pages containing the \`missing help2man' replacement text:" >&2; \ grep -l 'ab help2man is required to generate this page' $$list | sed 's/^/ /' >&2; \ echo " to fix them, install help2man, remove and regenerate the man pages;" >&2; \ echo " typically \`make maintainer-clean' will remove them" >&2; \ exit 1; \ else :; fi; \ else :; fi @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done @list='$(DIST_SUBDIRS)'; for subdir in $$list; do \ if test "$$subdir" = .; then :; else \ test -d "$(distdir)/$$subdir" \ || $(MKDIR_P) "$(distdir)/$$subdir" \ || exit 1; \ fi; \ done @list='$(DIST_SUBDIRS)'; for subdir in $$list; do \ if test "$$subdir" = .; then :; else \ dir1=$$subdir; dir2="$(distdir)/$$subdir"; \ $(am__relativize); \ new_distdir=$$reldir; \ dir1=$$subdir; dir2="$(top_distdir)"; \ $(am__relativize); \ new_top_distdir=$$reldir; \ echo " (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) top_distdir="$$new_top_distdir" distdir="$$new_distdir" \\"; \ echo " am__remove_distdir=: am__skip_length_check=: am__skip_mode_fix=: distdir)"; \ ($(am__cd) $$subdir && \ $(MAKE) $(AM_MAKEFLAGS) \ top_distdir="$$new_top_distdir" \ distdir="$$new_distdir" \ am__remove_distdir=: \ am__skip_length_check=: \ am__skip_mode_fix=: \ distdir) \ || exit 1; \ fi; \ done $(MAKE) $(AM_MAKEFLAGS) \ top_distdir="$(top_distdir)" distdir="$(distdir)" \ dist-hook check-am: all-am check: check-recursive all-am: Makefile $(MANS) $(DATA) installdirs: installdirs-recursive installdirs-am: for dir in "$(DESTDIR)$(man1dir)" "$(DESTDIR)$(man7dir)" "$(DESTDIR)$(man8dir)" "$(DESTDIR)$(docdir)"; do \ test -z "$$dir" || $(MKDIR_P) "$$dir"; \ done install: install-recursive install-exec: install-exec-recursive install-data: install-data-recursive uninstall: uninstall-recursive install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-recursive install-strip: if test -z '$(STRIP)'; then \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ install; \ else \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ fi mostlyclean-generic: clean-generic: distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." clean: clean-recursive clean-am: clean-generic clean-libtool mostlyclean-am distclean: distclean-recursive -rm -f Makefile distclean-am: clean-am distclean-generic distclean-tags dvi: dvi-recursive dvi-am: html: html-recursive html-am: info: info-recursive info-am: install-data-am: install-docDATA install-man @$(NORMAL_INSTALL) $(MAKE) $(AM_MAKEFLAGS) install-data-hook install-dvi: install-dvi-recursive install-dvi-am: install-exec-am: install-html: install-html-recursive install-html-am: install-info: install-info-recursive install-info-am: install-man: install-man1 install-man7 install-man8 install-pdf: install-pdf-recursive install-pdf-am: install-ps: install-ps-recursive install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-recursive -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-recursive mostlyclean-am: mostlyclean-generic mostlyclean-libtool pdf: pdf-recursive pdf-am: ps: ps-recursive ps-am: uninstall-am: uninstall-docDATA uninstall-man @$(NORMAL_INSTALL) $(MAKE) $(AM_MAKEFLAGS) uninstall-hook uninstall-man: uninstall-man1 uninstall-man7 uninstall-man8 .MAKE: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) ctags-recursive \ install-am install-data-am install-strip tags-recursive \ uninstall-am .PHONY: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) CTAGS GTAGS \ all all-am check check-am clean clean-generic clean-libtool \ ctags ctags-recursive dist-hook distclean distclean-generic \ distclean-libtool distclean-tags distdir dvi dvi-am html \ html-am info info-am install install-am install-data \ install-data-am install-data-hook install-docDATA install-dvi \ install-dvi-am install-exec install-exec-am install-html \ install-html-am install-info install-info-am install-man \ install-man1 install-man7 install-man8 install-pdf \ install-pdf-am install-ps install-ps-am install-strip \ installcheck installcheck-am installdirs installdirs-am \ maintainer-clean maintainer-clean-generic mostlyclean \ mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \ tags tags-recursive uninstall uninstall-am uninstall-docDATA \ uninstall-hook uninstall-man uninstall-man1 uninstall-man7 \ uninstall-man8 std-oid-table.xml: $(srcdir)/../src/oid.csv $(TCLSH) $(srcdir)/../src/oidtoc.tcl $(srcdir) $(srcdir)/../src/oid.csv std-oid-table.xml yaz-client.1: $(srcdir)/yaz-client-man.xml $(srcdir)/yaz-client-commands.xml $(MAN_COMPILE) $(srcdir)/yaz-client-man.xml yaz-ztest.8: yaz-ztest-man.xml gfs-options.xml gfs-synopsis.xml gfs-virtual.xml $(MAN_COMPILE) $(srcdir)/yaz-ztest-man.xml yaz-config.1: yaz-config-man.xml $(MAN_COMPILE) $(srcdir)/yaz-config-man.xml yaz.7: yaz-man.xml $(MAN_COMPILE) $(srcdir)/yaz-man.xml bib1-attr.7: bib1-attr-man.xml $(MAN_COMPILE) $(srcdir)/bib1-attr-man.xml zoomsh.1: zoomsh-man.xml $(MAN_COMPILE) $(srcdir)/zoomsh-man.xml yaz-asncomp.1: yaz-asncomp-man.xml $(MAN_COMPILE) $(srcdir)/yaz-asncomp-man.xml yaz-marcdump.1: yaz-marcdump-man.xml $(MAN_COMPILE) $(srcdir)/yaz-marcdump-man.xml yaz-iconv.1: yaz-iconv-man.xml $(MAN_COMPILE) $(srcdir)/yaz-iconv-man.xml yaz-illclient.1: yaz-illclient-man.xml $(MAN_COMPILE) $(srcdir)/yaz-illclient-man.xml yaz-log.7: yaz-log-man.xml $(MAN_COMPILE) $(srcdir)/yaz-log-man.xml yaz-icu.1: yaz-icu-man.xml $(MAN_COMPILE) $(srcdir)/yaz-icu-man.xml yaz-url.1: yaz-url-man.xml $(MAN_COMPILE) $(srcdir)/yaz-url-man.xml yaz-json-parse.1: yaz-json-parse-man.xml $(MAN_COMPILE) $(srcdir)/yaz-json-parse-man.xml $(HTMLFILES): $(XMLFILES) rm -f *.html $(HTML_COMPILE) $(srcdir)/yaz.xml yaz.pdf: $(XMLFILES) $(PDF_COMPILE) $(srcdir)/yaz.xml yazj.pdf: jade -E14 -D $(srcdir) -d common/print.dsl -t tex $(srcdir)/common/xml.dcl $(srcdir)/yaz.xml rm -f yazj.pdf cp yaz.tex yazj.tex pdfjadetex yazj.tex pdfjadetex yazj.tex >/dev/null pdfjadetex yazj.tex >/dev/null manref.xml: $(REFFILES) $(srcdir)/common/stripref.xsl rm -f manref.xml for i in $(REFFILES); do \ xsltproc $(srcdir)/common/stripref.xsl $(srcdir)/$$i | sed 1d >>manref.xml; \ done apilayer.png: tgif -print -xbm apilayer.obj xbmtopbm apilayer.png dist-hook: if test -f index.html; then d=.; else d="$(srcdir)"; fi; \ for p in $$d/*.html; do \ cp $$p $(distdir); \ done doc-clean: rm -f manref.xml *.html *.[0-9] *.pdf install-data-hook: if test -f index.html; then d=.; else d="$(srcdir)"; fi; \ for p in $$d/*.html; do \ $(INSTALL_DATA) $$p $(DESTDIR)$(docdir); \ done uninstall-hook: rm -r $(DESTDIR)$(docdir) # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: yaz-4.2.30/doc/yaz-marcdump-man.xml0000644000175000017500000001747511733047144014017 00000000000000 %local; %entities; %idcommon; ]> YAZ &version; Index Data yaz-marcdump 1 Commands yaz-marcdump MARC record dump utility yaz-marcdump file DESCRIPTION yaz-marcdump reads MARC records from one or more files. It parses each record and supports output in line-format, ISO2709, MARCXML, MarcXchange as well as Hex output. This utility parses records ISO2709(raw MARC) as well as XML if that is structured as MARCXML/MarcXchange. As of YAZ 2.1.18, OAI-MARC is no longer supported. OAI-MARC is deprecated. Use MARCXML instead. By default, each record is written to standard output in a line format with newline for each field, $x for each subfield x. The output format may be changed with option -o, yaz-marcdump can also be requested to perform character set conversion of each record. OPTIONS -i format Specifies input format. Must be one of marcxml, marc (ISO2709), marcxchange (ISO25577), line (line mode MARC), or turbomarc (Turbo MARC). -o format Specifies output format. Must be one of marcxml, marc (ISO2709), marcxchange (ISO25577), line (line mode MARC), or turbomarc (Turbo MARC). -f from Specify the character set from of the input MARC record. Should be used in conjunction with option -t. Refer to the yaz-iconv man page for supported character sets. -t to Specify the character set of of the output. Should be used in conjunction with option -f. Refer to the yaz-iconv man page for supported character sets. -l leaderspec Specify a simple modification string for MARC leader. The leaderspec is a list of pos=value pairs, where pos is an integer offset (0 - 23) for leader. Value is either a quoted string or an integer (character value in decimal). Pairs are comma separated. For example, to set leader at offset 9 to a, use 9='a'. -s prefix Writes a chunk of records to a separate file with prefix given, i.e. splits a record batch into files with only at most "chunk" ISO2709 record per file. By default chunk is 1 (one record per file). See option -C. -C chunksize Specifies chunk size; to be used conjunction with option -s. -p Makes yaz-marcdump prints record number and input file offset of each record read. -n MARC output is omitted so that MARC input is only checkecd. -v Writes more information about the parsing process. Useful if you have ill-formatted ISO2709 records as input. -V Prints YAZ version. EXAMPLES The following command converts MARC21/USMARC in MARC-8 encoding to MARC21/USMARC in UTF-8 encoding. Leader offset 9 is set to 'a'. Both input and output records are ISO2709 encoded. yaz-marcdump -f MARC-8 -t UTF-8 -o marc -l 9=97 marc21.raw >marc21.utf8.raw The same records may be converted to MARCXML instead in UTF-8: yaz-marcdump -f MARC-8 -t UTF-8 -o marcxml marc21.raw >marcxml.xml Turbo MARC is a compact XML notation with same semantics as MARCXML, but which allows for faster processing via XSLT. In order to generate Turbo MARC records encoded in UTF-8 from MARC21 (ISO), one could use: yaz-marcdump -f MARC8 -t UTF8 -o turbomarc -i marc marc21.raw >out.xml FILES prefix/bin/yaz-marcdump prefix/include/yaz/marcdisp.h SEE ALSO yaz 7 yaz-iconv 1 MARCXML. ISO25577. yaz-4.2.30/doc/yaz-asncomp.10000644000175000017500000001260011741237740012421 00000000000000'\" t .\" Title: yaz-asncomp .\" Author: Index Data .\" Generator: DocBook XSL Stylesheets v1.76.1 .\" Date: 04/11/2012 .\" Manual: Commands .\" Source: YAZ 4.2.30 .\" Language: English .\" .TH "YAZ\-ASNCOMP" "1" "04/11/2012" "YAZ 4.2.30" "Commands" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" yaz-asncomp \- YAZ ASN\&.1 compiler .SH "SYNOPSIS" .HP \w'\fByaz\-asncomp\fR\ 'u \fByaz\-asncomp\fR [\fB\-v\fR] [\fB\-c\ \fR\fB\fIcfile\fR\fR] [\fB\-h\ \fR\fB\fIhfile\fR\fR] [\fB\-p\ \fR\fB\fIpfile\fR\fR] [\fB\-d\ \fR\fB\fIconfig\fR\fR] [\fB\-I\ \fR\fB\fIincludeout\fR\fR] [\fB\-i\ \fR\fB\fIincludedir\fR\fR] [\fB\-m\ \fR\fB\fImodule\fR\fR] [filename] .SH "DESCRIPTION" .PP \fByaz\-asncomp\fR is an ASN\&.1 compiler that reads an ASN\&.1 specification in \fIfilename\fR and produces C/C++ definitions and BER encoders/decoders for it\&. .PP The produced C/C++ code and header files uses the ODR module of YAZ which is a library that encodes/decodes/prints BER packages\&. \fByaz\-asncomp\fR allows you to specify name of resulting source via options\&. Alternatively, you can specify a DEFINISIONS file, which provides customized output to many output files \- if the ASN\&.1 specification file consists of many modules\&. .PP This utility is written in Tcl\&. Any version of Tcl should work\&. .SH "OPTIONS" .PP \-v .RS 4 Makes the ASN\&.1 compiler print more verbose about the various stages of operations\&. .RE .PP \-c \fIcfile\fR .RS 4 Specifies the name of the C/C++ file with encoders/decoders\&. .RE .PP \-h \fIhfile\fR .RS 4 Specifies the name of header file with definitions\&. .RE .PP \-p \fIpfile\fR .RS 4 Specifies the name of the a private header file with definitions\&. By default all definitions are put in header file (option \-h)\&. .RE .PP \-d \fIdfile\fR .RS 4 Specifies the name of a definitions file\&. .RE .PP \-I \fIiout\fR .RS 4 Specifies first part of directory in which header files are written\&. .RE .PP \-i \fIidir\fR .RS 4 Specifies second part of directory in which header files are written\&. .RE .PP \-m \fImodule\fR .RS 4 Specifies that ASN\&.1 compiler should only process the module given\&. If this option is not specified, all modules in the ASN\&.1 file are processed\&. .RE .SH "DEFINITIONS FILE" .PP The definitions file is really a Tcl script but follows traditional rules for Shell like configuration files\&. That is # denotes the beginning of a comment\&. Definitions are line oriented\&. The definitions files usually consists of a series of variable assignments of the form: .PP set \fIname\fR \fIvalue\fR .PP Available variables are: .PP default\-prefix .RS 4 Sets prefix for names in the produced output\&. The value consists of three tokens: C function prefix, C typedef prefix and preprocessor prefix respectively\&. .RE .PP prefix(\fImodule\fR) .RS 4 This value sets prefix values for module \fImodule\fR\&. The value has same form as default\-prefix\&. .RE .PP filename(\fImodule\fR) .RS 4 Specifies filename for C/header file for module \fImodule\fR\&. .RE .PP init(\fImodule\fR,h) .RS 4 Code fragment to be put in first part of public header for module \fImodule\fR\&. .RE .PP body(\fImodule\fR,h) .RS 4 Code fragment to be put in last part of public header for module \fImodule\fR (trailer)\&. .RE .PP init(\fImodule\fR,c) .RS 4 Code fragment to be put in first part of C based encoder/decoder for module \fImodule\fR\&. .RE .PP body(\fImodule\fR,c) .RS 4 Code fragment to be put in last part of C based encoder/decoder for module \fImodule\fR (trailer)\&. .RE .PP map(\fImodule\fR,\fIname\fR) .RS 4 Maps ASN\&.1 type in module \fImodule\fR of \fIname\fR to value\&. .RE .PP membermap(\fImodule\fR,\fIname\fR,\fImember\fR) .RS 4 Maps member \fImember\fR in SEQUENCE/CHOICE of \fIname\fR in module \fImodule\fR to value\&. The value consists of one or two tokens\&. First token is name of C preprocessor part\&. Second token is resulting C member name\&. If second token is omitted the value (one token) is both preprocessor part and C struct,union\&. .RE .PP unionmap(\fImodule\fR,\fIname\fR,\fImember\fR) .RS 4 Maps member \fImember\fR in CHOICE of \fIname\fR in module \fImodule\fR to value\&. Value consists of to or three tokens\&. The first token is name of the integer in the union that is used as selector for the union itself\&. The second token is name of the union\&. The third token overrides the name of the CHOICE member; if omitted the member name is used\&. .RE .SH "FILES" .PP /usr/share/yaz/z39\&.50/z\&.tcl .PP /usr/share/yaz/z39\&.50/*\&.asn .SH "SEE ALSO" .PP \fByaz\fR(7) .PP Section "The ODR Module" in the YAZ manual\&. yaz-4.2.30/doc/server.vhosts.html0000644000175000017500000002516211741237744013632 000000000000007. GFS Configuration and Virtual Hosts

7. GFS Configuration and Virtual Hosts

The Virtual hosts mechanism allows a YAZ frontend server to support multiple backends. A backend is selected on the basis of the TCP/IP binding (port+listening adddress) and/or the virtual host.

A backend can be configured to execute in a particular working directory. Or the YAZ frontend may perform CQL to RPN conversion, thus allowing traditional Z39.50 backends to be offered as a SRW/SRU service. SRW/SRU Explain information for a particular backend may also be specified.

For the HTTP protocol, the virtual host is specified in the Host header. For the Z39.50 protocol, the virtual host is specified as in the Initialize Request in the OtherInfo, OID 1.2.840.10003.10.1000.81.1.

Note

Not all Z39.50 clients allows the VHOST information to be set. For those the selection of the backend must rely on the TCP/IP information alone (port and address).

The YAZ frontend server uses XML to describe the backend configurations. Command-line option -f specifies filename of the XML configuration.

The configuration uses the root element yazgfs. This element includes a list of listen elements, followed by one or more server elements.

The listen describes listener (transport end point), such as TCP/IP, Unix file socket or SSL server. Content for a listener:

CDATA (required)

The CDATA for the listen element holds the listener string, such as tcp:@:210, tcp:server1:2100, etc.

attribute id (optional)

identifier for this listener. This may be referred to from server sections.

Note

We expect more information to be added for the listen section in a future version, such as CERT file for SSL servers.

The server describes a server and the parameters for this server type. Content for a server:

attribute id (optional)

Identifier for this server. Currently not used for anything, but it might be for logging purposes.

attribute listenref (optional)

Specifies listener for this server. If this attribute is not given, the server is accessible from all listener. In order for the server to be used for real, howeever, the virtual host must match (if specified in the configuration).

element config (optional)

Specifies the server configuration. This is equivalent to the config specified using command line option -c.

element directory (optional)

Specifies a working directory for this backend server. If specifid, the YAZ fronend changes current working directory to this directory whenever a backend of this type is started (backend handler bend_start), stopped (backend handler hand_stop) and initialized (bend_init).

element host (optional)

Specifies the virtual host for this server. If this is specified a client must specify this host string in order to use this backend.

element cql2rpn (optional)

Specifies a filename that includes CQL to RPN conversion for this backend server. See Section 1.3.4, “Specification of CQL to RPN mappings” If given, the backend server will only "see" a Type-1/RPN query.

element ccl2rpn (optional)

Specifies a filename that includes CCL to RPN conversion for this backend server. See Section 1.2.2, “CCL Qualifiers” If given, the backend server will only "see" a Type-1/RPN query.

element stylesheet (optional)

Specifies the stylesheet reference to be part of SRU HTTP responses when the client does not specify one. If neither this is given, nor the client specifies one, no stylesheet reference is part of the SRU HTTP response.

element docpath (optional)

Specifies a path for local file access using HTTP. All URLs with a leading prefix (/ exluded) that matches the value of docpath are used for file access. For example, if the server is to offer access in directory xsl, the docpath would be xsl and all URLs of the form http://host/exl will result in a local file access.

element explain (optional)

Specifies SRW/SRU ZeeRex content for this server. Copied verbatim to the client. As things are now, some of the Explain content seeem redundant because host information, etc. is also stored elsewhere.

element maximumrecordsize (optional)

Specifies maximum record size/message size, in bytes. This value also servers as maximum size of incoming packages (for Record Updates etc). It's the same value as that given by the -k option.

element retrievalinfo (optional)

Enables the retrieval facility supporting conversions and specifications of record formats/types. See Section 6, “Retrieval Facility” for more information.

The XML below configures a server that accepts connections from two ports, TCP/IP port 9900 and a local UNIX file socket. We name the TCP/IP server public and the other server internal.

  
 <yazgfs>
  <listen id="public">tcp:@:9900</listen>
  <listen id="internal">unix:/var/tmp/socket</listen>
  <server id="server1">
    <host>server1.mydomain</host>
    <directory>/var/www/s1</directory>
    <config>config.cfg</config>
  </server>
  <server id="server2">
    <host>server2.mydomain</host>
    <directory>/var/www/s2</directory>
    <config>config.cfg</config>
    <cql2rpn>../etc/pqf.properties</cql2rpn>
    <explain xmlns="http://explain.z3950.org/dtd/2.0/">
      <serverInfo>
        <host>server2.mydomain</host>
        <port>9900</port>
        <database>a</database>
      </serverInfo>
    </explain>
  </server>
  <server id="server3" listenref="internal">
    <directory>/var/www/s3</directory>
    <config>config.cfg</config>
  </server>
 </yazgfs>

 

There are three configured backend servers. The first two servers, "server1" and "server2", can be reached by both listener addresses - since no listenref attribute is specified. In order to distinguish between the two a virtual host has been specified for each of server in the host elements.

For "server2" elements for CQL to RPN conversion is supported and explain information has been added (a short one here to keep the example small).

The third server, "server3" can only be reached via listener "internal".

yaz-4.2.30/doc/yaz-log-man.xml0000644000175000017500000002502411733047144012755 00000000000000 %local; %entities; %idcommon; ]> YAZ &version; Index Data yaz-log 7 Conventions and miscellaneous yaz-log Log handling in all yaz-based programs yaz-XXXX DESCRIPTION All YAZ-based programs use a common log subsystem, and should support common command line options for controlling it. This man page documents those. OPTIONS -l logfile Specify the file where the log is to be written. If none is specified, stderr is used. The log is appended to this file. If the file grows overly large, it is silently rotated: It is renamed to logfile.1, logfile.2, .., 9 (old such file is deleted), and a new file is opened. The limit defaults to 1GB, but can be set by the program. The rotating limit can be specified with option -r for the YAZ frontend server (yaz-ztest). Rotation can also be implicitly enabled by using a filename which gets changed for a given date, due to substitutions as given by the strftime(3) function. -v loglevel Specify the logging level. The argument is a set of log level names, separated by commas (no whitespace!), optionally preceded by a '-' to negate that level. Most programs have their own default, often containing fatal,warn,log, and some application-specific values. The default list can be cleared with the word none, or individual bits can be removed by prefixing them with a dash '-'. LOG LEVELS TO CONTROL LOGGING Some of the log levels control the way the log is written. flush causes the log to be flushed after every write. This can have serious implications to performance, and should not be used in production. On the other hand, when debugging a program crash, this can be extremely useful. The option debug implies flush as well. notime prevents the writing of time stamps. This is intended for automatic test scripts, which should produce predictable log files that are easy to compare. GENERAL LOG LEVELS IN YAZ ITSELF YAZ itself uses the following log levels: fatal for fatal errors, that prevent further execution of the program. warn for warnings about things that should be corrected. debug for debugging. This flag may be used temporarily when developing or debugging yaz, or a program that uses yaz. It is practically deprecated, you should be defining and using your own log levels (see below). all turns on almost all hard-coded log levels. loglevel logs information about the log levels used by the program. Every time the log level is changed, lists all bits that are on. Every time a module asks for its log bits, this is logged. This can be used for getting an idea of what log levels are available in any program that uses yaz-log. Start the program with -v none,loglevel, and do some common operations with it. Another way is to grep for yaz_log_module_level in the source code, as in find . -name '*.[ch]' -print | xargs grep yaz_log_module_level | grep '"' | cut -d'"' -f2 | sort -u eventl, malloc, nmem, odr are used internally for debugging yaz. LOG LEVELS FOR CLIENTS zoom logs the calls to the zoom API, which may be useful in debugging client applications. LOG LEVELS FOR SERVERS server logs the server functions on a high level, starting up, listening on a port, etc. session logs individual sessions (connections). request logs a one-liner for each request (init, search, etc). requestdetail logs the details of every request, before it is passed to the back-end, and the results received from it. Each server program (zebra, etc) is supposed to define its own log levels in addition to these. As they depend on the server in question, they can not be described here. See above how to find out about them. LOGGING EXAMPLES See what log levels yaz-ztest is using: yaz-ztest -1 -v none,loglevel 14:43:29-23/11 [loglevel] Setting log level to 4096 = 0x00001000 14:43:29-23/11 [loglevel] Static log bit 00000001 'fatal' is off 14:43:29-23/11 [loglevel] Static log bit 00000002 'debug' is off 14:43:29-23/11 [loglevel] Static log bit 00000004 'warn' is off 14:43:29-23/11 [loglevel] Static log bit 00000008 'log' is off 14:43:29-23/11 [loglevel] Static log bit 00000080 'malloc' is off 14:43:29-23/11 [loglevel] Static log bit 00000800 'flush' is off 14:43:29-23/11 [loglevel] Static log bit 00001000 'loglevel' is ON 14:43:29-23/11 [loglevel] Static log bit 00002000 'server' is off 14:43:29-23/11 [loglevel] Dynamic log bit 00004000 'session' is off 14:43:29-23/11 [loglevel] Dynamic log bit 00008000 'request' is off 14:44:13-23/11 yaz-ztest [loglevel] returning log bit 0x4000 for 'session' 14:44:13-23/11 yaz-ztest [loglevel] returning log bit 0x2000 for 'server' 14:44:13-23/11 yaz-ztest [loglevel] returning NO log bit for 'eventl' 14:44:20-23/11 yaz-ztest [loglevel] returning log bit 0x4000 for 'session' 14:44:20-23/11 yaz-ztest [loglevel] returning log bit 0x8000 for 'request' 14:44:20-23/11 yaz-ztest [loglevel] returning NO log bit for 'requestdetail' 14:44:20-23/11 yaz-ztest [loglevel] returning NO log bit for 'odr' 14:44:20-23/11 yaz-ztest [loglevel] returning NO log bit for 'ztest' See the details of the requests for yaz-ztest ./yaz-ztest -1 -v requestdetail 14:45:35-23/11 yaz-ztest [server] Adding static Z3950 listener on tcp:@:9999 14:45:35-23/11 yaz-ztest [server] Starting server ./yaz-ztest pid=32200 14:45:38-23/11 yaz-ztest [session] Starting session from tcp:127.0.0.1 (pid=32200) 14:45:38-23/11 yaz-ztest [requestdetail] Got initRequest 14:45:38-23/11 yaz-ztest [requestdetail] Id: 81 14:45:38-23/11 yaz-ztest [requestdetail] Name: YAZ 14:45:38-23/11 yaz-ztest [requestdetail] Version: 2.0.28 14:45:38-23/11 yaz-ztest [requestdetail] Negotiated to v3: srch prst del extendedServices namedresults scan sort 14:45:38-23/11 yaz-ztest [request] Init from 'YAZ' (81) (ver 2.0.28) OK 14:45:39-23/11 yaz-ztest [requestdetail] Got SearchRequest. 14:45:39-23/11 yaz-ztest [requestdetail] ResultSet '1' 14:45:39-23/11 yaz-ztest [requestdetail] Database 'Default' 14:45:39-23/11 yaz-ztest [requestdetail] RPN query. Type: Bib-1 14:45:39-23/11 yaz-ztest [requestdetail] term 'foo' (general) 14:45:39-23/11 yaz-ztest [requestdetail] resultCount: 7 14:45:39-23/11 yaz-ztest [request] Search Z: @attrset Bib-1 foo OK:7 hits 14:45:41-23/11 yaz-ztest [requestdetail] Got PresentRequest. 14:45:41-23/11 yaz-ztest [requestdetail] Request to pack 1+1 1 14:45:41-23/11 yaz-ztest [requestdetail] pms=1048576, mrs=1048576 14:45:41-23/11 yaz-ztest [request] Present: [1] 1+1 OK 1 records returned LOG FILENAME EXAMPLES A file with format my_YYYYMMDD.log is where Y, M, D is year, month, and day digits is given as follows -l my_%Y%m%d.log . And since the filename is depending on day, rotaion will occur on midnight. A weekly log could be specified as -l my_%Y%U.log. FILES prefix/include/yaz/log.h prefix/src/log.c SEE ALSO yaz 7 yaz-ztest 8 yaz-client 1 strftime 3 yaz-4.2.30/doc/server.backendfunctions.html0000644000175000017500000005231111741237744015620 000000000000005. The Backend Functions

5. The Backend Functions

For each service of the protocol, the backend interface declares one or two functions. You are required to provide implementations of the functions representing the services that you wish to implement.

5.1. Init

bend_initresult (*bend_init)(bend_initrequest *r);
    

This handler is called once for each new connection request, after a new process/thread has been created, and an Initialize Request has been received from the client. The pointer to the bend_init handler is passed in the call to statserv_start.

This handler is also called when operating in SRU mode - when a connection has been made (even though SRU does not offer this service).

Unlike previous versions of YAZ, the bend_init also serves as a handler that defines the Z39.50 services that the backend wish to support. Pointers to all service handlers, including search - and fetch must be specified here in this handler.

The request - and result structures are defined as

typedef struct bend_initrequest
{
    /** \brief user/name/password to be read */
    Z_IdAuthentication *auth; 
    /** \brief encoding stream (for results) */
    ODR stream;
    /** \brief printing stream */
    ODR print;
    /** \brief decoding stream (use stream for results) */
    ODR decode; 
    /** \brief reference ID */
    Z_ReferenceId *referenceId;
    /** \brief peer address of client */
    char *peer_name;           
    
    /** \brief character set and language negotiation 

    see include/yaz/z-charneg.h 
    */
    Z_CharSetandLanguageNegotiation *charneg_request;

    /** \brief character negotiation response */
    Z_External *charneg_response;

    /** \brief character set (encoding) for query terms 
        
    This is NULL by default. It should be set to the native character
    set that the backend assumes for query terms */
    char *query_charset;      

    /** \brief whehter query_charset also applies to recors 
    
    Is 0 (No) by default. Set to 1 (yes) if records is in the same
    character set as queries. If in doubt, use 0 (No).
    */
    int records_in_same_charset;

    char *implementation_id;
    char *implementation_name;
    char *implementation_version;

    /** \brief Z39.50 sort handler */
    int (*bend_sort)(void *handle, bend_sort_rr *rr);
    /** \brief SRU/Z39.50 search handler */
    int (*bend_search)(void *handle, bend_search_rr *rr);
    /** \brief SRU/Z39.50 fetch handler */
    int (*bend_fetch)(void *handle, bend_fetch_rr *rr);
    /** \brief SRU/Z39.50 present handler */
    int (*bend_present)(void *handle, bend_present_rr *rr);
    /** \brief Z39.50 extended services handler */
    int (*bend_esrequest) (void *handle, bend_esrequest_rr *rr);
    /** \brief Z39.50 delete result set handler */
    int (*bend_delete)(void *handle, bend_delete_rr *rr);
    /** \brief Z39.50 scan handler */
    int (*bend_scan)(void *handle, bend_scan_rr *rr);
    /** \brief Z39.50 segment facility handler */
    int (*bend_segment)(void *handle, bend_segment_rr *rr);
    /** \brief SRU explain handler */
    int (*bend_explain)(void *handle, bend_explain_rr *rr);
    /** \brief SRU scan handler */
    int (*bend_srw_scan)(void *handle, bend_scan_rr *rr);
    /** \brief SRU record update handler */
    int (*bend_srw_update)(void *handle, bend_update_rr *rr);

    /** \brief whether named result sets are supported (0=disable, 1=enable) */
    int named_result_sets;
} bend_initrequest;

typedef struct bend_initresult
{
    int errcode;               /* 0==OK */
    char *errstring;           /* system error string or NULL */
    void *handle;              /* private handle to the backend module */
} bend_initresult;
    

In general, the server frontend expects that the bend_*result pointer that you return is valid at least until the next call to a bend_* function. This applies to all of the functions described herein. The parameter structure passed to you in the call belongs to the server frontend, and you should not make assumptions about its contents after the current function call has completed. In other words, if you want to retain any of the contents of a request structure, you should copy them.

The errcode should be zero if the initialization of the backend went well. Any other value will be interpreted as an error. The errstring isn't used in the current version, but one option would be to stick it in the initResponse as a VisibleString. The handle is the most important parameter. It should be set to some value that uniquely identifies the current session to the backend implementation. It is used by the frontend server in any future calls to a backend function. The typical use is to set it to point to a dynamically allocated state structure that is private to your backend module.

The auth member holds the authentication information part of the Z39.50 Initialize Request. Interpret this if your serves requires authentication.

The members peer_name, implementation_id, implementation_name and implementation_version holds DNS of client, ID of implementor, name of client (Z39.50) implementation - and version.

The bend_ - members are set to NULL when bend_init is called. Modify the pointers by setting them to point to backend functions.

5.2. Search and Retrieve

We now describe the handlers that are required to support search - and retrieve. You must support two functions - one for search - and one for fetch (retrieval of one record). If desirable you can provide a third handler which is called when a present request is received which allows you to optimize retrieval of multiple-records.

int (*bend_search) (void *handle, bend_search_rr *rr);

typedef struct {
    char *setname;             /* name to give to this set */
    int replace_set;           /* replace set, if it already exists */
    int num_bases;             /* number of databases in list */
    char **basenames;          /* databases to search */
    Z_ReferenceId *referenceId;/* reference ID */
    Z_Query *query;            /* query structure */
    ODR stream;                /* encode stream */
    ODR decode;                /* decode stream */
    ODR print;                 /* print stream */

    bend_request request;
    bend_association association;
    int *fd;
    int hits;                  /* number of hits */
    int errcode;               /* 0==OK */
    char *errstring;           /* system error string or NULL */
    Z_OtherInformation *search_info; /* additional search info */
    char *srw_sortKeys;        /* holds SRU/SRW sortKeys info */
    char *srw_setname;         /* holds SRU/SRW generated resultsetID */
    int *srw_setnameIdleTime;  /* holds SRU/SRW life-time */
    int estimated_hit_count;   /* if hit count is estimated */
    int partial_resultset;     /* if result set is partial */
} bend_search_rr;
    

The bend_search handler is a fairly close approximation of a protocol Z39.50 Search Request - and Response PDUs The setname is the resultSetName from the protocol. You are required to establish a mapping between the set name and whatever your backend database likes to use. Similarly, the replace_set is a boolean value corresponding to the resultSetIndicator field in the protocol. num_bases/basenames is a length of/array of character pointers to the database names provided by the client. The query is the full query structure as defined in the protocol ASN.1 specification. It can be either of the possible query types, and it's up to you to determine if you can handle the provided query type. Rather than reproduce the C interface here, we'll refer you to the structure definitions in the file include/yaz/z-core.h. If you want to look at the attributeSetId OID of the RPN query, you can either match it against your own internal tables, or you can use the OID tools.

The structure contains a number of hits, and an errcode/errstring pair. If an error occurs during the search, or if you're unhappy with the request, you should set the errcode to a value from the BIB-1 diagnostic set. The value will then be returned to the user in a nonsurrogate diagnostic record in the response. The errstring, if provided, will go in the addinfo field. Look at the protocol definition for the defined error codes, and the suggested uses of the addinfo field.

The bend_search handler is also called when the frontend server receives a SRU SearchRetrieveRequest. For SRU, a CQL query is usually provided by the client. The CQL query is available as part of Z_Query structure (note that CQL is now part of Z39.50 via an external). To support CQL in existing implementations that only do Type-1, we refer to the CQL-to-PQF tool described here.

To maintain backwards compatibility, the frontend server of yaz always assume that error codes are BIB-1 diagnostics. For SRU operation, a Bib-1 diagnostic code is mapped to SRU diagnostic.

int (*bend_fetch) (void *handle, bend_fetch_rr *rr);

typedef struct bend_fetch_rr {
    char *setname;             /* set name */
    int number;                /* record number */
    Z_ReferenceId *referenceId;/* reference ID */
    Odr_oid *request_format;        /* format, transfer syntax (OID) */
    Z_RecordComposition *comp; /* Formatting instructions */
    ODR stream;                /* encoding stream - memory source if req */
    ODR print;                 /* printing stream */

    char *basename;            /* name of database that provided record */
    int len;                   /* length of record or -1 if structured */
    char *record;              /* record */
    int last_in_set;           /* is it?  */
    Odr_oid *output_format;        /* response format/syntax (OID) */
    int errcode;               /* 0==success */
    char *errstring;           /* system error string or NULL */
    int surrogate_flag;        /* surrogate diagnostic */
    char *schema;              /* string record schema input/output */
} bend_fetch_rr;
    

The frontend server calls the bend_fetch handler when it needs database records to fulfill a Z39.50 Search Request, a Z39.50 Present Request or a SRU SearchRetrieveRequest. The setname is simply the name of the result set that holds the reference to the desired record. The number is the offset into the set (with 1 being the first record in the set). The format field is the record format requested by the client (See Section 2, “Object Identifiers”). A value of NULL for format indicates that the client did not request a specific format. The stream argument is an ODR stream which should be used for allocating space for structured data records. The stream will be reset when all records have been assembled, and the response package has been transmitted. For unstructured data, the backend is responsible for maintaining a static or dynamic buffer for the record between calls.

If a SRU SearchRetrieveRequest is received by the frontend server, the referenceId is NULL and the format (transfer syntax) is the OID for XML. The schema for SRU is stored in both the Z_RecordComposition structure and schema (simple string).

In the structure, the basename is the name of the database that holds the record. len is the length of the record returned, in bytes, and record is a pointer to the record. last_in_set should be nonzero only if the record returned is the last one in the given result set. errcode and errstring, if given, will be interpreted as a global error pertaining to the set, and will be returned in a non-surrogate-diagnostic. If you wish to return the error as a surrogate-diagnostic (local error) you can do this by setting surrogate_flag to 1 also.

If the len field has the value -1, then record is assumed to point to a constructed data type. The format field will be used to determine which encoder should be used to serialize the data.

Note

If your backend generates structured records, it should use odr_malloc() on the provided stream for allocating data: This allows the frontend server to keep track of the record sizes.

The format field is mapped to an object identifier in the direct reference of the resulting EXTERNAL representation of the record.

Note

The current version of YAZ only supports the direct reference mode.

int (*bend_present) (void *handle, bend_present_rr *rr);

typedef struct {
    char *setname;             /* set name */
    int start;
    int number;                /* record number */
    Odr_oid *format;           /* format, transfer syntax (OID) */
    Z_ReferenceId *referenceId;/* reference ID */
    Z_RecordComposition *comp; /* Formatting instructions */
    ODR stream;                /* encoding stream - memory source if required */
    ODR print;                 /* printing stream */
    bend_request request;
    bend_association association;

    int hits;                  /* number of hits */
    int errcode;               /* 0==OK */
    char *errstring;           /* system error string or NULL */
} bend_present_rr;
    

The bend_present handler is called when the server receives a Z39.50 Present Request. The setname, start and number is the name of the result set - start position - and number of records to be retrieved respectively. format and comp is the preferred transfer syntax and element specifications of the present request.

Note that this is handler serves as a supplement for bend_fetch and need not to be defined in order to support search - and retrieve.

5.3. Delete

For back-ends that supports delete of a result set only one handler must be defined.

int (*bend_delete)(void *handle, bend_delete_rr *rr);

typedef struct bend_delete_rr {
    int function;
    int num_setnames;
    char **setnames;
    Z_ReferenceId *referenceId;
    int delete_status;      /* status for the whole operation */
    int *statuses;          /* status each set - indexed as setnames */
    ODR stream;
    ODR print; 
} bend_delete_rr;
    

Note

The delete set function definition is rather primitive, mostly because we have had no practical need for it as of yet. If someone wants to provide a full delete service, we'd be happy to add the extra parameters that are required. Are there clients out there that will actually delete sets they no longer need?

5.4. Scan

For servers that wish to offer the scan service one handler must be defined.

int (*bend_scan)(void *handle, bend_scan_rr *rr);

typedef enum {
    BEND_SCAN_SUCCESS,  /* ok */
    BEND_SCAN_PARTIAL   /* not all entries could be found */
} bend_scan_status;

typedef struct bend_scan_rr {
    int num_bases;      /* number of elements in databaselist */
    char **basenames;   /* databases to search */
    Odr_oid *attributeset;
    Z_ReferenceId *referenceId; /* reference ID */
    Z_AttributesPlusTerm *term;
    ODR stream;         /* encoding stream - memory source if required */
    ODR print;          /* printing stream */

    int *step_size;     /* step size */
    int term_position;  /* desired index of term in result list/returned */
    int num_entries;    /* number of entries requested/returned */

    /* scan term entries. The called handler does not have
       to allocate this. Size of entries is num_entries (see above) */
    struct scan_entry *entries;
    bend_scan_status status;
    int errcode;
    char *errstring;
    char *scanClause;   /* CQL scan clause */
    char *setname;      /* Scan in result set (NULL if omitted) */
} bend_scan_rr;
    

This backend server handles both Z39.50 scan and SRU scan. In order for a handler to distinguish between SRU (CQL) scan Z39.50 Scan , it must check for a non-NULL value of scanClause.

Note

if designed today, it would be a choice using a union or similar, but that would break binary compatibility with existing servers.

yaz-4.2.30/doc/zoom.options.html0000644000175000017500000000512311741237744013450 000000000000008. Options

8. Options

Most ZOOM objects provide a way to specify options to change behavior. From an implementation point of view a set of options is just like an associative array / hash.

     ZOOM_options ZOOM_options_create(void);

     ZOOM_options ZOOM_options_create_with_parent(ZOOM_options parent);

     void ZOOM_options_destroy(ZOOM_options opt);
   
     const char *ZOOM_options_get(ZOOM_options opt, const char *name);

     void ZOOM_options_set(ZOOM_options opt, const char *name,
                           const char *v);
   
     typedef const char *(*ZOOM_options_callback)
                            (void *handle, const char *name);

     ZOOM_options_callback
             ZOOM_options_set_callback(ZOOM_options opt,
                                       ZOOM_options_callback c,
                                       void *handle);
   
yaz-4.2.30/doc/server.frontend.html0000644000175000017500000000674511741237744014131 000000000000002. The Database Frontend

2. The Database Frontend

We refer to this software as a generic database frontend. Your database system is the backend database, and the interface between the two is called the backend API. The backend API consists of a small number of function handlers and structure definitions. You are required to provide the main() routine for the server (which can be quite simple), as well as a set of handlers to match each of the prototypes. The interface functions that you write can use any mechanism you like to communicate with your database system: You might link the whole thing together with your database application and access it by function calls; you might use IPC to talk to a database server somewhere; or you might link with third-party software that handles the communication for you (like a commercial database client library). At any rate, the handlers will perform the tasks of:

  • Initialization.

  • Searching.

  • Fetching records.

  • Scanning the database index (optional - if you wish to implement SCAN).

  • Extended Services (optional).

  • Result-Set Delete (optional).

  • Result-Set Sort (optional).

  • Return Explain for SRU (optional).

(more functions will be added in time to support as much of Z39.50-1995 as possible).

yaz-4.2.30/doc/server.xml0000644000175000017500000010240411733047144012126 00000000000000 Generic server Introduction If you aren't into documentation, a good way to learn how the back end interface works is to look at the backend.h file. Then, look at the small dummy-server in ztest/ztest.c. The backend.h file also makes a good reference, once you've chewed your way through the prose of this file. If you have a database system that you would like to make available by means of Z39.50 or SRU, &yaz; basically offers your two options. You can use the APIs provided by the &asn;, &odr;, and &comstack; modules to create and decode PDUs, and exchange them with a client. Using this low-level interface gives you access to all fields and options of the protocol, and you can construct your server as close to your existing database as you like. It is also a fairly involved process, requiring you to set up an event-handling mechanism, protocol state machine, etc. To simplify server implementation, we have implemented a compact and simple, but reasonably full-functioned server-frontend that will handle most of the protocol mechanics, while leaving you to concentrate on your database interface. The backend interface was designed in anticipation of a specific integration task, while still attempting to achieve some degree of generality. We realize fully that there are points where the interface can be improved significantly. If you have specific functions or parameters that you think could be useful, send us a mail (or better, sign on to the mailing list referred to in the top-level README file). We will try to fit good suggestions into future releases, to the extent that it can be done without requiring too many structural changes in existing applications. The &yaz; server does not support XCQL. The Database Frontend We refer to this software as a generic database frontend. Your database system is the backend database, and the interface between the two is called the backend API. The backend API consists of a small number of function handlers and structure definitions. You are required to provide the main() routine for the server (which can be quite simple), as well as a set of handlers to match each of the prototypes. The interface functions that you write can use any mechanism you like to communicate with your database system: You might link the whole thing together with your database application and access it by function calls; you might use IPC to talk to a database server somewhere; or you might link with third-party software that handles the communication for you (like a commercial database client library). At any rate, the handlers will perform the tasks of: Initialization. Searching. Fetching records. Scanning the database index (optional - if you wish to implement SCAN). Extended Services (optional). Result-Set Delete (optional). Result-Set Sort (optional). Return Explain for SRU (optional). (more functions will be added in time to support as much of Z39.50-1995 as possible). The Backend API The header file that you need to use the interface are in the include/yaz directory. It's called backend.h. It will include other files from the include/yaz directory, so you'll probably want to use the -I option of your compiler to tell it where to find the files. When you run make in the top-level &yaz; directory, everything you need to create your server is to link with the lib/libyaz.la library. Your main() Routine As mentioned, your main() routine can be quite brief. If you want to initialize global parameters, or read global configuration tables, this is the place to do it. At the end of the routine, you should call the function int statserv_main(int argc, char **argv, bend_initresult *(*bend_init)(bend_initrequest *r), void (*bend_close)(void *handle)); The third and fourth arguments are pointers to handlers. Handler bend_init is called whenever the server receives an Initialize Request, so it serves as a Z39.50 session initializer. The bend_close handler is called when the session is closed. statserv_main will establish listening sockets according to the parameters given. When connection requests are received, the event handler will typically fork() and create a sub-process to handle a new connection. Alternatively the server may be setup to create threads for each connection. If you do use global variables and forking, you should be aware, then, that these cannot be shared between associations, unless you explicitly disable forking by command line parameters. The server provides a mechanism for controlling some of its behavior without using command-line options. The function statserv_options_block *statserv_getcontrol(void); will return a pointer to a struct statserv_options_block describing the current default settings of the server. The structure contains these elements: int dynamic A boolean value, which determines whether the server will fork on each incoming request (TRUE), or not (FALSE). Default is TRUE. This flag is only read by UNIX-based servers (WIN32 based servers doesn't fork). int threads A boolean value, which determines whether the server will create a thread on each incoming request (TRUE), or not (FALSE). Default is FALSE. This flag is only read by UNIX-based servers that offer POSIX Threads support. WIN32-based servers always operate in threaded mode. int inetd A boolean value, which determines whether the server will operates under a UNIX INET daemon (inetd). Default is FALSE. char logfile[ODR_MAXNAME+1] File for diagnostic output ("": stderr). char apdufile[ODR_MAXNAME+1] Name of file for logging incoming and outgoing APDUs ("": don't log APDUs, "-": stderr). char default_listen[1024] Same form as the command-line specification of listener address. "": no default listener address. Default is to listen at "tcp:@:9999". You can only specify one default listener address in this fashion. enum oid_proto default_proto; Either PROTO_Z3950 or PROTO_SR. Default is PROTO_Z39_50. int idle_timeout; Maximum session idle-time, in minutes. Zero indicates no (infinite) timeout. Default is 15 minutes. int maxrecordsize; Maximum permissible record (message) size. Default is 1Mb. This amount of memory will only be allocated if a client requests a very large amount of records in one operation (or a big record). Set it to a lower number if you are worried about resource consumption on your host system. char configname[ODR_MAXNAME+1] Passed to the backend when a new connection is received. char setuid[ODR_MAXNAME+1] Set user id to the user specified, after binding the listener addresses. void (*bend_start)(struct statserv_options_block *p) Pointer to function which is called after the command line options have been parsed - but before the server starts listening. For forked UNIX servers this handler is called in the mother process; for threaded servers this handler is called in the main thread. The default value of this pointer is NULL in which case it isn't invoked by the frontend server. When the server operates as an NT service this handler is called whenever the service is started. void (*bend_stop)(struct statserv_options_block *p) Pointer to function which is called whenever the server has stopped listening for incoming connections. This function pointer has a default value of NULL in which case it isn't called. When the server operates as an NT service this handler is called whenever the service is stopped. void *handle User defined pointer (default value NULL). This is a per-server handle that can be used to specify "user-data". Do not confuse this with the session-handle as returned by bend_init. The pointer returned by statserv_getcontrol points to a static area. You are allowed to change the contents of the structure, but the changes will not take effect before you call void statserv_setcontrol(statserv_options_block *block); that you should generally update this structure before calling statserv_main(). The Backend Functions For each service of the protocol, the backend interface declares one or two functions. You are required to provide implementations of the functions representing the services that you wish to implement. Init bend_initresult (*bend_init)(bend_initrequest *r); This handler is called once for each new connection request, after a new process/thread has been created, and an Initialize Request has been received from the client. The pointer to the bend_init handler is passed in the call to statserv_start. This handler is also called when operating in SRU mode - when a connection has been made (even though SRU does not offer this service). Unlike previous versions of YAZ, the bend_init also serves as a handler that defines the Z39.50 services that the backend wish to support. Pointers to all service handlers, including search - and fetch must be specified here in this handler. The request - and result structures are defined as typedef struct bend_initrequest { /** \brief user/name/password to be read */ Z_IdAuthentication *auth; /** \brief encoding stream (for results) */ ODR stream; /** \brief printing stream */ ODR print; /** \brief decoding stream (use stream for results) */ ODR decode; /** \brief reference ID */ Z_ReferenceId *referenceId; /** \brief peer address of client */ char *peer_name; /** \brief character set and language negotiation see include/yaz/z-charneg.h */ Z_CharSetandLanguageNegotiation *charneg_request; /** \brief character negotiation response */ Z_External *charneg_response; /** \brief character set (encoding) for query terms This is NULL by default. It should be set to the native character set that the backend assumes for query terms */ char *query_charset; /** \brief whehter query_charset also applies to recors Is 0 (No) by default. Set to 1 (yes) if records is in the same character set as queries. If in doubt, use 0 (No). */ int records_in_same_charset; char *implementation_id; char *implementation_name; char *implementation_version; /** \brief Z39.50 sort handler */ int (*bend_sort)(void *handle, bend_sort_rr *rr); /** \brief SRU/Z39.50 search handler */ int (*bend_search)(void *handle, bend_search_rr *rr); /** \brief SRU/Z39.50 fetch handler */ int (*bend_fetch)(void *handle, bend_fetch_rr *rr); /** \brief SRU/Z39.50 present handler */ int (*bend_present)(void *handle, bend_present_rr *rr); /** \brief Z39.50 extended services handler */ int (*bend_esrequest) (void *handle, bend_esrequest_rr *rr); /** \brief Z39.50 delete result set handler */ int (*bend_delete)(void *handle, bend_delete_rr *rr); /** \brief Z39.50 scan handler */ int (*bend_scan)(void *handle, bend_scan_rr *rr); /** \brief Z39.50 segment facility handler */ int (*bend_segment)(void *handle, bend_segment_rr *rr); /** \brief SRU explain handler */ int (*bend_explain)(void *handle, bend_explain_rr *rr); /** \brief SRU scan handler */ int (*bend_srw_scan)(void *handle, bend_scan_rr *rr); /** \brief SRU record update handler */ int (*bend_srw_update)(void *handle, bend_update_rr *rr); /** \brief whether named result sets are supported (0=disable, 1=enable) */ int named_result_sets; } bend_initrequest; typedef struct bend_initresult { int errcode; /* 0==OK */ char *errstring; /* system error string or NULL */ void *handle; /* private handle to the backend module */ } bend_initresult; In general, the server frontend expects that the bend_*result pointer that you return is valid at least until the next call to a bend_* function. This applies to all of the functions described herein. The parameter structure passed to you in the call belongs to the server frontend, and you should not make assumptions about its contents after the current function call has completed. In other words, if you want to retain any of the contents of a request structure, you should copy them. The errcode should be zero if the initialization of the backend went well. Any other value will be interpreted as an error. The errstring isn't used in the current version, but one option would be to stick it in the initResponse as a VisibleString. The handle is the most important parameter. It should be set to some value that uniquely identifies the current session to the backend implementation. It is used by the frontend server in any future calls to a backend function. The typical use is to set it to point to a dynamically allocated state structure that is private to your backend module. The auth member holds the authentication information part of the Z39.50 Initialize Request. Interpret this if your serves requires authentication. The members peer_name, implementation_id, implementation_name and implementation_version holds DNS of client, ID of implementor, name of client (Z39.50) implementation - and version. The bend_ - members are set to NULL when bend_init is called. Modify the pointers by setting them to point to backend functions. Search and Retrieve We now describe the handlers that are required to support search - and retrieve. You must support two functions - one for search - and one for fetch (retrieval of one record). If desirable you can provide a third handler which is called when a present request is received which allows you to optimize retrieval of multiple-records. int (*bend_search) (void *handle, bend_search_rr *rr); typedef struct { char *setname; /* name to give to this set */ int replace_set; /* replace set, if it already exists */ int num_bases; /* number of databases in list */ char **basenames; /* databases to search */ Z_ReferenceId *referenceId;/* reference ID */ Z_Query *query; /* query structure */ ODR stream; /* encode stream */ ODR decode; /* decode stream */ ODR print; /* print stream */ bend_request request; bend_association association; int *fd; int hits; /* number of hits */ int errcode; /* 0==OK */ char *errstring; /* system error string or NULL */ Z_OtherInformation *search_info; /* additional search info */ char *srw_sortKeys; /* holds SRU/SRW sortKeys info */ char *srw_setname; /* holds SRU/SRW generated resultsetID */ int *srw_setnameIdleTime; /* holds SRU/SRW life-time */ int estimated_hit_count; /* if hit count is estimated */ int partial_resultset; /* if result set is partial */ } bend_search_rr; The bend_search handler is a fairly close approximation of a protocol Z39.50 Search Request - and Response PDUs The setname is the resultSetName from the protocol. You are required to establish a mapping between the set name and whatever your backend database likes to use. Similarly, the replace_set is a boolean value corresponding to the resultSetIndicator field in the protocol. num_bases/basenames is a length of/array of character pointers to the database names provided by the client. The query is the full query structure as defined in the protocol ASN.1 specification. It can be either of the possible query types, and it's up to you to determine if you can handle the provided query type. Rather than reproduce the C interface here, we'll refer you to the structure definitions in the file include/yaz/z-core.h. If you want to look at the attributeSetId OID of the RPN query, you can either match it against your own internal tables, or you can use the OID tools. The structure contains a number of hits, and an errcode/errstring pair. If an error occurs during the search, or if you're unhappy with the request, you should set the errcode to a value from the BIB-1 diagnostic set. The value will then be returned to the user in a nonsurrogate diagnostic record in the response. The errstring, if provided, will go in the addinfo field. Look at the protocol definition for the defined error codes, and the suggested uses of the addinfo field. The bend_search handler is also called when the frontend server receives a SRU SearchRetrieveRequest. For SRU, a CQL query is usually provided by the client. The CQL query is available as part of Z_Query structure (note that CQL is now part of Z39.50 via an external). To support CQL in existing implementations that only do Type-1, we refer to the CQL-to-PQF tool described here. To maintain backwards compatibility, the frontend server of yaz always assume that error codes are BIB-1 diagnostics. For SRU operation, a Bib-1 diagnostic code is mapped to SRU diagnostic. int (*bend_fetch) (void *handle, bend_fetch_rr *rr); typedef struct bend_fetch_rr { char *setname; /* set name */ int number; /* record number */ Z_ReferenceId *referenceId;/* reference ID */ Odr_oid *request_format; /* format, transfer syntax (OID) */ Z_RecordComposition *comp; /* Formatting instructions */ ODR stream; /* encoding stream - memory source if req */ ODR print; /* printing stream */ char *basename; /* name of database that provided record */ int len; /* length of record or -1 if structured */ char *record; /* record */ int last_in_set; /* is it? */ Odr_oid *output_format; /* response format/syntax (OID) */ int errcode; /* 0==success */ char *errstring; /* system error string or NULL */ int surrogate_flag; /* surrogate diagnostic */ char *schema; /* string record schema input/output */ } bend_fetch_rr; The frontend server calls the bend_fetch handler when it needs database records to fulfill a Z39.50 Search Request, a Z39.50 Present Request or a SRU SearchRetrieveRequest. The setname is simply the name of the result set that holds the reference to the desired record. The number is the offset into the set (with 1 being the first record in the set). The format field is the record format requested by the client (See ). A value of NULL for format indicates that the client did not request a specific format. The stream argument is an &odr; stream which should be used for allocating space for structured data records. The stream will be reset when all records have been assembled, and the response package has been transmitted. For unstructured data, the backend is responsible for maintaining a static or dynamic buffer for the record between calls. If a SRU SearchRetrieveRequest is received by the frontend server, the referenceId is NULL and the format (transfer syntax) is the OID for XML. The schema for SRU is stored in both the Z_RecordComposition structure and schema (simple string). In the structure, the basename is the name of the database that holds the record. len is the length of the record returned, in bytes, and record is a pointer to the record. last_in_set should be nonzero only if the record returned is the last one in the given result set. errcode and errstring, if given, will be interpreted as a global error pertaining to the set, and will be returned in a non-surrogate-diagnostic. If you wish to return the error as a surrogate-diagnostic (local error) you can do this by setting surrogate_flag to 1 also. If the len field has the value -1, then record is assumed to point to a constructed data type. The format field will be used to determine which encoder should be used to serialize the data. If your backend generates structured records, it should use odr_malloc() on the provided stream for allocating data: This allows the frontend server to keep track of the record sizes. The format field is mapped to an object identifier in the direct reference of the resulting EXTERNAL representation of the record. The current version of &yaz; only supports the direct reference mode. int (*bend_present) (void *handle, bend_present_rr *rr); typedef struct { char *setname; /* set name */ int start; int number; /* record number */ Odr_oid *format; /* format, transfer syntax (OID) */ Z_ReferenceId *referenceId;/* reference ID */ Z_RecordComposition *comp; /* Formatting instructions */ ODR stream; /* encoding stream - memory source if required */ ODR print; /* printing stream */ bend_request request; bend_association association; int hits; /* number of hits */ int errcode; /* 0==OK */ char *errstring; /* system error string or NULL */ } bend_present_rr; The bend_present handler is called when the server receives a Z39.50 Present Request. The setname, start and number is the name of the result set - start position - and number of records to be retrieved respectively. format and comp is the preferred transfer syntax and element specifications of the present request. Note that this is handler serves as a supplement for bend_fetch and need not to be defined in order to support search - and retrieve. Delete For back-ends that supports delete of a result set only one handler must be defined. int (*bend_delete)(void *handle, bend_delete_rr *rr); typedef struct bend_delete_rr { int function; int num_setnames; char **setnames; Z_ReferenceId *referenceId; int delete_status; /* status for the whole operation */ int *statuses; /* status each set - indexed as setnames */ ODR stream; ODR print; } bend_delete_rr; The delete set function definition is rather primitive, mostly because we have had no practical need for it as of yet. If someone wants to provide a full delete service, we'd be happy to add the extra parameters that are required. Are there clients out there that will actually delete sets they no longer need? Scan For servers that wish to offer the scan service one handler must be defined. int (*bend_scan)(void *handle, bend_scan_rr *rr); typedef enum { BEND_SCAN_SUCCESS, /* ok */ BEND_SCAN_PARTIAL /* not all entries could be found */ } bend_scan_status; typedef struct bend_scan_rr { int num_bases; /* number of elements in databaselist */ char **basenames; /* databases to search */ Odr_oid *attributeset; Z_ReferenceId *referenceId; /* reference ID */ Z_AttributesPlusTerm *term; ODR stream; /* encoding stream - memory source if required */ ODR print; /* printing stream */ int *step_size; /* step size */ int term_position; /* desired index of term in result list/returned */ int num_entries; /* number of entries requested/returned */ /* scan term entries. The called handler does not have to allocate this. Size of entries is num_entries (see above) */ struct scan_entry *entries; bend_scan_status status; int errcode; char *errstring; char *scanClause; /* CQL scan clause */ char *setname; /* Scan in result set (NULL if omitted) */ } bend_scan_rr; This backend server handles both Z39.50 scan and SRU scan. In order for a handler to distinguish between SRU (CQL) scan Z39.50 Scan , it must check for a non-NULL value of scanClause. if designed today, it would be a choice using a union or similar, but that would break binary compatibility with existing servers. Application Invocation The finished application has the following invocation syntax (by way of statserv_main()): &gfs-synopsis; The options are: &gfs-options; A listener specification consists of a transport mode followed by a colon (:) followed by a listener address. The transport mode is either tcp, unix: or ssl. For TCP and SSL, an address has the form hostname | IP-number [: portnumber] The port number defaults to 210 (standard Z39.50 port). For UNIX, the address is the filename of socket. For TCP/IP and SSL, the special hostnames @ and @6 are mapped to the addresses INADDR_ANY (IPV4) and IN6ADDR_ANY_INIT (IPV6) respectively. Running the GFS on Unix Assuming the server application appname is started as root, the following will make it listen on port 210. The server will change identity to nobody and write its log to /var/log/app.log. application -l /var/log/app.log -u nobody tcp:@:210 The server will accept Z39.50 requests and offer SRU service on port 210. Setting up Apache as SRU Frontend If you use Apache as your public web server and want to offer HTTP port 80 access to the YAZ server on 210, you can use the ProxyPass directive. If you have virtual host srw.mydomain you can use the following directives in Apache's httpd.conf: <VirtualHost *> ErrorLog /home/srw/logs/error_log TransferLog /home/srw/logs/access_log ProxyPass / http://srw.mydomain:210/ </VirtualHost> The above for the Apache 1.3 series. Running a server with local access only Servers that is only being accessed from the local host should listen on UNIX file socket rather than a Internet socket. To listen on /tmp/mysocket start the server as follows: application unix:/tmp/mysocket GFS Configuration and Virtual Hosts &gfs-virtual; yaz-4.2.30/doc/zoom.events.html0000644000175000017500000000771411741237744013271 000000000000009. Events

9. Events

If you're developing non-blocking applications, you have to deal with events.

    int ZOOM_event(int no, ZOOM_connection *cs);
   

The ZOOM_event executes pending events for a number of connections. Supply the number of connections in no and an array of connections in cs (cs[0] ... cs[no-1]). A pending event could be a sending a search, receiving a response, etc. When an event has occurred for one of the connections, this function returns a positive integer n denoting that an event occurred for connection cs[n-1]. When no events are pending for the connections, a value of zero is returned. To ensure that all outstanding requests are performed call this function repeatedly until zero is returned.

If ZOOM_event returns and returns non-zero, the last event that occurred can be expected.

    int ZOOM_connection_last_event(ZOOM_connection cs);
   

ZOOM_connection_last_event returns an event type (integer) for the last event.

Table 3.10. ZOOM Event IDs

EventDescription
ZOOM_EVENT_NONENo event has occurred
ZOOM_EVENT_CONNECTTCP/IP connect has initiated
ZOOM_EVENT_SEND_DATAData has been transmitted (sending)
ZOOM_EVENT_RECV_DATAData has been received)
ZOOM_EVENT_TIMEOUTTimeout
ZOOM_EVENT_UNKNOWNUnknown event
ZOOM_EVENT_SEND_APDUAn APDU has been transmitted (sending)
ZOOM_EVENT_RECV_APDUAn APDU has been received
ZOOM_EVENT_RECV_RECORDA result-set record has been received
ZOOM_EVENT_RECV_SEARCHA search result been received

yaz-4.2.30/doc/yaz.70000644000175000017500000000737011741237740011001 00000000000000'\" t .\" Title: yaz .\" Author: Index Data .\" Generator: DocBook XSL Stylesheets v1.76.1 .\" Date: 04/11/2012 .\" Manual: Conventions and miscellaneous .\" Source: YAZ 4.2.30 .\" Language: English .\" .TH "YAZ" "7" "04/11/2012" "YAZ 4.2.30" "Conventions and miscellaneous" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" yaz \- Z39\&.50 toolkit\&. .SH "DESCRIPTION" .PP YAZ is a C/C++ programmer\*(Aqs toolkit supporting the development of Z39\&.50v3 clients and servers\&. The YAZ toolkit offers several different levels of access to the ISO23950/Z39\&.50, SRU SOLR (client only) and ILL protocols\&. The level that you need to use depends on your requirements, and the role (server or client) that you want to implement\&. .SH "COPYRIGHT" .PP Copyright \(co 1995\-2012 Index Data\&. .PP All rights reserved\&. .PP Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: .sp .RS 4 .ie n \{\ \h'-04'\(bu\h'+03'\c .\} .el \{\ .sp -1 .IP \(bu 2.3 .\} Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer\&. .RE .sp .RS 4 .ie n \{\ \h'-04'\(bu\h'+03'\c .\} .el \{\ .sp -1 .IP \(bu 2.3 .\} Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution\&. .RE .sp .RS 4 .ie n \{\ \h'-04'\(bu\h'+03'\c .\} .el \{\ .sp -1 .IP \(bu 2.3 .\} Neither the name of Index Data nor the names of its contributors may be used to endorse or promote products derived from this software without specific prior written permission\&. .RE .PP THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS\*(Aq\*(Aq AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED\&. IN NO EVENT SHALL THE REGENTS AND CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE\&. .SH "SEE ALSO" .PP \fByaz-client\fR(1), \fByaz-ztest\fR(8), \fByaz-config\fR(8), \fBzoomsh\fR(1) \fBbib1-attr\fR(7) .PP YAZ manual ( /usr/local/share/doc/yaz) .PP \m[blue]\fBYAZ home page\fR\m[]\&\s-2\u[1]\d\s+2\&. .PP \m[blue]\fBZ39\&.50 Maintenance Agency Page\fR\m[]\&\s-2\u[2]\d\s+2\&. .SH "NOTES" .IP " 1." 4 YAZ home page .RS 4 \%http://www.indexdata.com/yaz .RE .IP " 2." 4 Z39.50 Maintenance Agency Page .RS 4 \%http://www.loc.gov/z3950/agency/ .RE yaz-4.2.30/doc/license.xml0000644000175000017500000000434111733047144012243 00000000000000 License Index Data Copyright Copyright © ©right-year; Index Data. All rights reserved. Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. Neither the name of Index Data nor the names of its contributors may be used to endorse or promote products derived from this software without specific prior written permission. THIS SOFTWARE IS PROVIDED BY INDEX DATA ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL INDEX DATA BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. yaz-4.2.30/doc/yaz-client-man.xml0000644000175000017500000002301311733047144013446 00000000000000 %local; %entities; %idcommon; ]> YAZ &version; Index Data yaz-client 1 Commands yaz-client Z39.50/SRU client for implementors yaz-client server-addr DESCRIPTION yaz-client is a Z39.50/SRU client (origin) with a simple command line interface that allows you to test behavior and performance of Z39.50 targets and SRU servers. From YAZ version 4.1.0 yaz-client may also operate as a SOLR Web Service client. If the server-addr is specified, the client creates a connection to the Z39.50/SRU target at the address given. When yaz-client is started it tries to read commands from one of the following files: Command file if it is given by option -f. .yazclientrc in current working directory. .yazclientrc in the user's home directory. The value of the HOME is used to determine the home directory. Normally, HOME is only set on POSIX systems such as Linux, FreeBSD, Solaris. OPTIONS -a filename If specified, logging of protocol packages will be appended file given. If filename is specified as -, the output is written to stdout. -b filename If specified, YAZ will dump BER data in readable notation to the file specified. If filename is specified as - the output is written to stdout. -c filename If specified, CCL configuration will be read from the file given. -d dump If specified, YAZ will dump BER data for all PDUs sent and received to individual files, named dump.DDD.raw, where DDD is 001, 002, 003, .. -f cmdfile Reads commands from cmdfile. When this option is used, YAZ client does not read .yazclientrc from current directory or home directory. -k size Sets preferred messages and maximum record size for Initialize Request in kilobytes. Default value is 1024 (1 MB). -m filename If specified, retrieved records will be appended to the file given. -p proxy-addr If specified, the client will use the proxy at the address given. YAZ client will connect to a proxy on the address and port given. The actual target will be specified as part of the InitRequest to inform the proxy about actual target. -q filename If specified, CQL configuration will be read from the file given. -t displaycharset If displaycharset is given, it specifies name of the character set of the output (on the terminal on which YAZ client is running). -u auth If specified, the auth string will be used for authentication. -v level Sets the LOG level to level. Level is a sequence of tokens separated by comma. Each token is a integer or a named LOG item - one of fatal, debug, warn, log, malloc, all, none. -V Prints YAZ version. -x Makes the YAZ client print hex dumps of packages sent and received on standard output. COMMANDS The YAZ client accepts the following commands. &yaz-client-commands; EXAMPLE The simplest example of a Prefix Query would be something like f knuth or f "donald knuth" In those queries no attributes was specified. This leaves it up to the server what fields to search but most servers will search in all fields. Some servers does not support this feature though, and require that some attributes are defined. To add one attribute you could do: f @attr 1=4 computer where we search in the title field, since the use(1) is title(4). If we want to search in the author field and in the title field, and in the title field using right truncation it could look something like this: f @and @attr 1=1003 knuth @attr 1=4 @attr 5=1 computer Finally using a mix of Bib-1 and GILS attributes could look something like this: f @attrset Bib-1 @and @attr GILS 1=2008 Washington @attr 1=21 weather FILES yaz-<version>/client/client.c $HOME/.yazclientrc $HOME/.yazclient.history SEE ALSO yaz 7 bib1-attr 7 yaz-4.2.30/doc/zoom.query.html0000644000175000017500000000632211741237744013124 000000000000002. Queries

2. Queries

Query objects represents queries.

     ZOOM_query ZOOM_query_create(void);

     void ZOOM_query_destroy(ZOOM_query q);

     int ZOOM_query_prefix(ZOOM_query q, const char *str);

     int ZOOM_query_cql(ZOOM_query s, const char *str);

     int ZOOM_query_sortby(ZOOM_query q, const char *criteria);
   

Create query objects using ZOOM_query_create and destroy them by calling ZOOM_query_destroy. RPN-queries can be specified in PQF notation by using the function ZOOM_query_prefix. The ZOOM_query_cql specifies a CQL query to be sent to the server/target. More query types will be added in future versions of YAZ, such as CCL to RPN-mapping, native CCL query, etc. In addition to a search, a sort criteria may be set. Function ZOOM_query_sortby specifies a sort criteria using the same string notation for sort as offered by the YAZ client.

2.1. Protocol behavior

The query object is just an interface for the member Query in the SearchRequest. The sortby-function is an interface to the sortSequence member of the SortRequest.

yaz-4.2.30/doc/gfs-virtual.xml0000644000175000017500000002145611654451754013102 00000000000000 The Virtual hosts mechanism allows a YAZ frontend server to support multiple backends. A backend is selected on the basis of the TCP/IP binding (port+listening adddress) and/or the virtual host. A backend can be configured to execute in a particular working directory. Or the YAZ frontend may perform CQL to RPN conversion, thus allowing traditional Z39.50 backends to be offered as a SRW/SRU service. SRW/SRU Explain information for a particular backend may also be specified. For the HTTP protocol, the virtual host is specified in the Host header. For the Z39.50 protocol, the virtual host is specified as in the Initialize Request in the OtherInfo, OID 1.2.840.10003.10.1000.81.1. Not all Z39.50 clients allows the VHOST information to be set. For those the selection of the backend must rely on the TCP/IP information alone (port and address). The YAZ frontend server uses XML to describe the backend configurations. Command-line option -f specifies filename of the XML configuration. The configuration uses the root element yazgfs. This element includes a list of listen elements, followed by one or more server elements. The listen describes listener (transport end point), such as TCP/IP, Unix file socket or SSL server. Content for a listener: CDATA (required) The CDATA for the listen element holds the listener string, such as tcp:@:210, tcp:server1:2100, etc. attribute id (optional) identifier for this listener. This may be referred to from server sections. We expect more information to be added for the listen section in a future version, such as CERT file for SSL servers. The server describes a server and the parameters for this server type. Content for a server: attribute id (optional) Identifier for this server. Currently not used for anything, but it might be for logging purposes. attribute listenref (optional) Specifies listener for this server. If this attribute is not given, the server is accessible from all listener. In order for the server to be used for real, howeever, the virtual host must match (if specified in the configuration). element config (optional) Specifies the server configuration. This is equivalent to the config specified using command line option -c. element directory (optional) Specifies a working directory for this backend server. If specifid, the YAZ fronend changes current working directory to this directory whenever a backend of this type is started (backend handler bend_start), stopped (backend handler hand_stop) and initialized (bend_init). element host (optional) Specifies the virtual host for this server. If this is specified a client must specify this host string in order to use this backend. element cql2rpn (optional) Specifies a filename that includes CQL to RPN conversion for this backend server. See &reference-tools-cql-map; If given, the backend server will only "see" a Type-1/RPN query. element ccl2rpn (optional) Specifies a filename that includes CCL to RPN conversion for this backend server. See &reference-tools-ccl-qualifiers; If given, the backend server will only "see" a Type-1/RPN query. element stylesheet (optional) Specifies the stylesheet reference to be part of SRU HTTP responses when the client does not specify one. If neither this is given, nor the client specifies one, no stylesheet reference is part of the SRU HTTP response. element docpath (optional) Specifies a path for local file access using HTTP. All URLs with a leading prefix (/ exluded) that matches the value of docpath are used for file access. For example, if the server is to offer access in directory xsl, the docpath would be xsl and all URLs of the form http://host/exl will result in a local file access. element explain (optional) Specifies SRW/SRU ZeeRex content for this server. Copied verbatim to the client. As things are now, some of the Explain content seeem redundant because host information, etc. is also stored elsewhere. element maximumrecordsize (optional) Specifies maximum record size/message size, in bytes. This value also servers as maximum size of incoming packages (for Record Updates etc). It's the same value as that given by the -k option. element retrievalinfo (optional) Enables the retrieval facility supporting conversions and specifications of record formats/types. See for more information. The XML below configures a server that accepts connections from two ports, TCP/IP port 9900 and a local UNIX file socket. We name the TCP/IP server public and the other server internal. tcp:@:9900 unix:/var/tmp/socket server1.mydomain /var/www/s1 config.cfg server2.mydomain /var/www/s2 config.cfg ../etc/pqf.properties server2.mydomain 9900 a /var/www/s3 config.cfg ]]> There are three configured backend servers. The first two servers, "server1" and "server2", can be reached by both listener addresses - since no listenref attribute is specified. In order to distinguish between the two a virtual host has been specified for each of server in the host elements. For "server2" elements for CQL to RPN conversion is supported and explain information has been added (a short one here to keep the example small). The third server, "server3" can only be reached via listener "internal". yaz-4.2.30/doc/server.html0000644000175000017500000001224511741237744012303 00000000000000Chapter 4. Generic server

Chapter 4. Generic server

1. Introduction

If you aren't into documentation, a good way to learn how the back end interface works is to look at the backend.h file. Then, look at the small dummy-server in ztest/ztest.c. The backend.h file also makes a good reference, once you've chewed your way through the prose of this file.

If you have a database system that you would like to make available by means of Z39.50 or SRU, YAZ basically offers your two options. You can use the APIs provided by the Z39.50 ASN.1, ODR, and COMSTACK modules to create and decode PDUs, and exchange them with a client. Using this low-level interface gives you access to all fields and options of the protocol, and you can construct your server as close to your existing database as you like. It is also a fairly involved process, requiring you to set up an event-handling mechanism, protocol state machine, etc. To simplify server implementation, we have implemented a compact and simple, but reasonably full-functioned server-frontend that will handle most of the protocol mechanics, while leaving you to concentrate on your database interface.

Note

The backend interface was designed in anticipation of a specific integration task, while still attempting to achieve some degree of generality. We realize fully that there are points where the interface can be improved significantly. If you have specific functions or parameters that you think could be useful, send us a mail (or better, sign on to the mailing list referred to in the top-level README file). We will try to fit good suggestions into future releases, to the extent that it can be done without requiring too many structural changes in existing applications.

Note

The YAZ server does not support XCQL.

yaz-4.2.30/doc/yaz-asncomp.html0000644000175000017500000002463411741237744013243 00000000000000yaz-asncomp

Name

yaz-asncomp — YAZ ASN.1 compiler

Synopsis

yaz-asncomp [-v] [-c cfile] [-h hfile] [-p pfile] [-d config] [-I includeout] [-i includedir] [-m module] [filename]

DESCRIPTION

yaz-asncomp is an ASN.1 compiler that reads an ASN.1 specification in filename and produces C/C++ definitions and BER encoders/decoders for it.

The produced C/C++ code and header files uses the ODR module of YAZ which is a library that encodes/decodes/prints BER packages. yaz-asncomp allows you to specify name of resulting source via options. Alternatively, you can specify a DEFINISIONS file, which provides customized output to many output files - if the ASN.1 specification file consists of many modules.

This utility is written in Tcl. Any version of Tcl should work.

OPTIONS

-v

Makes the ASN.1 compiler print more verbose about the various stages of operations.

-c cfile

Specifies the name of the C/C++ file with encoders/decoders.

-h hfile

Specifies the name of header file with definitions.

-p pfile

Specifies the name of the a private header file with definitions. By default all definitions are put in header file (option -h).

-d dfile

Specifies the name of a definitions file.

-I iout

Specifies first part of directory in which header files are written.

-i idir

Specifies second part of directory in which header files are written.

-m module

Specifies that ASN.1 compiler should only process the module given. If this option is not specified, all modules in the ASN.1 file are processed.

DEFINITIONS FILE

The definitions file is really a Tcl script but follows traditional rules for Shell like configuration files. That is # denotes the beginning of a comment. Definitions are line oriented. The definitions files usually consists of a series of variable assignments of the form:

set name value

Available variables are:

default-prefix

Sets prefix for names in the produced output. The value consists of three tokens: C function prefix, C typedef prefix and preprocessor prefix respectively.

prefix(module)

This value sets prefix values for module module. The value has same form as default-prefix.

filename(module)

Specifies filename for C/header file for module module.

init(module,h)

Code fragment to be put in first part of public header for module module.

body(module,h)

Code fragment to be put in last part of public header for module module (trailer).

init(module,c)

Code fragment to be put in first part of C based encoder/decoder for module module.

body(module,c)

Code fragment to be put in last part of C based encoder/decoder for module module (trailer).

map(module,name)

Maps ASN.1 type in module module of name to value.

membermap(module,name,member)

Maps member member in SEQUENCE/CHOICE of name in module module to value. The value consists of one or two tokens. First token is name of C preprocessor part. Second token is resulting C member name. If second token is omitted the value (one token) is both preprocessor part and C struct,union.

unionmap(module,name,member)

Maps member member in CHOICE of name in module module to value. Value consists of to or three tokens. The first token is name of the integer in the union that is used as selector for the union itself. The second token is name of the union. The third token overrides the name of the CHOICE member; if omitted the member name is used.

FILES

/usr/share/yaz/z39.50/z.tcl

/usr/share/yaz/z39.50/*.asn

SEE ALSO

yaz(7)

Section "The ODR Module" in the YAZ manual.

yaz-4.2.30/doc/common/0000755000175000017500000000000011741237744011453 500000000000000yaz-4.2.30/doc/common/id.tkl.xsl0000644000175000017500000000260711654451761013315 00000000000000 1 .tkl 0 <xsl:apply-templates select="." mode="object.title.markup"/> 1 yaz-4.2.30/doc/common/Makefile.am0000644000175000017500000000044611654451761013433 00000000000000commondir=$(datadir)/doc/$(PACKAGE)$(PACKAGE_SUFFIX)/common common_DATA = style1.css id.png SUPPORTFILES = \ xml.dcl \ common.ent \ id.eps \ ref2dbinc.xsl \ stripref.xsl \ print.dsl.in \ id.htmlhelp.xsl \ id.man.xsl \ id.tkl.xsl EXTRA_DIST = $(SUPPORTFILES) $(common_DATA) README yaz-4.2.30/doc/common/id.man.xsl0000644000175000017500000000031311654451761013266 00000000000000 yaz-4.2.30/doc/common/style1.css0000644000175000017500000000152011733047146013320 00000000000000 .table table { border-collapse: collapse; border: 1px solid black; border-spacing: 0; width: 94%; margin-left: auto; margin-right: 0; } .author { font-style: italic; } .TITLEPAGE, .LOT, .TOC { font-family: sans-serif; } .TITLEPAGE .abstract { margin: 0 150px 1em 0; font-style: oblique; } .TITLEPAGE .inlinemediaobject { position: absolute; top: 60px; right: 0; width: 140px; } .table th { padding: 3px 6px; border: 1px solid black; } .table td { text-align: left; padding: 3px 6px; } h1, h3, h4 { font-family: sans-serif; } h2 { font-style: italic; font-family: sans-serif; } .figure b, .table b, .example b { font-style: italic; } .example , .figure { margin-left: 3%; } .screen, .synopsis, .programlisting { margin-left: 6%; padding: 4px; border-style: solid; border-width: 1px; border-color: #bbbbbb; } yaz-4.2.30/doc/common/stripref.xsl0000644000175000017500000000047211654451761013764 00000000000000 Generated by stripref.xsl . Do not edit yaz-4.2.30/doc/common/ref2dbinc.xsl0000644000175000017500000000141111654451761013756 00000000000000 Generated by stripref.xsl . Do not edit
<xsl:value-of select="refmeta/refentrytitle"/>
yaz-4.2.30/doc/common/xml.dcl0000644000175000017500000001522111654451761012660 00000000000000" PIC "?>" SHORTREF NONE NAMES SGMLREF QUANTITY NONE ENTITIES "amp" 38 "lt" 60 "gt" 62 "quot" 34 "apos" 39 FEATURES MINIMIZE DATATAG NO OMITTAG NO RANK NO SHORTTAG STARTTAG EMPTY NO UNCLOSED NO NETENABL IMMEDNET ENDTAG EMPTY NO UNCLOSED NO ATTRIB DEFAULT YES OMITNAME NO VALUE NO EMPTYNRM YES IMPLYDEF ATTLIST NO DOCTYPE NO ELEMENT NO ENTITY NO NOTATION NO LINK SIMPLE NO IMPLICIT NO EXPLICIT NO OTHER CONCUR NO SUBDOC NO FORMAL NO URN NO KEEPRSRE YES VALIDITY TYPE ENTITIES REF ANY INTEGRAL YES APPINFO NONE SEEALSO "ISO 8879:1986//NOTATION Extensible Markup Language (XML) 1.0//EN" > yaz-4.2.30/doc/common/id.htmlhelp.xsl0000644000175000017500000000124611654451761014336 00000000000000 0 1 1 3 3 1 yaz-4.2.30/doc/common/id.png0000644000175000017500000006147311654451761012510 00000000000000‰PNG  IHDRxð+´sRGB®Îé pHYsgŸÒRtIMEÙ±Þ— IDATxÚì½i°l[RöeæZ{ïª:ÓÞ½ož»ûu7tÓØÉ2 a…ÀÈÈÈV ÛüÃ’-ý1G¶C¿›PØa›  ‡$!,‹ Œ›¦^7Ý@Oožî}÷Ý{Ï=S {¯µ2Ó?Ö®sê¯qóóùUœ¨S§Î®ª]¹ÖÊÌõ}_æ&wÇÿç›#+ÅÎj xîEüÄ÷O~÷SÏéÊÒ@ƇÀ+¹h¿½Ó¹ößý=ßþ_þWß1™!F ÊJЛk ¾5~ áw£¯ÓÐèW2 “Ÿú_¾ú·þöy±ó—½uý*c0¦jèè`' s7 †´¿5Ù¯ÞjÛægþÁßûÞï},´ ¤€žw!Ÿz×У¡³bò‹ÿÇ õ¯þ- h!-©¾žÑÑÁ§/ ‰-ëQÓuaµÚoÚü ¿ð?÷_|î‘{‚¹¼c Í_ÿñq1ÇOþ÷ÿãöì"Ðu[(tLMà.p¤ ƒ4A"‡È!25"1ëââùG'íÎju²3»$<ýß~æçníC˜¡(†¼ ü§6ôñqŸ>ûìÁ#@ýw¿3¿;£ÿ„¹¶Ô]ïï|ûŒöÍ)웯w~wFoZ•¿Ö¿ª­ý4²…õ|ç»bææx8Þ †o·NmGgœ^ÏeÀ힉[ {v–h¬§w }›•iÃ-ÐúÉu¾Qÿ;Zá¶1©íN—Cëqr¼ƒo_Ÿ¡É«e Pr#¸8œ °o ÀÝœŒÜn_Êã`¶f@Aïd[ýÁÇÐZ hà#ì&@Cè€\ ði™‚8Ôá˜Z!Ϥ…B07‚ÅÆŒû]CêH)1¼d¬šš·›±Uƒ(P@Êq¢+K ÙÝ>çf†ùÖ´mš¢XBÁÝgÁ;5›þú íÄnæ š†s·í( ep6NNƒÑ`<€2À^ÐÆs 9:¹¦X6¼5_§4lmmÙ)ÐAìöÎ …Š`Ø÷xôÉ=n\².Ë!Ð`PÀaYÍüÌ0ru"ä´C^2šé}ð¾ïo|6i/]¼Ð4PŠ… wsâw7,€v‰øÎïùæ¡\L °:wqv°ƒÄ êm Sa  ËãåóÕ¾3ôþ»þ܃qÁf5Z AÞõÑg·Ù ÿéßü÷?t_hàæÁÍ€ òŠÕœA aìœËÂl^ü á2ëZÇ<—ƒ‡<÷Ã?ü׺ Üဈpè]Picg²XâÏþ™'~ögzÖÉlº½µ½‡²„&h)´¸«{ ÈÀóç™ižì­¦]8®}è#ÿʯþ܇¾i‚9ˆÀLx'¹fÆ_9»F©~úï?û‡ôÜÍý[ïÃä äx;óƒÃ·vwwc "ýÞ¿ôÝßû}Ï8 '‹²»¸3Ãaêè]C0©½‡9àëMÆ){M ?Êüv¤ƒÖG2Õ?ílmùí›ùÿŸgkÓdñm†€(Du³Ñ§›ôÛ¸ -½£Y¬?•¡Þ®ç5þ¼‰ZÜfJ!¯ðs5ä)Ëå·ÛœÖÏ󻆾ÃU3PÖÞo(h ݹÀ‚1tÃÊw ›·wðìþú Mëí5$ 8uʣʀÇp@xC±Áw‚ãýæ0¼3mý§˜ÑÕ åN?Ko“ zMÜgÁŽÏLy ¥ž-‘w]Ns M€ Øm{9Â:wf§H§x¿‡{ä‰wŒÇ;ÝM CßËcà° 6ƒñš§Ñ©½FN– à ÷}^Dϯ'µAÒ6ÇÂ^S ôµiÊOƒ4ï¨*Eɧ/Òõ‡óøF¬Fé♤n_÷ºf¿C¬8 i1 \ B€šéÛá³ïF¨©ßñn·²´<Ð:*úY®í0»B”ŒÐÀ‰r‹; F#Òzúu.;6â@ì•o'7ÃìŒéqWí0ȫà €¢¹1z˜˜ÀÙ ê`d‚,€8œ×¼‘ãõ9ªÁ t¾¦þïih¡”Ä¡•@N©s€\˜œœêãñtǹ\…d8•T/QMOº¶•Ôñ†»‘ PæXG+ĺ*\] Quët‘ÇLqƒóÒfcJY¡,­§3Bkf’G- Ø+ƒIÄ@€(Œu@Rß?–õ”©ìÄYxqAV6&f˜©®‰JVóö{rO¨babÜ ­gG0#Ü>_˜Áw8Ô;×õøwñ1òzªÙè”È™‰@›y.¤‘|Ð:ÜkcÂX7E§câ€mø‡SÓЩò»Îø4<(ãŽ-.Öþ…YÓú›!Î㌦²Nwã½¾´ÈZ¢XO#ek"ÿ‰ÐÒ™Iýk·¹¯æ»"€ŽÙ‹ŠÁ ´wù9¾#Ô ÷Ú‚å̾¶áOÏ| [Gm6Ô2>£° ¯ÍâÆÇÕcÒ†ë§ÃÆ(@Ïh7޼W0$Y¬Ðµ÷#f0ÃÛ¦ v½ ì´^°›{ÅÑÐr8Á«‚РÀ3zƒæp9œ!§‹ïš^¾ahŒöl i#Š®Ï×hã_õµuðx#Eõ—„ʯ-[)[;ÁÊ:AtNG?ãà{ú'~âWŸýýϹ3œ‰H$º“™‘WÏ\œŒŽ@ÖeP9=+'Àeý5mýÍÎõ$ *5’W²TJvî>þo}èáox É2sRÊf94M.0;¼ ùí»Fe&ëH×ÁGPˆ¯%O•i·oM0'(Nb @Jp²×)"†àF•ÆÈ<~®={²Ý¸¼º(|þsoý³_yV 3S%fæ %3Z£ÂÈFÊ0Cd› $PÕ16£1?­§ <ÌÀ@Èábd`Es‚Kýò¡ö#Oɪ—3 ©_ˆ…,1Ln¼öîgªÂ,ÕúŽÂ‚S£àÆXFC›Â2ÃàF¶^a À` eq%ed°ÄYÍŠÀÈ‚#*‚û¸þª¿ªy­£UPê(v´e<™zÀÛd¼£©!žÅØÚ»!Ä-+ì ^1 €±G`ˆ€Â30TçOÎÕ ëÐWç{]I‘<0"P Ü×a]Aáç¶[üV™{c¡…‹/µ¯Su!lú(Ó»‹‘²÷ÊhŠã°NJ¬H)ìÊvšà‘3;ŒÆ7 ÊÀ}`Ä¡„!ÀÉZµ` 5€ì¥ñž€¶€,£eƒb‹AŽz&b÷ΤƒºC‚R1Ãk eÇd–l–‰Xœ‹BD¸yŒï^׳¸ûe@"vew$ _ÞÄÝb쬞瓞섆lê—ÇÐH}ò·~ÛÇ¿ÿ¾#§“_þÅ_ûÌ'¯8„Ð: (ƒð0 8RñØ“ýÈò׺Žoüæoüîoýúo϶wÿÒ÷ýÅ?óíÿêW^øéÿ饹9!›ÁrÐ!hš¸·&±ÐÍÖc{÷íðtu2o§“›áÖ›7Žû¸Ý…fÚ«¦`€,Ä\ŒŒœƒ4‘ÎñÎùÉìéG#œŒ´Àê¹kÏïÌsô'.RÜÜCãa—\sÔ Wyüþ§ãs_øò¯ïðv×MÓý»ç÷yü­Å­«ýQD”ÅÆd‰„ÅЖêO°Ö±‹æƒ—»zõêÕ”&¾Ç†%Œq¬ÞûÙÄÜ[>óþ§ÿÆ´¾ð…/~ú“/5³U€4ò)0Mƒ™Wyé—~îŸÜXôd‚!ƒ î¤EJ‰¦*´ç?Äïx¾½œaöÄŧö/~eÿ…—o¼iÙÃ,ªYaÀM‚•*U(N…B”K{—Â#K† „Ð…­ C1‡Iˆ­»©ZKaÖÌ–É Ø%4¼õ$·Gí·¯¿b»Ûó7>ò4creØ‚dLnbìµèÌXªgÈ.,Qd&Ó§ñdß.¯·$¸‰ÛXV›÷.ð‰båÙÙ@0"Ã]‘0 ƒ¼êB©¨u+‚±¥”a ,» ´ 6ø¶oýÀG?òÄoÿ?Ÿ™NÕ „E E- &`q ˜ee_ ¶ÜΦ¿ü⯠Ë~ø‘‡žÚ~êñ ï;ârcu´$/ÄIL+Øâ,n¢±€^sIÅè->yáކy’Ôwùļ;)^4i %0ÑÀ‰T°5›ÍSþÒ•—{h÷™Ù^Ø>Þß¿ñ¾ïA\úíùçß¼u.ÎTG` î„}]™S'¤:(›»oaM¬8„Åüžt>¿Ö^‹ÁˆAŒ(ÙWÇë€ÇÌá%Ú7”O>.?ôüåV iAˆˆÂh Ubl"H,Ã@|a›Ø;ü•+/¿0¼ö¶·Ê0ˆ»¸‰Ì̩(›²5QˆÀ¢_-ûÕ¼_õšÏÉsï9£xqòBÂ@JÁéxµøÒÍ×nâäãßû¡ ?=yèåáÕ—Þx­ÛΗ‹cÍÌÉŒàä^Q¬ HZ4‚Õ´2DŒQøî{‚t ¬f‡„DÐâè‹.8 ià¾p¬b“×uàQó¦£Y@£)›‚ Ïþþ§ø¿üÏ<ñÌÉ~/†€vµ€c’ ÆYhî…J­ÚÈe~ý-?Âù¨\?x“‘/‡½-ø´¤YIÓ’§%OJn-·šÅó"$̇€rÝ{î»ü±ÇŸúØcO¼ÿâ¥û$JßsêYœ[h£¹)Ú˜†,ÁrÜiÞ;7}G¿{ü‡Ï`ï;/¾7aþå+ÏaJ“VmEœ•“rrNÆÉi|`œ!…¢ æè… (ƒmtªwýðXÞCv;âbÄÊ0³’3RÀÂLdU¥OÈZöˆs”•ºFoRòþ/~ý÷?ûâÖ~ìÇþóÝ-q9Ú&¶1*z0AZ≹ 9gM 3'C8wá¼™‘ÃÃÄ4CGnäFîâÆnÁ-ØøÃ̱ ÌpOtßîKN.D'6ml„x†>/!à ‹Å‚Ó¦2_ö‹“åÜ‘fh®] !0ó­ýýsۻêg¸“+»±™òX}Sòs"MLpv5MÁï"ç «0ÁÝÝAÑÕàpg3$w‰m‹Ršbd†•À:Á”0c´F}Á‰H›áÜuÈF_yîÊÏþܯ*áûÿÊ'ž~¦°ä°Zæk-+€g™J; ``ÛͲg3=J{“Ý“9Ê aY’H¡PZ1 6  3'.d×qý‹¯é7¿úÉϼüù×÷÷ 5fðÖ ØÐ…¨Ãà ³f' ¦•ˆ¨?„É'îïüE}ó½»ÏÜ7ݳy¾´{yukµ-31"˜”` œ@p‰.‘ÛÅ0í¢€§Ô‘É™_Ýøa–î(b¢8¤Ò·±ëÚY°š£kv»¸•´b'3x†eXB2,€>ëwVhĶþå¯}êù¯”Ðàñ'àN)÷­„b+,!MäVРXN'¹,³&¦wÐH¯»ÍìáËø¦ÝR✉¹0)±;± Ç>•!gn±üdX-†!eu«¾Ý„Ð5M˱_ö«!u;[«œæóùSx ~æä>ûÆó·püäÅ'Îmïï4±Uu÷¨gT¯i–yR)…b4p&·âV§±òöÖœPhM®IKrÏny£æ’ú¡ŽHIªÙÚÐjÐK  L$…¥Æˆ|Ö5R€„aÊç^üÊ«¿úK¿‘ØÛÛs iÎkn ˜Î`î® â\œ[’+réW“¶Úö¡Ë—éîÑ¿õÖ["âe¡0’`YÐÌ&`¯c_à`âJ8ñB7 ªñšÜݵ¢¶m{öJa<úè£ïíž¾†·^¾yõÊbÿK‡/u˜>óÐû¶§³0íW¿+Sfw'ò¦¦ì@o/† MÓHìŒ[¶€ˆ`."}^dÃÔ!}I v!îÉK|ay² `¹@û"îÿþÞÏß÷ÿ…'߇Հ“c´ínÖ#…! n0°zPBH!âø£|LG)ˆ*ìÕþµkû×e§³†o£ÍœŒó~Œgm#[Ø}Ï…gôí+¸º\–ż7‡"µRO54Ñ£/Ó*v“KÍòçÞø£^”¶ÛWn\i÷¦»¸¼}~÷Æþ5jV›‰ŒÂ×q¾:À"‘Aoá`ÐÄÊo‹Í‡”I‹C]Ý׈«SFkH¿òþæ«WßДþð Ï4„© µÇD0„­…Ë´¹0O·>ùé/ýÐôÓªþ©O~Þå¡×oÿ‡?üß>ôèÞª`q¢7n,M‹8È,€ƒÔX3奧7ß*ÄÇœú’”²Z,—˹lµ³½­ƒaÉ6TNF Á7 ƒJ²WŽß¸ÙÜ´âTÈ»¸ìÅrE·Ýˆ8†\4õe6Ý‚€½†«WN^Yت˜NÚ.‹}õÚ+“ûOöûãe^mµÓ;Êj020Š„èðãÅñ+xm¹Z([6ópo['[#ç4Ò9V«ªh®\ßý_ürÌB{¾(¡¤‘UàÊ䨉M èŠù?ýÇÿšT “Ø\üO1<›sQ„I(€ Œl À•ÈÁ^Hýp9_Þ¼:Le>,Z â”–‹B3›œ ‹Z>.>òTlˆ%$æàä7Nn*¢4Ì\ȇc[Y ]ôyð’c$Ì,yH^TKRò«G×ÓÁâòÎNe¾Zì̶ŽòòÕ×ãÎd2iSî­÷ßkñÛœš 9€UY^=( +B};ÅDHX‚V¤‚êA,-ჱ#0œa¹ØÅ1mF(žÊèÍ XÔâÍQÙVGY·BØV/ cPKÎ! (™‘¹š¨]èÕ^JKDI$t,¢ä‹~»¶Æ%ÄHÁ wOšX ’+‰yg+$!ÎLDª9ÄVš )¹šw¦°;9Ñ~gÒYòžri©(B@CayÒS”‘‘[#ãNîav7¥OYˆ\äkô >¶¯FáF¸q ˜EÌ,ª­`Ù˜š@Óbš‘”+¼ÒÚ ú›¥\–>å­¤i˜ß’­KšVÈvO³©’W戃)u¡É% CADD$Nœ”œ¨ˆ“³ÇVJ?”’"KÖ""¡mœÎªÆk8"‚8†œ„yÊÈÁªÅ¡‹¦CJ}ÝÈ5MÃD}Ÿ<˜gÕ­í•–å°Úšn÷'‹cÓÉv7ï{‰¼µ=],—ƒ{Ó6nzÊÃݦd.9Qlµì'ÓÛɭ·üíÇÿ÷€©%iK&QÝ™¸€ ;& €T$^$™·òlÇ.ýƒŸø¥ÏýÃÏAΧR±‘=;a‹€Xb J©Š/wƒ÷%E„œ—p'g/®Ô6æœ#I°âCj@¼¦ŒÍ´ ù”oÓõ$¯,¢r”lª®# (0‚{&f&TC—Rˆƒ2ëd‘ršˆxß·QŒ°@â–ÍM–ýŒ8”6H“Ê”úºîFDVJ²wûFñ]†¾&Ï]ko0E’®08Dƒ*2q9›,L^˜²`pWxÛЮiZÄ› h"HÁ.ÈUÛ±F°6eÑVaZr!¯Uù¬4VdUšj3—:}`§”Ç„µÀé´¸Üïd”k¡ØZlL0B´Qåëieƒ¡öka%K›Ü?;2¯u-ÝwÝÎ4:þyoC Å“‘[va¨ÁƒSœ)Âj×?c@Ù]äTL,Á àFTšÌi€góÂÀ”¼nô®t&]¯ º ¬™„‘ýVÚ`Ó7V®Ü“k¯Úœµ­yãe|ª#Yÿ§þ%kÖ‘…Íâp@ ¶~Ÿõb ÊÎì¸Þs³Sšøm}´ eÌ%š ±E‰¨¦)@,N WKÌØë¶§NßZü 3+ZÄAk-V¥œn×S;Ó=h€èš·>5­÷ !£S+ûm\øéýÚÜ·Á’§d¸2UN1ø:Õª(seÄ‹œ}¨ÝKÐâ#T;ÿ¨½Ñ{,‚M‘cÇ¥#xt²à`°Âën2ÂZXK(ŒØZ76b±€BTY AjÞ†fýå8;»£Š¦NÕ½f¾FÄÁëDÂ0åõú¥MʊשUe:6㺌èt®Í=ÎD´.Æ8U˜È‚D\&öJŒ‘#9œQ˜*ËF¾Vx¬O #Þì`G­p·{ª/ïœÑÚŠFƒV""%cR7Ø•Ac>鯿¢€ƒ‰¥î&!(ŠÇu£5¦Ú¬êÒnçýÈA0v9¡¨fÊwöMÙОÊn›¹›‚¿«QUBc\æÌtF¨ãv_ïóQ©÷vï¶yþ§Ç3ùÛ²‡hª2ÈÆÏa'ÐYPeÄ0#Í …—DÉP\$$F!!¹6ux£IØÐY‰Än·Ù¨ñE!Pt‚”}œ}õÛ­9ÿê%«Ç¨TKTðF²Û#/ÆÖ|*—b‡2avD3qDß¼¢ô9ÊØ´ÌO]Æéú0Å ´n!¿ÛKÝ!Û…»×Ö•Npsªj´èdp'ÏÁÐ$(àÁ+ª SdõÕ-k¥ZõX¼Eæ0r¸‡µ¯ÿ NpΠ,>o·³õ|áÓv5 8Ö3ÚFì4æºäg…äÊJ£*•¬ú2€ÝŒ@Ž"€›Ä=ؘ„ؽ8¨Í9«<¶å 6ŒÂ(q>] d 6¿k‘± Yà„¤¸I AU‰:÷)hË¢¨õ1wœSœ¬Â–SŒƒ[P0˜AÑÑ®Ð%t ›ŽŠP+±Ç*cÑP„2TC3…+B n‹‹JÏ’ƒÉÉ$‹à}Ë=SH‘¨º:)qý©VG«ˆÆÒvK³ÂÞkj(úà$—à²rIl½PæàFž]¬Ù‚f±hÖªE³AƒØ îbÜ’ˆ65 ” ­"¤<éš¹”ë'ÄMV2y)%P„‘“°zöˆ½j–%¨Q©È+¶¹±")3/RðF ì&õëŽôy¨̸5ú„›¬Ú&9‹,†I¶ ¿xùá²:hºm“-r'ccr!F ’ÉBF4‰& ‘q}ldÅkÿž†U›Ö¸³ØPìâÄsA2¬UÊÈj9LDBhê¬g·ZÊêdˆq^ RÈ“•¤Ù´"žTLì,Ïѵd‰Sí¹gÛžl§“UK1PH}ªd“#Àà®f¡Æß*qû·¶&3™ö‹Cn95ÁÔ.Ѭ-qe‹Ìy£öÆÜNÚ!ÍË©9S¦eB²:>^lµÓù°¼ùÖkÍì¾Ü¯`yTéùZÜíND­Ñ–uS¶&RYÙ`ÅÐ2™+i"ùÆÆ$v{ØVÅõýÃvk2 H‹a›ÚFx&È­€¡kq«-†ÖúX‰ Ô©lw;ûÃb¡\sTwµµòÞ×WWÓÉ@s'u ì#„³âƒªYus0yJÞA.†ß½þ…iØBû?à“á•£—, IDATWÁàwˆùLÓÌŸyÿCÿñX㇕0,Ð4€c9ÿ·ÿÑ?ü­¿ûwòdÙ›AÍórd‹ÑÖJwsB=ƒÇ ùN° —’i¯©Vbܵ‰1S%å~ Ì]¼øÒsztüäå‡>€÷yû…+ó›Ùµnw$6­—Í:;2°;Âåvï)ÌÈÙÝKP÷Žì EÕ%’)bÁüqÜÿêÖ•ý7¯t±á”/6{ló¿ÿÌ?û®ïøáæ}Ï<Á G†+HÇò„µ0°nnA)D=Ë‚mÉVºv§IªnÆ*@±ŽQ,íÔÛöN¾rðÜþ¯=òßöžoÙÁÞï½öÇ/ͯ­hÛ˜LÕÃf¬JÒŽ¯ÞºvýðÍGèþ§»'ÿàÊç:`º-%ÌW)£ Ì·ë ‘3œ‘5‚XYBDä®`ÒµÖ¿.ú Ü*åc‚ß\_ö¿içf™ÛÂS´€i.D5$øÈŸùZ]ƒ‡±.ïÀ·–ó—ñÚǦœ¹ ‰ö6 ‰ˆŒ“Žé¥$C‰RJóùŽ®ëš¦<ç ©§1v aff®§åð¦;´}ç·±ÍÌ"b÷¨¨wƒ¥”cιë:U=°)¥@¬ª)%!jÛ–™K)ªo{‚Bë¨÷}of1F5K‚̈†F!ëŽ`†û†þà¹/­°úÀÓïÅP×s®çÆÌ1F3 RÓ;re8;ªÈÄêÓøåן?ÿÈî3ïyzž—“öœ×]çi5÷Gm7mšF­"8)a nÒ~øCp|´º~ã&S¬Ç¤YoïBàW^ûì+|+ô«=ñ²r3™æ~AÎcJ‹šŒÀ;»SOf'ÃÃ?ùhûÄþòè8®¾ù‰¿qãxÑïSôÐ…¡_r;‰F¾m¨È6e7Q#ž(HpÖ”]¹¨êVÐÀfXWò2sBYŠë,-ôƒ H»7 i5äv‚UòìÇ÷]Šøð?õ¿þÔåËpÇW¾zå«_yykk ôi,›÷ÖW?õâï¤Ü÷¾Ë´Y†ʪo¨é…œá›…S&î@Yq^"±Á’ Aꮚ2ÃmAWÆò‹$( ¤°!ê"æ/¾ùÂ!–÷?ö@[w‘Âê&bfîî„À6â,Z)/¸±Õ ¤–öûã°_¸öÒÞóGðÄx]ÙØ¡µÖj$' z@c˜–ýÍÿìGð¯ühÛàÂÅ•×ñßü×?©ÎÇ'‡Mœ%ê¨z£Z­6ø4ÚÞ…YÃÝjê^LYB±tJ²8ay¹¤óÝì›/ô2.?{ô×í9=»øÜ‡gyâòƒÃõåæBŒu"f.nêÆÎa3U]t&[D=A*LÞ`znzpóèÅþsÝà ~Z`z†xÖ²Þé´,ª“’&ì^À¤Eßã—á•ÿ±ÿbÙ{-zLy!»3õkÞBÔT¿¡„¹8¹ûñK8Æê«xéÕ¯ŸÆÙ¤C?k¬ú÷vÒM±µÃ篿Öî´ñK×^¸øÔ¥-éöövGsg5ײ»µ7¤ÅFE¡óØÍËFßÄÑÔÑúb®ˆkrG NfÌJeˆlŽpšíf²×¾zôÖ¸¹Ù‰/IØL‰"ƒ‘ÂiH+ˆ0SùW×~¯ 4”Õñ±ºçço¾ößjf[ް.â»-2•åaú+¿ò[_øüúÖdg²êspõý~>yv.Ì^Ĺês@lã·rÊlÿòÆïte¿ä&ri©DÛ[»K/®ùÔ¡C Giõ¹ùVËÔ‡ìçiÙNå3×>îüîA´,)ve(­ÌNfäõzÁ(o¼5¿h«c¯Åö@ààfmí5 c‰/`Ê\Ø®^_ÙïÝ@^ Kk²Pþµ¯þß=pùRq38T•Ü& $«ãBAcžØD‡ «ÕâÅó{;D¦“Æœ¯Ý:œˆG8¡J9ÆË%(Èh2ñAo‹?¾Q2nŽ0A)m{.¢› Ü„¶›¿)çîW?˜Ø7.tüå~¿mBAi,¶¥I–0˜Qš9AÖÕ–8¶K·ç篗¡\?L©…†œW©_!ŒÕ†ëÚiƒo '7Râ g§ CTÆ"º¢Ö‚Q+Ìâ~ìmØšµê.l/Þºuuq«'ƒŒ¸Fm=%"E5€¨ïŒõ7' [Ý<õ±COúå¤Û:wéüáÁbä0ªvÇx9È;/Õæ¸)Wª¨Åø£x§ê&wС§…ÚãÑHZ9Ÿª$èöÀ»n44žÁ™Îâô8òÊ`õ"•s£mK:@ækÙͺl}ÝÎh-%P"1°¡Ëu;ÆpB’‘g¯ŽÁ°æïÚyÞÙp¤2c£‚b\°Ææð57F%Â=úüœ¶ªDøØÆGj> `Fím%8éúÁë$y%Y6¹×5aXçãiòsJæn63¹­èÌad#›N&ë‹ôÜñBÚàúhCµc>J“·Iú+W™dœGööý>CáZsFM™ÃÈxÌš]!^‹uéí¥ÖõªAÕËŒm$ ¯ßºqŒjS/!‚qOÅk7õñH6{í#åvÚGȹÊVlÔk8sfª +ß!:X3Ògàªøiƒ­Ñ¼§öº cZÛ½&6QI×ìx’Ѳ…aã)„,È@f0 E»çŒö*êJm2ìp‡¸ÛÚãÒ8‡ìîºÄ·AÕ±„â°^ŸÍ»mÔf:îëMv-îe÷Ó6oä›=YÈ*|çg»MKÕ&`}­4³…S^ÝGmmVñÛZãTF¿Jd`¨Ø¿VÐÈ ÑѽÔï¤|ç•iî4ô4cša‚¢ 3!)¢£%(Û'ÿ“:ÿ¬/TŸTð0¨ŽmxéTy±ÖÙX £JHªT@Ê>6¦²õ|dØ ÓiŒ­w6£ xÏmmÄê‘õ6Í8¨ì·Iù´v1€ñ¦bäTÂŽ˜)Ľ¼2©,ÌÛ´e,sÕù¬†>„&±¦3& €UÇçªêîfV 3kˆ”"e6fR’ád9›ÍB Á³;†e‘ŒÀ¹ýÚm§r´þÍŒŠ5Þôý-B?è¢SŠ1÷²²å„÷V©’sF7ƒ/¬$-·6éZfh¶\òD¶-3±oM&ðCÓ4âºq[]ç´)ï,Å„xÖti1,'¤mbñ³¶g§i;’û!5MÓ¶lÚ˜•Žc¯Î!ó%é2µ»Ñ˜=€¬ÜÖŠ`Äì˜5Sv.É‚pŸMÝÈ&a¯TQE¢E¤®¹°­´Lž)Ö(쑨µpŽgñ„W'±a{ZL©¨‘ÓmÅg%¸ÝÎ}ýñõ T²€ÓlÒ-W7<çØÜ¿#[«@ ¢Ãx…¶%ˆ™Ã$÷žsÖ‚N&¤ê)u³N‡Dª³¶+jê™}뤺Z`1ãYב„ì5ÈZ¹¾@ €íéäx¹š÷ƒ7–i‚V’¥Rš­ÜQž5m³3[¦U¡ä͆ýÔ³Gå¶·NiµXJÛ bhc AVei̵ܳª‚* îŸÃ–8ixΜ˜ÆÛ%|ÏÃßü(.øé9\éÖÕÒa>YøpWdeýñ!bCy¸xßö‹¯ý<''h:„y…ç>oÿó} ²âÍt+EÇâjÎÞÐv Ú&>òàÄ3/¦Ïíï;ÙÉj~þÁGoŸz¯]=ººÌ«2?ÝF«£ë&>OË“ùNœ~üòǾðú…F1]è:L‹ÃyœtMŒpÞ[ßúà7=€ '˜ÿ«7þ Òîlû‘K—£ËÏÞøBï«”{ DîU÷_­Ü(¶Þ7½ü¯ï}Ãm@8F>ÀÉ o¾ôÜ /54«hDL•ç¯õÌ#LIŽè MáF¹…LÑ,pôêÁ‹7Wo݇Ýãü'>qù›ÁÅO¯0;VüUö»yhÖ\n{‹ް\aH`2+fiyˆå ¦mÁÝ-—~ÑÞ:xsÿÚU¼ñ¡æ™óÖ¬®t%<ÖÞß‚‹ãÕ|U C§{Ô­ÃÕ"B4ÙÆd“bLÎt[Àæ(q •FýñÈÛˆ—pþÒÖyQ¢^gÔ>€ rpŽÒT%6bb\Û‘Åä{˜ 8~yÿ…«G¯î`òÑ>øû³-‰™•Rª‰+£""áÊ.]ï½¶•dyTb šÿ·²7µ,»Îû¾µÖÞg¸÷¾±Æ®žçæÐÔ$E‘VhG¢&;4dYŽÉ14À`eÁ‘(q,8‘dv"ØŽ-;r€0¶$ÃN+‰)Š¢„ÑTìf³«YÝ]óðÆ;aï½VþØç¾÷ªYEÈ…F£Ð¨®÷Þ¾çì½×Zß÷ûÞm¯½~íbp]?öÀƒ=ùÑGžýÝÝ—ñõWÚ<£aZöûEñ 8DÅßÿ{¿òá`:5.ÎÇùxÚ(PPQ[ßñ¤ÔtÖš- óñº¯j ñöõ;í g>óÜÙÇiO=tî¶¾Ò¼5ß›z'É,ÝG~£xTV© sÌz„’½ZŠÙ„b'[#p ¾í:ÑíÉæ¸Ä(£~¡On>:].g»ûÖW›´ª¢®*Ä q(޲tzáh ~içêå+W[¦óæç6NŸ-ίmmÏ–·û¾ÏÇ`>ðhØJ BnRXN|:·~3-ß¼z%¢}Ü?$w5ò 8Ѻ.*·µ˜MIÀŒ²BÛÌSìv÷vövï(¼¯¬ŸÕD÷÷‚ˆˆ—û®_¨¦„~ÙÌ߸óÚþñ<þ‡ê³s,®\» 8]Qî œ 'Z!N@±OH´Žõ1F±wucVéJHFEY\h—(¢D5Åô¥w^:sç7ÏŒ”7¨¨@#)U5f¼Áªu''.é\ø%â;»ÖlUoܺxûà¶«íq1r&82hBJɦ¥1„{h"Kï(ÂÆÐ3\õl;ºt§G˹^;¸þͧDÄ‘‹JŸŒhiÔ‚&ˆ1ÁÕ•eáô÷ý©ïùžïüîd%’|ñÿºüÃ?öõ©­×·šé"p>D3ª¤XKmTsL~ìòáÞùÚóÛO]ÇÎk—_Y ™&c%zÑÊÌ’ "6uâ´·Ò•‚W§ºb´£{G"(É¥E;*Ç úkw–Sgï|lôüaw±8l'•ëgKÞs¬)N¬ \'K4˜!ts{1m«²\«oÞ¾s7ÏáìÛÍ¥‘«LѦP”EÓ…²®¸ÈâuµÕNŒ 5àº@ò-†Ô™Z¤vLïÍp¢¢|€1»Aˆ“Qí}9™H쳟’ }3½SÖ0Á9céBÛu®šùu]è‰í§÷0u¨Æã13×ãœä³ˆWË# ‰%]¤Ž™H"(œ÷ù²a|2¹<¿}Ú„I  ±¢•¿µsg‰ùóϼ¯3´¬<;ic0°‚óÍVwJQ”$}«!ê…6G£ $r:Hn5Tá Æj`•¡ìåhð€"Á¬êh”ô”+KÃÓ“­²?¬msŸšPÐGùÙŸùùÿê¯þmȤ’3…žQŒêz³éS»Œ)%Pß{q¡÷]šðöûÞ÷±€ôû7ß|ìüOžztgq{o>·1÷ÐÄ(ÓÐ#Ž<ÈØ˜Yƒ*‰ =zu©S¦û)ª,*1ÐÅ®C ­…°8¼væÖû6Ù^m‘zM!%¹¨FPQäö ‹‘S.•+ÐzòûMwö·Š-”W°É’æ% £ $ö ‰F«4ÒÜNÐÈ|tïpÔ§ÇÏ_Ø^;½ƒƒDv$•¯×`øz\`”ÈP8:{执žüÀSO>ûð£­m¬3¹¦Y‚ˆ¨ÆÊì˜`˜QQT§OŸ~TùƒƒWß<¸új{ñ ¶äa!‹)e›K(Òqy€bVF¤<ô༷޳;, b!EÒ” µœZJïÞººDØZ?­ ¡ mQJHÄ—èˆÈlÚhHÔ–oõL½öGŸ:‹­½~/¤d«7@u˜l¸QÐB5-D좥F#ßÝÜþðO@ _mc{ŠðÚλ‘7”õ¸?­š)b¨c|ÿ÷}÷w}×w÷a\¾¨?öcÿáµÝƒØ4 Ú%Ä9Ô¤ãÐÖDÞarîÔù§ÜsïâÖ¥+ó‘¾~û³l¬’.†;˽ËéÚåÉÊ•7C]žÃ$f²£dS Ê gâQÍ“ÑYœz£Kñí;{‘DˆÉŒ’¦ÜrÆ”ò¸‚R:ŠïâÎRøú,ê€t7nïí¿µsN•Y±NDw;­PÔ2.ªÑ믃%…FÄC9G‡‹¶ ± T­UxU3cr޽©–X¾~íµÞ÷mì•[¯?wîÉ ¥NbD‡  jaa¤i» ©×dwW’|¬A³%UCê)ÞÁAƒ8ÓV N°¯Ý¾R?P8p/Z:¿Ð»Zu–ï-DѲ]Ƕ=9áîàðöüê¥+oOÇAK¢”ç fY]ææšA`g³`ÖŠýî­×G(c ç¢m[¾8µÖ Š€”2È4“„¼.S×_|÷«ÿö÷ÿhÛÍ&1I›šª\“0Ù9°6®OÏÛ; ,ÅF¤ôUc1z0?|Í]íIÀ²*öfÓo½º¶±.D^._S°!rö˜"Ì M—g×C‘ß³+ÂÌS‚“Ò»{×ʲ\j/®h¯[¾|ý<·–ôÈžK 0G\ïw®¼ØåÆdiº···Áe¹]v©£Â…ÔŒ™Á`b5sS'y2FN-P[ŠWºöÔÆæ<$ Ý„ËT"HŒf&z/’?Á4u3Ÿg/_¾nH…”!ExYLgW‚JÑÏ÷÷ÈÕ—(KµBˆ®gâ8i{ë`¶¹yaÿöþödk1ŸŽ6Æ{‡ûýöf ,F?Q^F&8,)6¤Ê²×ìõL²UvY» Ê;/}좩ffYŒ.Â&DpAI$8$‹¼Qî IÄó2$fô2ìfFȞδé‹©‚EU»>M”S ‚YAL …€d¦<Ð'5Se©&K,ùj´šb³ÒÐԞ穱µ²ê…òçÛ Áѱ‰ÌYšß¦ â0û¼ÊGÆÛ“u>X(„À€”NÉ%8qóØø’:Õ!Ï`S¶ãÉMÖ­'Fc‰ Œ$è9õ ª –bäÄAŒ4™Â@ ç²,²eg€ê”EeC”#õÝ5-4~¯;×2]xe_Íü@GqöGR`3¤0(Qd˜eXdãÈN‘ÇèJGþU‚)ƒ3áp„Á¨p2fÌ@ Íl¿MœíкòP jµ ¥D9)Æ¢XŽ>€”܉ï9¿v£H£@ÊÄ.CLÀ§ÃèI'È+°ãXêŒ:¥tŒŠT俢3(¬ð@–1è ÑÞ0„U"P„¥fÃÔnÅÓÈ’ ÊR•ÈÃÈ# Np‚Às"²E³–ãÄ¢ŸlH '«©>ŽFœ Ðñã!ºÒÄÐ1ƒ²ƒE4Q¿CA÷Nq’µì'„yôk'@ùèu:¨Õì=_`ã¤\‘V:s†9­²Mâ×…‰¨‘T¢‰1e/ ]ñJ"ÑýFà¶ÜËÊ÷%½ïÓŽ#çìîÆ”Ò]¨‚̶«™øXr¥dœcâV?«Ë™ –Å Ø=¹Æ.2'b6e5¦¬%Kdi%ÉB£*dA4f#ûÑàÙ˜à Ð,R1øã™iÎÊ‚c¨Ú‘ÄéDLððžª!È)à (ù4(²"CWy|bNyì8¼‹¢|bß8Îz/y‚ÌøÄMÕ)Ó,2å¡+3ÈŒA”ùzÔA#¬®G) |Ý`¥…5AG+1W¾¦ë@â:Yæ¯uú^G6ñRZŽ>UÎ ={/ƒö.ñJ¦–ˆux„”9^)ñ :ùJæ'ÿY6MÕNÓýbí¾.ÄãÈVä ¶#¯=ñÝ* … <fKDDÆF‰LyH­¸¯#1¡èøá"F Å dÑ8$BpF¦‰õn@/+eI9ŸØ¢âjC'„‘ìXLföæ ÕnIèGÂÊY%d3Í÷h5ÄwS¦îÖ|½æä$À¼ÚŒ‡×b%š5€GÇÏÊE:í$â,\Ê)ÛyNÖ;mܰó)•îÚ£Oìcjeͱ I…V²  èÌ‘‚4DÍó#¨’îÍ­~¦¸zƆ$ö´r¦ã[Gþ{LpÌT2î<9é!Ã>“‚za>Àé*óGñn e$ÿ·á[%gɺåØ0ß­i"ã!>Ó‘Èò¡žØVŠÕ¼ÖƒÛE¡ Ö¼•åg )'F¤¼{Ùý$sœ_ Q” “>­uVF#Cï©)dæ©"ñb ¤…8QQ/êÈÉŽ‚Z ªá X* $ï¥d7Œ IDATE™3P4] ÀŠBáa%«g-r{Ìœö¤|BAPÏÁ´‡çÀ‰‹deR†%†!ÿ„A*§Öšhôè…1 u×ý™7ò`§‘cô`‹)?nÚöÎdäkRòRXjeoDdì¹K ”÷F*ˆ…¦ÂB™’ÓÔ§(u™’‰/#C q],ºÄj–_l£UV’'‚Š©S:àêc²hJÎû¢EM)µmK'XBlyÔLq)ãµñf´ÎbðÐïµ0©Ï&d „Éöy´ýÉ”N‚RîГvÙ9Ï•çÂk ùàUb€%§B¬6%ӮªžPé£F탋ñä«À¬Œdjy㋚qá¼”U0L—ÍbÞôMï]YTu2íº.Æ^a]è‡!úPdjþ‘5ö!4m×…”¬¿UOî7«wG7Íœœ“ùRdVùBƒR€!$"~<Ö¶K#SUõÐ:‚y–š™(Çãõår™Òª\k»4o¥Ce}ïÆ§æû‹QO=¨7à¼ÿt™±àÀÒEÒÄ%3÷É„N§»:ìL\,--=DÜöÒqχÖG‡ˆ^¬˜)%"ï k{íR+ÚyQæ1•ë“ éS›ºÐ/4Šz}<6BŠIwÿÄÙ;Î<‹7Ú¨×G®`ë“¥¾oS³Gæž´Ýe MCÅU$.(±3Òˆ>%J]š·‹r½2ò,Köµ„–hUÒÂÁ‹ëâ} ¡ífeµÑµ‡õ£{Í>IKpQœ>Ûã:VÇãqµf,"¬ìC4O&NØkLN†þF:îã)‹xôT›km'±.}EÞzuòz1ÕD¥0“cR3#´]'DäD˜¤6ö}ë|4b*Ö•cÓx°?CèE„‹RI wíDIZµ¦ñ½‡æäJa-ØQ£1ò=áU¤zº5Ô`("Wm:[­}Í«•­ö7mw¦¡e™r€ãp°1k¶˜ž=?yò©³ä—7níÞ±ƒé\q볟ý£aêCzâ÷^}%r… ýí[(Í8©GìºÚºˆ÷J4tùjlDÃD#Q éŸ~ì±§ð8ÚC/áê\tÚîæÏH•Ã…·^€¢mÛ¿ûwÿ³j ]ÀÿÐ_þýß»ø=ßûÇþößüÇ„ÏþÒï½ü¢p™Ü©³׎.X–/0êA¤)8r?{Í_yyzÕæÄIŠ£tìÆ¤\ª¼ýñ åWñ΋/µ]Ú¬ª÷Ÿ~TœÛYÞYéŒXL(È4Ï’¼]Vªsaî¶7P2æ{åé+˜·ÀY·6‚[ï%0E…0#%¨¡ë@ìªZzZëå *Azãæ;Óƒ .œœùøäùÉ•—/5067·CÛ€4£4ó?œåw£\ÙÀ®-ÞýÚ|§ñ)-RïS&1ݲœ±.dXNg| —ÚÐ7ݲí—mWzŸ¥J&ê†ÐOñ´éþù/ÿÚ~÷RøSúü­¿óŸ?ð`þÑ/üoWÞy§k;ò('Çr€üQåE'-Š¢]´„¦ïÚ E•e±Jôni³ª²q@œãÐ#=0Þ^›lΗmjAÑ+•Ü)®Ê^Ų›DhàM0(‚À0gÔ]3þ‰ÿ«žqþ<¾ïÏ|ª*ñÎÛÍOÿµŸY¶©®Ï©ið;P^‚à%¨‹±UµÀ$YY–I5¥ÄÌ‘˜Þ ‡u®€ó ÄÃØ_Ù½ýLýl¿ìÖë ŠBQÏ]Òª(BÛÅ’RÅ–´O!Hu¹°ÚÑU ³Óã¿6»|“s\oMÖà bË ÅÄà#¯sU4Ñ¡;-õi+N©?Ç㺠,ôu}¥\_žè/®T—!E‡j[Ï>óþozæãO?ôÜÆÖ¶ñI–:ÑÀ]9q\ˆÇõöWß|ûŸüâo\WÂÏýÜßdv Ú5-€¨=DŽ›n©€† ™'Òöxc¼Ÿ«#hšÏç5ªhúîîí}4/<ðAÌ:h£)˜šÙ^Qó,”"¼÷ŽàkI—ž4öžnïî0âC[gšåR)²ÈNø5!ƶ f|þOèãO|ò±óOnŸ>u?c‹ñʪ8:"£sh+™B¯böêþÕ×ìúEì\ÓeSKbe€Ì­>’l›ˆÝ|O“–(w›Ý÷?ý¾Ï}î3M“éøþ?ý½Û‘+ÅÙd} háW›9 ¦ÌFvDD¹ÀÉ T–eÊ÷{ú÷ cNÛöFš¿…âüc£í20çya–T‚– ’´o»6ô}êµïâ®"qF•ó%¸`1¤®oº®•‘¦Wë½ Ž‹nìg 7íÖK³w^Á•¯è­=éï»GŸè±ádÄjb$Ðý;·¯~åk/]}÷àp/¥¸2‰0!7¹m˜ç» fÐŒHþ›¿ñ×67qãjóê+×`øìgßÿ#?òçË’bjæÓË£r‚ùš¹¼ÌçW¤(ŠºmSHËʦH‰ŽJ'ûp±,=Ð¥ÒȽsps·>öè󈪈Î9‰šRJ>Z öľôn\ø²ðà R¤ U›Ê¦ï÷.œ= ¸vêK¿XÌNÚdŽÝËЙÁMÛååë×.^þÚå«ïN§Óû)¸9ðq GNáT-ôïï%ÚN|6ÊZ—¼œ®Õ„%ÛŒKDÕ0Tügþìw|òÓ§Aø¥öÿÄÿô| þƒÿGϜݥ¬—Ý~yêìêq®†zÇ*µ2‡@E êEÁ$ÄófiLùÜ?2EYp—}—XX9NBûíü­;_[Çd}´€’jß«já|vоïÍ1 —X%™Gtè'MÜ\Ä­þÐÃO<\=xûoMo™ÓÂKb$0¯p ŸP\4ESE;SŽÎr}*ºQoî~mÒ¬ÄQ:ÂÁƒ9ï}D¬Q=ýÔ“$¬À®Mßݹv`‡šù‡–7VÂÜx}{1ßSÌþëŸùsëë¸t ¿ô?ÿú;ïÜü_ÿå~ðÏ~ò©§ðWþò_ùsñÇIÄIÝíÝÁÚ±Éj5Ü‚QŠ®ô=ûÊ/Sc¬Ü8©á$5û(Äjä‚Yãµ²Ùkµ ÛÓýKgn<‰Ç#š¬«f_¹ÐõMLªe»@g­¸ZÇú‡Ÿy__z™;Ø}éàµ4PTEµì{¥¼¯*­žhœ÷…wŠxzm›ÖÆbB?µæË·ßºÖ˜ßÓÉÕJc¬mÈi¿ÀrA½óŒ8ôè@kJh ðbzÉOêçþäÅ‹!½Õ¾ø¥×^þòþúOÿüž}!Íüdtê…~úÅ?øý¢ÚŠTí [¦Ê9"_^ÆõÝù¡÷>„EYVÐ!˜óä‰mÙ±\HgüÜ M6ïd.ñ‹7ßÔók7±×Š9çM£šÍœ&ÂzY³1bÏUÑJq³ ÌÇåÆªëØo½=»>³êÌFè‡Ó}©k»Ç¬@gÍb]ê)–§°¹…É!f‚‘Ý?‡…þ‹þó7îÜŽÎRI]êEÄ%r‘Š^(h%år¹$’&ãMç»(Jꪰuªì—þúÿñÕ_|——ä"¨a‡´(Ê¢ïPû‡bŒÁn3é¸.Öæ}n}$”K\˜}î§þÄÃß9>,n°£l„v& )ZÞŠk‹nÙN;ÝÞ©SgöçRŒ  bXÎ닱Õ,6)Òr-EI¶ˆ•• BSšú5 ]oÞ/œe‰e#†^­*JŠÀa{¦+êˆfÙ8}©ÝåÍŠ5ílcT¥”(+÷WwZݵ<7qma%I*ÝA»Ø˜Œ§Ý"­Qdýúësªb1Øh5,Q#Ó¬À!u:’üÈ÷ÖH$ aí¢°9o¨"÷DqL(ɨ7ƒ÷mC wAI?‰¹} ö` r6&Behc"õ$Á© §…›¥BS keÝ-æeÁi•I2é `¶¸&N,̪9i, ×[oFÑ3RŠä¼ÂItÉb#Bª8rìÙÔO´¯ú¨°mÙცô‘ƒ™JŽ©Éúë•䎇˜òï*ZÔ%R«Ç`-ÆÆÝË·íV&ÿãìœË8ЋFF}9òÎÐÁG»~v?ÆQšá#²^Õ ”g*Çå\¨̧œœ7ïÌ'væle‡EÖ šÈ”3xäxÞ¨^qvóÜÊ)ÚKbîaŽcM¦‰ôhò«9ÞD=çÂ}Ŧ‰té}²=i’]‘ýèëÝ~YLÒñÑ„ÚiÎ9¾_jÅ`Î\´ÕbކX&–‡ÊG¶tI°û‚‰I\åPy‘Qš%ËJZ fØ´0XP`”]oð~K.T_ê‚*ˆˆY1ƲÀ'¤m•Äd'½Þ:$,O™MÈ@èP•¡Ñ¦C¥bIr8‹2›D%d©ù‰í5w÷Né¬ÊzJ°ÁëŠÃ3ÈqDÌ «õ úÑvŸŒ§!—c{¨‚S4˜ !ôÜÃS¸¿•”!ÝPé©ÅèE;AJ¯€RôŸE‡~c¤4H¦¤°H%¯3”[1z\ÁĈÁ<ä5ÉMF"Rã0èE±Dʇ•üC‰³:ÔÀ'Âr@CV‚“£Øœ—0Eø˜äF‰†µ>®¨ï|8 $±x¼ƒè ÓpS$!Â|9 U‹µp±1¸[}a0NÐDspFá­4VÀõ(ã ;½qUôÜuqé]𥷸ÐådL+¬E–àøò~ô¯HÔå$˜ËÞ>…7cåĹim*VÀf+OÊ€Ý>«•2‹Œsp•Á× L¤Œ™°JRBõ2”"'اo°u|}wé(táHw²Š53q f}´;{æc–T×q³5•Æ( sÇ ÍŒSÏÞåÀ22²4 gž74ïÐ%1QŽMZ2¼³Ûñ4¢v—¬k•c¡«†8œZþÿÄ †Z ¬ßeõ¥IlÇ b‡¸ÉJ-ÈClžÉ1_„T³’x "«LؼÂÁâ×Qy†™!ß“b«'h6Jj†ü 3÷°¤´T´©ìžùæ3Ï}艊65$)7ƽ`ÌZ“ºŒÈ‰Ñ)È”=¤æÝ´ß#{°|\vc7TGõn¾ é1–‡‡Dt”£Ï2ÿR1*€˜ç5LJdŒ@`#N³ìã1‚1óJJ@tdUC2Ä<ÌFR¦£÷(¿ G 5…å)¡(Æ«%ìï=aɰ'¾˜C«Yb†‘ÙpLsê¢wT¸±Yj»¾¨=qÚïÈX”£q£†þ€-`…(¥Ü…‘ÄèÙR¡êTI)‚"×uˆ!ÆXÔŸX㨫o l´¢Ì0¯¸=ùÎÛ+ƒrZ"5X&Ö ƒ$&ƒpF”8§])`]f<©#²a:ˆ³ ¾Êƒ^L3• £˜á¦k Œ9ÓýåQjBDf1%bÊÌÏ’TŹzå,ALcW†ž×-!¥J$è•{°bdJÄYÂ7̙̈‘Ž‘!Š%¶˜™pÞ•ª.v* q9éöfkk)yß·] ±ª*6¤”|ábŒ™ˆ~Œä1˜ ¾ KsÖhWÖ¥†Þ£°¨¥”b¢&‰Š6†HZ—œZ«‹²‹èz-«µd¤±÷RÇÐ7Жł†jì5„˜zGãAaG‡!‚‚Åñb±¨j‰)ˆpLí¨,ÛESø{¯µ;Ñ—ZñF d<6‰8hð®ÐÀÃñhƒ<8域@Hù:F9UëøªÇfÒ¶ï< È9Ï8Fo›ÐQbGR:rÔ#©EÕØ´(Jw†Á 1ŽŒÉèøŒâ)¥¹Rpœ@AC—’*’ðåÈXºÔ{Õa$ðè8’p(bÓµžQx_x¶¾ïÚ%œl®¯·S;' éjÔƒRØØ‚uÜõMá|HS_ìÞsGÐŒ›ÍÊ>^e&Å£©¯‹  o]ŠèØÅDÑ­Ä«¼šåæÑƒËA/8*ªKbä@‘U`‹EB,Ê·)ij=Ç”lc¼®„Xó~s‡ˆFã}ß#WõrÙ’1{«[í-.„ ΗEiNèC» 5.&^*À‘I]#bãÔ·ÍÈ l¤=u½Í,ï®j¾¤Q=F§m虉ÁÃÞÎî¨ÜÐ}&ƒ¯’”‘úú>´‹¶®ëIáÖÆåt¶0c|¢ôûº'úÄÓÇ00öe¯f¾iŒë ìmaË•tquÙ%Í÷\çÌKÎñ«œÏ4S¨X+Ì‘ ˆEb2afƒ¦°ì•Öû.ö]¿6•ošÅ¢YÔã(]¿uys}Ë@šõ)–¿"‘²K–·©òÅ(ã ’ÆMMª’Èw!…>Á/}0ö\j]9Çj¤fd>8Zj3í¨¨+ñ¤…jéÚŒtxÓ™äš6ªÚ”}±Y»Q·˜¶M[~TtñÞ‹;9…öeG› ©hÛa¬mÒ&X忬[Áv²`›WDW–Äl ÆJ®¨Ê½qP¯vL ºL˜“ÑzÝl¬û:I˜pÃ#çK•´LÅÈÛØŽÉ1¤¬J&Fð“:4sßÛmú®öVšQ›–~´ltÞõsöc"D>%/ÎF!„¦m¬Oä’VVNdÃu¥D· WG‡íAÐ~¯ÙYÛ J5¿º!*RcÇk~[:¿A뱟z×,öç2½WÞ½K+°Šž ‹áÜ©s]fó¹Ázl¶l$ï„;n'ïéœ7¥•ñvÐhÆ>¥co_ÏÆ„(&dHF,¬dª*ÆÖQš»×¾xÅ-Æãº:8Ü+Ætá‰ó§ÏnwnÙ†…Jç=”³íOÙ(c ø§?ýk¸ØÀרšÿ…öï•oxÛ~I†ŽÐp²Q½†pC_ù•w¾ú?}7=äAX‰2wððüßü¸œªcÙ%í`Dêaó0©$‰ó¢æÓð[¯~éŸünîƒû¾íÃ?ú“?À›-\ï'Y«DJIÞ8üÚg6>õÄúüÌì±S*L^»ó%Â`•¼{Ã!%3VUg™®Ôæ¹[à³îXssªæBÕÝÂAF\oÔ[د1åñ¹ Ûç6ÛÑòÎí5¼~ýÅË¿½¸>÷¾6QÌbØ#Èpmãl“·ÓTæWZ¼³?ÙÀþ»—_ºùÄÖFq¾°0WflFâ ^“Ηˢ(77Ï<úè“{ߤgúG^ÿWW0~pÝ?ùØÁèÒxkmoyUJ$V6–”mÐPrJäjïu†K/ÞÂFyÍÞWv{Ìë‚»‚:HªüÑŸúåri™ŸH‰Ø:²$Ò´ŠŸàçiÙlXõìæ³¿Ó½z¥ÝW3ŸD‘/¶yÂD2@¾ 9BÎXTÄàL½’O´ˆbÁÅ( dèAdV‡ /ïØ[¿~3¤³œü¥Ÿûw·?3zà#½õò>vüÎ?ôo~ Îõ.k¢doìûÀä&åòNnöè¯þƒÿ}ñîõG?õéÃ+W`탫ßùÇ?½Ç7hdÖ9Sðˆ#)‚#FÚqרòô§>úÙ}˧¾å7ÿûÁ¹cüƒ?õo½ð½ï;t·\¡FQ%Å.MÒØ'gˆ(¹õ1XX/êÛoì|ñç¿€Åø}ßþÑÛï P·Q>ó­fv¬ J…ëB¨Gkm8eƈÁÁ˜”¢hpÔ„xíê­xó[|á<ö‰íµ+7¯/bcflšû·FJdÊÖ.9òëäEWòÊ9"URÁV$¢ÈE¡B”L#‘r)̬MÂt7Ö{ûÕåÉsöø'Î~Ó'_@ÐúËðZbSND™ÕX”DÑÏš3å™t·_¼ öŸúôÇ¿éÓß‚yœ¾5ûÚ®lÓ)i؃E¤KD(Yt][4‹j:í,ê=¸>†z:+îÌd'º…°rb"WU£‘sÞ,Ƹl›>ÆBFýn¸úÊ ô#Þ<ÿCß÷ýhvè­/Ý8¼¹ð(44ZŒQU˲äžR¤\Š3bƒØ°µ¾Ñ.–7nÞ iwwWíöh-¦Ù}ñ‡øe¤zìMË}"*¸pæHã–Kóã²Â¤jm²™’ŽÆüôÆ8Bgû³CÒR´v©s¢pšJíF½nÇz»]û½ñEÜPœ}ú‰Çß÷üG¾Õ»Y¼ñ[W6Û ÕrÝGqF̙䲞ŒØ\&÷—=¼÷…ó…Ž=”b»¥öm˜7ûËjRVUUiQ-Æ›‡¼ò«qcöÑgŸ}èìùg?ô­°Çg_<Ø¿ØnðùQÚóÆˆ«Š}èšÐÍÙlؾ²èÞ ¬æbêO­¯=üÐc»Xìcñ؃Oœ_ÛŠ»Ó£q:­~}ÃEÎ}‰»t\9tj¹l,qÍ£±›ˆ¹ÔƦiÐ5¡‰Îæ(Ô½séMè ¾l`ÂZJOŒH‰4¹Dã4±yñ·^æê%üæoþÆ×._„0úòâ+·ö®tÖ,¬cW¯ã•WIIô(£V¡ ÂᢟgK™IYÖ£²®Ê‘YLÖ'bSvÑü‚oõ¯í© ŸÿçŸ×xn8ÀW¾p1ì2- ,„zùÚ“¢ó Q¨Pt0gê{L kìŸ~øÑþý[¯CðÓÏ>ÿðãý¥ù®…ø‡{#€&õ@pÉOž HÂF¥pÞ×Ü£:EOÌéòWv.}õmh ×<ýü“ffêId >D‚KÎ[­}õÖ«—»[¦Åÿï_ücL¶1;€?·{ãð¥WÞ~ÿÃD,B3-bÑ.{¿² gG*'œªÎq JAÉ҆̕vTWä}H<[Db;3.Î…Ñ/ÿËßÄA‡5ÿú—~ýõ·ôÒbùΗ/‡½o?pnæ9à‘™XéÙy#!4©F ªŒkå [§Ocû’^½ÖšC…ëOáôçÎv×è„ïAÜk×zÁ686Ø(åÇÛU.¥c$bƒ)…Ʀè§;Wäþ»z½÷æ—_Ç+»8µuþ3yì¹nÛ5+qëœ&€à¼oüêÿò+èfXëÛÜï#17õ‹ÿãÿ‹ezå•7žûŽÇF§Æ]ê*+´³”N¸-mÈJ±¸ª[«'™&‹m !ED²Èe%ÆÌÌÚ]¿våÕÿçwÀÅú|îS/´ãE·ñìWîÜd¶ ÞüCíÔÇ*=EÏé²Yz/¾,hŒ…TN1iAñK¿øyœeH¶<ýmÏ÷|Ûœw£³ìñK1ס lÅ¥×/÷¯ëãÍ=úÉy?m/coõrûÅßøu´»o_|ûÍçN=Ëmq0šŒBL5j"9Õˆ©‘Eé°ÞÂ4Mš¡ï]M"»¸QŸÖ(3Wõ.dîàpúÚKo€x¤zè3kß÷Ÿü±tKçÅíßi^zù—á–o\|í©>Rl±Š)“2Øe°ËE /NŒýëíŃÃù6¼V(ëAXþÞí—677ÌåüüÆ«œ›G ¶ã•ÇÉú¦ï*àô#g>ñ'¿y g§M?ÚúŽû£Z¾å#/”k´_ìö>(3ælÏ…’‡ ‚ñþ{ªåäéço¶æ‡z}­õÚ~ïùßx·Ï·Î›…Æœ‹lD#U“‘qŒ®ûÄ_úP>Åãíz¿›ÁØ9ÒÚŒ4uírT®MÖ×ýFñÂO|®®ÖûÄö;Ý›ûºWUëë;ýM?ù]Ëfºuvc´Yô®3xIÆŠD?iŸß½y»´ä„ p’Rª’Ü3G¦DpеÞº(b¸Ÿ ÷~"cÒ‰£q0ÊÆ)Hod’|ÕO6çg],;ßE×z2uŠÄ©-º^¢R26½?„qçE‹ž…ÓZÙžQâ®ÜKÒˆ:0©IDATQ‘T*YWªtd0¸€1@Œ ÊýêHt•ýÚæüÏêi[Ì’kŒ’ȈÔi’ÎÀÐ  [úD>l*\çCp]ïZÀœJ‹ª±q\ß»†A†:ŒT ‘3JFQ²‚r*œ Ðc^-ò_{•sæ}þ·‘!qÊY@JjˆÁ5óêP”»b™¤eË46ÒÞÅD k‘ÙNá bFÔ™h/!°|âUdФÞ̓ÉPI%L”(q3êÉ«'ÀQBSÌ ®Ilp6æã;÷p²ËÑ2$+J ²¯DŠB bH»¢‰"@u‰5JLœ@ìœé‘­,­txFˆÃc«9*§¿é¿æ:Ÿðª¯èù£M †RP²Þ*çd%™˜bËööÌ’Ð죘™"‰D >8vÅAdND¢ìS!*¹(QØàѾœ«èQúä‘]$}[ÎŽÒÅUîŸb§†räS²Õ‰´/æ€JrEb‰.Z°¢ë’u9¶P9ëk€ó *Ü+˜˜3Çò*K>RN$yodÍòž§'ƒ]Þ³‰d¤½ëØVÀ2ÿä9 :ÀïáqÏ,–}]Q¹S™J:±ª&bž`ÊÄB2…ù\4aÚ0J½ëŒ q”®8h rRž@BLÍXY/.‰S!ãHš$(Ep29h9?®Ž*ªËRRÙ Š1Y†7%%bá ¿AYˆÁxÇ‹›ñædÈùȦ{qaDVw žˆ"S2ÒD:$ÝgG"ê”ÊE‚K^“R"ÄlQ%o ¡±=³aØÍŽ$ ‰]gR¦yĬ0Rp0k)ÊC ã”Șá2$¥‚CDeÅÈðÞHæ˜þÿîÓüü©bhIEND®B`‚yaz-4.2.30/doc/common/id.eps0000644000175000017500000004137711654451761012514 00000000000000%!PS-Adobe-3.0 EPSF-3.0 %%Creator: GIMP PostScript file plugin V 1.12 by Peter Kirchgessner %%Title: /home/adam/ID.eps %%CreationDate: Wed May 1 13:27:33 2002 %%DocumentData: Clean7Bit %%LanguageLevel: 2 %%Pages: 1 %%BoundingBox: 14 14 135 172 %%EndComments %%BeginProlog % Use own dictionary to avoid conflicts 10 dict begin %%EndProlog %%Page: 1 1 % Translate for offset 14.173228 14.173228 translate % Translate to begin of first scanline 0.000000 157.000000 translate 120.000000 -157.000000 scale % Image geometry 120 157 8 % Transformation matrix [ 120 0 0 157 0 0 ] % Strings to hold RGB-samples per scanline /rstr 120 string def /gstr 120 string def /bstr 120 string def {currentfile /ASCII85Decode filter /RunLengthDecode filter rstr readstring pop} {currentfile /ASCII85Decode filter /RunLengthDecode filter gstr readstring pop} {currentfile /ASCII85Decode filter /RunLengthDecode filter bstr readstring pop} true 3 %%BeginData: 16148 ASCII Bytes colorimage mf*=@B(7YXB%aEgJ,~> mf*=\g%!8eg%DTLJ,~> mf*=IN:CK\N8h)AJ,~> n,EBom5"aKZ2]=~> n,ECSmE>RsZ2]=~> n,EC-m:H@ nG`OP5j^?.5j,HQJ,~> nG`OacgApWchOgGJ,~> nG`OVE:%6 nG`KIlSAO"ZN#F~> nG`LJlc]@gZN#F~> nG`KflXg-rZN#F~> nG`K#lSANQZN#F~> nG`LAlc]@^ZN#F~> nG`KIlXg-UZN#F~> nG`K#lSANQZN#F~> nG`LAlc]@^ZN#F~> nG`KIlXg-UZN#F~> nG`K#lSANQZN#F~> nG`LAlc]@^ZN#F~> nG`KIlXg-UZN#F~> nG`K#lSANQZN#F~> nG`LAlc]@^ZN#F~> nG`KIlXg-UZN#F~> nG`K#lSANQZN#F~> nG`LAlc]@^ZN#F~> nG`KIlXg-UZN#F~> nG`K#lSANQZN#F~> nG`LAlc]@^ZN#F~> nG`KIlXg-UZN#F~> nG`K#lSANQZN#F~> nG`LAlc]@^ZN#F~> nG`KIlXg-UZN#F~> nG`K#lSANQZN#F~> nG`LAlc]@^ZN#F~> nG`KIlXg-UZN#F~> nG`K#lSANQZN#F~> nG`LAlc]@^ZN#F~> nG`KIlXg-UZN#F~> nG`K#lSANQZN#F~> nG`LAlc]@^ZN#F~> nG`KIlXg-UZN#F~> nG`K#lSANQZN#F~> nG`LAlc]@^ZN#F~> nG`KIlXg-UZN#F~> nG`K#lSANQZN#F~> nG`LAlc]@^ZN#F~> nG`KIlXg-UZN#F~> nG`K#lSANQZN#F~> nG`LAlc]@^ZN#F~> nG`KIlXg-UZN#F~> nG`K#lSANQZN#F~> nG`LAlc]@^ZN#F~> nG`KIlXg-UZN#F~> nG`K#lSANQZN#F~> nG`LAlc]@^ZN#F~> nG`KIlXg-UZN#F~> nG`K=lSANkZN#F~> nG`LGlc]@dZN#F~> nG`K\lXg-hZN#F~> nG`L4lSAObZN#F~> nG`LZlc]A"ZN#F~> nG`LAlXg.MZN#F~> n,EB n,ECFmE>RfZ2]=~> n,EB[m:H?jZ2]=~> mf*9TmkXs3YlB4~> mf*:Ln&tdoYlB4~> mf*9nmq)R+YlB4~> mJd4X^[mio^[eT.J,~> mJd4bn+5ZBn,0BhJ,~> mJd4[ch"IDch4LAJ,~> M>r)~> M>r)~> M>r)~> M>r)~> M>r)~> M>r)~> M>r)~> M>r)~> M>r)~> M>r)~> M>r)~> M>r)~> M>r)~> M>r)~> M>r)~> M>r)~> M>r)~> M>r)~> M>r)~> M>r)~> M>r)~> M>r)~> M>r)~> M>r)~> M>r)~> M>r)~> M>r)~> M>r)~> M>r)~> M>r)~> M>r)~> M>r)~> M>r)~> M>r)~> M>r)~> M>r)~> M>r)~> M>r)~> M>r)~> fDr35J,~> fDr5$J,~> fJBgFJ,~> fDr35J,~> fDr5$J,~> fJBgFJ,~> fDr35J,~> fDr5$J,~> fJBgFJ,~> fDr35J,~> fDr5$J,~> fJBgFJ,~> fDr35J,~> fDr5$J,~> fJBgFJ,~> pAk3,oDel[rk8OC!%5LpAGcH*1B= pAk3,oDel[rk8OH!%5LpAGcH*bQ-o,ncA4:o$%%&!9s4$!n-Z+rQG?-o$[0S!oNS"pWS-~> pG;floJ6KNrlYI,1K2K?KD[P'AcTLCf`BEknn.gQ!5/#;!dWJ=rFQ,Dfm34%!h\.upL\p~> pAk3moDem*rr3.P!!*'!JG]EF1C)/(bfoYXk?7F5!WV?^bQ+O51C(\pN&*82s1e.]!h'(#pG7=~> pAk3moDem*rr3.P!!*'!JG]EFbQm_=o()_Ypt#)]!WVronc7qIbQmV:iloX%s6oR'!p9O9pWS-~> pG;gKoJ6Kjrr3.i1Gf(2RJ\l=Ad@#hg"H&um=Y%C!WVQdf`8\XAd?Z^WFfb.s3L:K!jhocpL\p~> pAk3moDem*rr3/b$3:,+JG]EF1BG`"r\FV7s6'#1!WSSX1C$29nl\]Xk pAk3moDem*rr3/s%flY0JG]EFbQ7;7rlbH's7l61!WV pG;gKoJ6Kjrr3/h4#?p:RJ\l=Ac^Tbral52s6]Gj!WTLrAd<;Jon.P_m;VZ/!jhocpL\p~> pAk3moDem*rVm"N!<<(LquHXN!R1TB1BOo_JFt]!s-`@4"_Refbl;;G1BO!EB(n*3~> pAk3moDem*rVm"N!<<(LquHZ=!V69hbQ@/2ht>1os5rgp"kiqKo)ID6bQ?r,g%W^@~> pG;gKoJ6KjrVm"g1]RKCr%n7_!SRMOAcg!PTCldss0M3,"cWK@g&I$%Acf==N;$q7~> pAk3moDf33s1[Cjk6h7hJG]EF1BG`"rA+Les-`O9!WV?^bQ(f;1BXNSs-`C5!h'(#pG7=~> pAk3moDf33s1[Cjp^dE)JG]EFbQ7;7rQG>rs5s!u!WVronc784bQI,0s5rjq!p9O9pWS-~> pG;gKoJ6fss3'R)m5t@JRJ\l=Ac^TbrFQ+is0MB1!WVQdf`6ZrAco^Gs0M6-!jhocpL\p~> pAk3moDf33s1W%Ds+(.LJG]EF1BG`"rA+Les-`O9!WV?^bQ(f;1BX'Fs-`C5!h'(#pG7=~> pAk3moDf33s1W%Ds+(.LJG]EFbQ7;7rQG>rs5s!u!WVronc784bQI#-s5rjq!p9O9pWS-~> pG;gKoJ6fss3$&ps-`oeRJ\l=Ac^TbrFQ+is0MB1!WVQdf`6ZrAcoC>s0M6-!jhocpL\p~> pAk3moDf33s1SKjs6'F^JG]EF1BG`"rA+Lrs-`O9!WSSW1Bgq]bif"/nhU?8s(;!]J,~> pAk3moDf33s1SKjs7lWoJG]EFbQ7;7rQG>us5s!u!WV pG;gKoJ6fss3!4\s6]jdRJ\l=Ac^TbrFQ+ss0MB1!WTLqAd*heg$Sflnn%s0s,?\aJ,~> pAk3moDf$.s5*ferVlkJquHXN!R1TB1BQ80=nOQOs-`C5#=.JC9kOFg5k?c5RK$mn1Oo~> pAk3moDf$.s5*ferVlkJquHZ=!V69hbQ@J;f(I5fs5rjq#LE2Cdb4Zqch#?^k5X-/b^]~> pG;gKoJ6Wns5l+irVlkcr%n7_!SRMOAcgulKCrgWs0M6-#B9)'H&VdjE:[ZCZi?!YAq0~> pAk3moDf'/s8N'!huR!WTM*AcQ!,1C(8dN&*8es/,BD!h'(#pG7=~> pAk3moDf'/s8N'!hu pG;gKoJ6Zos8Ol2k5PA\RJ\l=Ad@#hN/XCgs2O\C!WU1=Mu\M'Ad??UWFfbTs1Ir8!jhocpL\p~> pAk3moDf'/s8N'!AH)T/JG]EF1B>YtrrM\Yo/$=E!6k-m!d"Ccr\FXAg&H-c1BO!EB(n*3~> pAk3moDf'/s8N'!AH)T/JG]EFbQ.54rrN&[o?@.4!:oj-!o3hHrlbJjp&Eh>bQ?r,g%W^@~> pG;gKoJ6Zos8Ol2KDtlNRJ\l=AcUN_rrMf!o4Iq#!87'X!g`l>ral7Oir>>:Acf==N;$q7~> pAk1ZoDeq?6:1YOr^$T4quHXN!*T;5!*ShJr+5q3p+lbQAjH;N!_m90oJ6PCAjH)HJ,~> pAk1ZoDeq?6:1YOr^$T4quHZ=!7q/&!7p\ar7M)$p<3Thg!BW@!n,cQoZRBbg!BE:J,~> pG;e]oJ6PIB4q3"rau40r%n7_!/(90!/'fRr/:W.p1=AYN,\`-!dT`WoO\/MN,\N'J,~> fDr35J,~> fDr5$J,~> fJBgFJ,~> fDr35J,~> fDr5$J,~> fJBgFJ,~> fDr35J,~> fDr5$J,~> fJBgFJ,~> lne#/Z87"~> m*+hsZHRh~> lt5W@Z=\U~> lne#/Z87"~> m*+hsZHRh~> lt5W@Z=\U~> lne#/Z87"~> m*+hsZHRh~> lt5W@Z=\U~> lne#/Z87"~> m*+hsZHRh~> lt5W@Z=\U~> lne#/Z87"~> m*+hsZHRh~> lt5W@Z=\U~> lne#/Z87"~> m*+hsZHRh~> lt5W@Z=\U~> lne#/Z87"~> m*+hsZHRh~> lt5W@Z=\U~> lne#/Z87"~> m*+hsZHRh~> lt5W@Z=\U~> lne#/Z87"~> m*+hsZHRh~> lt5W@Z=\U~> lne#/Z87"~> m*+hsZHRh~> lt5W@Z=\U~> lne#/Z87"~> m*+hsZHRh~> lt5W@Z=\U~> qD/DFs7/E21M6ZTr%n6N!5AF3!oKGWq>gCK!1Ecb!+tp\!iH!cr\FUYs4R!"s31'j!h')4r\FUf s(;*`J,~> qTK6-s8:3ebh<$Yr65'=!5AF3!oKGWq>gE:!9X4Z!87(i!pTaIrlbGps7Q!-s75d*!p9ORrlbGs s4R7mJ,~> qIU#>s7L>CArQbrr+>j_!6b?@!p6\=qD8"\!42V'!0$V`!keQ>ral4as5NW^s4R!U!jhp[ral4j s,?edJ,~> qD/DFs8SKC1M6ZTr%n6N!5A=0!1Ncbq_J;As0M]m!) qTK6-s8V6*bh<$Yr65'=!5A=0!1Ncbqof-(s6TaI!7LSb#g`;Gf$)A2s46ecs75d*#j20ehos qIU#>s8TE;ArQbrr+>j_!6b6=!3c8Uqdoo9s2P&E!."9M#]T22K4\`Ts+BoTs4R!U#daR2T4V\o s,?edJ,~> qD/DFs75_G1M6ZTr%n6N"ht$:6:..?rr?U-!;ePRRK$mh1BqIkfg)G7N:Je)bk!UrRK)I51G`YC B)4<6~> qTK6-s8;f@bh<$Yr65'="ht$:6:..?rr?U-!;jtAk5X-)bQcc#p!;n&ipt=no(1'2k5Y5Obfnc? g%rpC~> qIU#>s7Q&(ArQbrr+>j_"j?rGB4nFIrr@]L1](bcZi?!SAd44oic)R1WUa[$g%/e]ZiBF[AnI#% N;@.:~> qD/DFs-`nn1M6ZTr%n6N!l"^7rW!%Ns8Th2!;ePRRK$mg1Ba-Gbl>oW1]P\j1C0EKJH)#nB)cK> 1Oo~> qTK6-s5s@Jbh<$Yr65'=!l"^7rW!%Ns8Th2!;jtAk5X-(bQR).o)J:Nbl@8*bR!A2huDi_g&Kb% b^]~> qIU#>s0MaFArQbrr+>j_!mCWDr\FYEs8U:?1](bcZi?!RAd#I?g&KaqB)gQUAdGaCTDu60N;nk5 Aq0~> qD/DFs(8V;9kOEnr%n6N!l"^7rW!$es8Th2!;ePRRK(t>bjmOlg&LV.nMC3ho.pZ?s"i@!5\C%. qD3X~> qTK6-s4Qc=db4Z_r65'=!l"^7rW!$es8Th2!;jtAk5Y,Ro((!,p&Fs9n]_%(o?7L&s3106ce8?O qTOH~> qIU#>s,=ttH&Vd0r+>j_!mCWDr\FXhs8U:?1](bcZiB%ag%&_WirA[jnRhgSo4A97s(:9`E/agU qIY6~> qD/DFs(5"*b\$mCr%n6N!l"^7rW!$es8Th2!;ePRRK(t>bk!Un5k=sTB(7\Wbk!UrRK#'Ts-[L! B)4<6~> qTK6-s4Pj#o%F'*r65'=!l"^7rW!$es8Th2!;jtAk5Y,Ro(1'.ci!hCg%!;do(1'2k5WZYs5r#7 g%rpC~> qIU#>s,;7'fo5s;r+>j_!mCWDr\FXhs8U:?1](bcZiB%ag%/eYE:s82N:CN[g%/e]Zi=Wrs0I[a N;@.:~> qD/DFs(4'Ts-`nTr%n6N!l"^7rW!%Ns8Th2!;ePRRK$mg1BkPnN;r'+nh^ qTK6-s4PWYs5s@Dr65'=!l"^7rW!%Ns8Th2!;jtAk5X-(bQ[J8irAf"o$%.)o?7L&s3/^Xs53k0 qTOH~> qIU#>s,:Qrs0Ma3r+>j_!mCWDr\FYEs8U:?1](bcZi?!RAd-N\WW2@)nn.pTo4A97s(5lrs.B=M qIY6~> qD/DFs(4&Po()gKr%n6N"ht$:!%3 qTK6-s4PWBr;?TWr65'="ht$:!%3 qIU#>s,:Q/p%A?kr+>j_"j?rG1K0_@rr@]L1](bcZi?!SAd577]OnMMcgk]Jg%/e]Zi=WLH2m:3 N;@.:~> qD/DFs(4&CRK*;Tr%n6N!5A=0!1Ncbq_J;As0M]m!) qTK6-s4PW?k5YJDr65'=!5A=0!1Ncbqof-(s6TaI!7LSb#hJqKccjW+s53Fls75d*!TsF]bQI53 s4R7mJ,~> qIU#>s,:Q%ZiC'3r+>j_!6b6=!3c8Uqdoo9s2P&E!."9M#_Vg;E+W_As.Amps4R!U!OMh*Acp'Q s,?edJ,~> qD/2@s(;6d!pBTOr%n6N!5AC2!PW+@!;ePPRJd'bB(e"^g&G[`1BUABnkJa4s31'j!L`ue1BTo5 s(;*`J,~> qTK$'s4RCq!r2fXr65'=!5AC2!PW+@!;jt?k5>5Zg%NVkp&E_EbQH;kr6k5]s75d*!TsF]bQH2h s4R7mJ,~> qITf8s,?qh!q$#or+>j_!6bOom-1As4R!U!OMh*Acm#F s,?edJ,~> lne#/Z87"~> m*+hsZHRh~> lt5W@Z=\U~> lne#/Z87"~> m*+hsZHRh~> lt5W@Z=\U~> lne#/Z87"~> m*+hsZHRh~> lt5W@Z=\U~> lne#/Z87"~> m*+hsZHRh~> lt5W@Z=\U~> lne#/Z87"~> m*+hsZHRh~> lt5W@Z=\U~> lne#/Z87"~> m*+hsZHRh~> lt5W@Z=\U~> lne#/Z87"~> m*+hsZHRh~> lt5W@Z=\U~> lne#/Z87"~> m*+hsZHRh~> lt5W@Z=\U~> lne#/Z87"~> m*+hsZHRh~> lt5W@Z=\U~> lne#/Z87"~> m*+hsZHRh~> lt5W@Z=\U~> lne#/Z87"~> m*+hsZHRh~> lt5W@Z=\U~> lne#/Z87"~> m*+hsZHRh~> lt5W@Z=\U~> lne#/Z87"~> m*+hsZHRh~> lt5W@Z=\U~> lne#/Z87"~> m*+hsZHRh~> lt5W@Z=\U~> lne#/Z87"~> m*+hsZHRh~> lt5W@Z=\U~> qD/,>rVloOJGM)!!!'b1rr@TH!;nVSg&G[`1BP>kF7_6iB)e:j1]RITRJnuCbl@Am!6kEA!SMPh 1Oo~> qTJs%rVlokhtkRo!!'b1rr@TH!;t%Bp&E_EbQ@85h"8elg&L4+bl@\Ck5NR*o)JF-!:p*g!VP7C b^]~> qIT`6rVloXTDE0s1B>VqrrAJa1]1hdir=u:AcgN!TKF? Aq0~> qD/AEs,;#ekPqmc1]%.P^AIp1JGT?E1C%(_kVo; VYN#u~> qTK3,s5Mhrq#B^XbkhA?^AIp1JGT?EbQl`!ps71>s6oR'!nmV9o?@46"ObN qITu=s/DRJSf qD/DFs(4&C5hZ0fr%n3M"2=g86MCKW1Brg<^J4:^5k?c5B)e:j1C*sCs0FL;bl@Am!R1TC1BTo* s&o1SJ,~> qTK6-s4PW?ch7=qr65$<"2=g86MCKWbQd),n'_./ch#?^g&L4+bQn1Cs6RtRo)JF-!V69ibQH2d s47%jJ,~> qIU#>s,:Q%E8pnir+>g^"3^`EBD44ZAd577c[#3NE:[ZCN;p6UAdAA's2JY_g&LbX!SRMPAcm#> s+C/[J,~> qD/2@s(;6d!_r^0r%n3M"2=g8AH"mq$Msi"1Bbr%kPo/b1BM1gRI`3>s3.hL=Yn;%p+l`ns8=_T F8r-61Oo~> qTK$'s4RCq!n.,;r65$<"2=g8AH"mq&,QA'bQRM:q#B% qITf8s,?qh!dXglr+>g^"3^`EKDoK`48Ui1Ad$femJi.9AcdqkZh%c6s4PElK4`g:p1=?Ys8?O2 QN+VoAq0~> qD/2@s(;3c!WUCA1]%.P^AIp16MgcZ1BUAOs/, qTK$'s4R@p!WV`gbkhA?^AIp16MgcZbQH;ns69't!nmV9o?7I>o$[I,bjtf-bQ7;7rQG>hs76$1 J,~> qITf8s,?ng!WUjNB)=@abPV;>BDXL]Acm>Ys1Il6!f[/co4A7-fm38DB%d4XAc^TbrFQ+Ms4R6\ J,~> qD/2@s(;3c!WUCA1]%.S^An5jrk8@[qZ-IK"I];inj)b%!bVJ#o.pXObVP[eB$C;K1BG`"rA+L? s31 qTK$'s4R@p!WV`gbkhAB^An5jrk8@[qZ-K:"Qoaar6OrX!nmV9o?7I>o$$7rg%,1:bQ7;7rQG>h s76$1J,~> qITf8s,?ng!WUjNB)=@dbQ%V)rlY:?q_S(\"LJ..ol0J6!f[/co4A7-fk.SjN7n7)Ac^TbrFQ+M s4R6\J,~> qD/2@s(;6d!a5Q0r%n3M"2=g86MCKW1Bgq]b`)S:nhU>Zs-`I7#QN"(5k qTK$'s4RCq!nRD qITf8s,?qh!e^Nmr+>g^"3^`EBD44ZAd*hefr>"tnn%r^s0M qD/DFs(4&C5hZ0Lr%n3M"2=g8AH"mq-i3oA1C$2.nkCpas,?P*!bVJ#o.pOLbVM&6rr;[J!R1TC 1BUeNs%W>GJ,~> qTK6-s4PW?ch7=kr65$<"2=g8AH"mq-i3oAbQlJhr6ig[s5NXo!nmV9o?7@;o$#>;rr;]9!V69i bQHGos3gbfJ,~> qIU#>s,:Q%E8pnVr+>g^"3^`EKDoK`;u8BKAd<;Bom(0&s/GU%!f[/co4A.*fk+iqrr;\(!SRMP Acm\Ys*=HQJ,~> qD/AEs0J-;o)H&n1]%.P^AIp1JGT?E1C1>eN&*7ao(#rU1BM1gRI`38s31Hu!pBU`p+lrts-]b. s8RWF1Oo~> qTK3,s6Sn=r;Z-\bkhA?^AIp1JGT?EbR!S8iloWpr;>. qITu=s2MCup&E&/B)=@abPV;>RJSf qD/,>rr3&D^LmYurrUEN B)"04~> qTJs%rr3&jn(IQ]qZ$W1qu6YHqZ-T=!o3hHrQG>us7Q$.!nmV9o?778o)?i7h#IEJbQ.55rrVcX g%`dA~> qIT`6rr3&Qc]%^4q_J5qqu6Yaq_S1_!g`l>rFQ+ss5NZ_!f[/co4A%'g&>RbQN.!YAcUN`rrUln N;."8~> lne#/Z87"~> m*+hsZHRh~> lt5W@Z=\U~> lne#/Z87"~> m*+hsZHRh~> lt5W@Z=\U~> lne#/Z87"~> m*+hsZHRh~> lt5W@Z=\U~> lne#/Z87"~> m*+hsZHRh~> lt5W@Z=\U~> lne#/Z87"~> m*+hsZHRh~> lt5W@Z=\U~> lne#/Z87"~> m*+hsZHRh~> lt5W@Z=\U~> lne#/Z87"~> m*+hsZHRh~> lt5W@Z=\U~> lne#/Z87"~> m*+hsZHRh~> lt5W@Z=\U~> lne#/Z87"~> m*+hsZHRh~> lt5W@Z=\U~> lne#/Z87"~> m*+hsZHRh~> lt5W@Z=\U~> lne#/Z87"~> m*+hsZHRh~> lt5W@Z=\U~> lne#/Z87"~> m*+hsZHRh~> lt5W@Z=\U~> lne#/Z87"~> m*+hsZHRh~> lt5W@Z=\U~> lne#/Z87"~> m*+hsZHRh~> lt5W@Z=\U~> q(i"9r+5q'q_S-M#q&&+-NF,o6:*'t!;SDO9kNuQ!^L@0rA+Id:%gCAAcPQr1B9] q9/ibr7M(uqons<#q&&+-NF,o6:*'t!;Xh>db469!mfQQrQG;qde:o`f`9IkbQ,uef`9Irb^]~> q.9VGr/:W$qe#a^#ubJL;_p4.B4k0@1\kV`H&V?,!cX*WrFQ(hH1kkKMu\.oAcQfJMu\/!Aq0~> q(i"_r;Qbbq_S-M$%W'UhZ*Z6s8PF`!;SDORK)k7"(qT5B)XRes-`R:r;Qf\B(RkZB)MZ/RJAXh~> q9/ilr;QcZqons<$%W'UhZ*Z6s8PF`!;Xh>k5Y%s"53_Sg&B1rs5s%!r;Qfmg% q.9Vcr;Qc'qe#a^$(:hnjtegUs8Qa01\kV`ZiBW/"-!9[N;dDis0ME2r;QfbN:^]^N;W\UZh\3`~> q(i(as0M]:!)<>HqZ$lYs8QV?s8Th1!;SDORK)k7"(qT5g& q9/ons6Tak5Y%s"53_Sp& q.9\es2P%s!."HRq_JK>s8R_(s8U:>1\kV`ZiBW/"-!9[ir3Njs0ME2#QMf&N3i3WQM"hkN;omV Mu\/!Aq0~> q(i(as-`U;qZ$jfs8V!6s5td,!;SDORK)k7#\O+\s*um]s-`R:!WSSe1BL_ZkOgV4B)cK91Oo~> q9/ons5s("qZ$jfs8V!6s7du=!;Xh>k5Y%s#hf7Ks52&Es5s%!!WV<]bQ?Aqq";i4g&Kaub^]~> q.9\es0MH3q_JIis8V6Ds6Wb^1\kV`ZiBW/#`Sf:s. q(i(as0M]:!'pE;q>^N0rVlkJq>g=I!L`uZ1C.UmB'8>51]Nm:1BINDrA+M]s(:s\!bVIkratp] J,~> q9/ons6Ta^N0rVlkJq>g?8!TsFRbQuo%g%b?dbl?i!bQ7b+rQG?0s4R+i!nmV5rn7(j J,~> q.9\es2P%s!-%gIqD/,prVlkcqD7qZ!OMgtAdF@qN:$"EB)f42Ac_q q(i"_r;Qb/q_S'K!%7aFq#L4H!L`uZ1C.UmAq9oL1]Nm:1BINDrA+MCs(:s\!+u0/pbRF~> q9/ilr;QcMqonm:!%7aFq#L67!TsFRbQuo%g#)hlbl?i!bQ7b+rQG?*s4R+i!87;Mprn6~> q.9Vcr;QbUqe#[\!)rjrq(qhY!OMgtAdF@qN1^-VB)f42Ac_q q(i(as0M]:!'pE;q>^N0rVlkJq>g=I!L`uZ1C.UmAi%[%5l[8G1BINDrA+MCs(:s\!bVIkratp] J,~> q9/ons6Ta^N0rVlkJq>g?8!TsFRbQuo%g!'$bci q.9\es2P%s!-%gIqD/,prVlkcqD7qZ!OMgtAdF@qN+Uc9E q(i(as-`U;qZ$^bs8V!Urr=GD!;SDORK)k7#\O*K1M6Zas-`R:!WSSd1BQ805kZu8B)cK91Oo~> q9/ons5s("qZ$^bs8V!Urr=GD!;Xh>k5Y%s#hf72bh<$\s5s%!!WV<\bQ@J;ch>Qag&Kaub^]~> q.9\es0MH3q_J=es8V6\rr?!p1\kV`ZiBW/#`SeBArQc&s0ME2!WTM)AcgulE;!lFN;nk0Aq0~> q(i(as-`U;qu@!0huE^CRfEE%qZ-FJ!L`uZ1C.UmAhu6Xs8SM\1C*rJ1G_;&s0MAS!bVIEoeV*~> q9/ons5s("qu@!5huE^CRfEE%qZ-H9!TsFRbQuo%g!%\/s8V6TbQn11bfnE"s6TF&!nmV,ouqp~> q.9\es0MH3r%eU?k5YHoYQ+XGq_S%[!OMgtAdF@qN+Q\Js8TG!AdA@BAnH#%s2O_D!f[/ q(i(as6'C*!.ar&qu?nhs8Te5-iX,G6MpiZ1BEpDo.pYas(4&C:&k6]p+lsRkKM0Ms3*b$1BM1g g&B1qJGD!O~> q9/ons7lTa!8m[tqu?nhs8Te5-iX,G6MpiZbQ6l+o?7Kns4PW?df9@0p<3dAq"""Us74M/bQ?Jt p&=L^htbKH~> q.9\es6]g=!2'.#r%eM[s8U7u;uZdsBDaR]Ac]7 q(i"Rr6,.kq_S0N!"/_>"t'BNAA5dHquHOK!J&Dc1BL_'=oL2YREU3T1]>MuVK;>b!*T6D!.al$ J,~> q9/iir:0jFqoo!=!"](C"t'BNAA5dHquHQ:!T3J>bQ?Adf)Ekpk47F'bl.)5l.kmS!7q)=!8mUr J,~> q.9VZr7M(Bqe#d_!'C2'##d<6K?MHAr%n.\!MA':AcdV lne#/Z87"~> m*+hsZHRh~> lt5W@Z=\U~> lne#/Z87"~> m*+hsZHRh~> lt5W@Z=\U~> lne#/Z87"~> m*+hsZHRh~> lt5W@Z=\U~> lne#/Z87"~> m*+hsZHRh~> lt5W@Z=\U~> lne#/Z87"~> m*+hsZHRh~> lt5W@Z=\U~> lne#/Z87"~> m*+hsZHRh~> lt5W@Z=\U~> lne#/Z87"~> m*+hsZHRh~> lt5W@Z=\U~> M)0Y~> M9LJ~> M.V8~> M)0Y~> M9LJ~> M.V8~> M)0Y~> M9LJ~> M.V8~> M)0Y~> M9LJ~> M.V8~> M)0Y~> M9LJ~> M.V8~> M)0Y~> M9LJ~> M.V8~> M)0Y~> M9LJ~> M.V8~> qD/2'R8*Z:!^N0(j>-c\r#,S\0(Uk!0)cah0(^q",PrAZ,P3bl0)cah0).5Q~> qTK#uk0j7Q!mg#djNIU^r+?%g\F[oE\Gg+@\FduFMu.,eMtG3n\Gg+@\G49u~> qITf$Z[)O^!cYK qD/1os31Hu!l+bcj>-cSqZ$X()Y>fc)ZB^:%.l=U%/U#)%.l=U)ZB^:%/;W/~> qTK#rs7605!q60HjNIU:qZ$X-BCsCJBDql21%`Zi1&CqN1%`ZiBDql21&/tC~> qITeps4RB`!mgn=jCSBdq_J77:%W#t:&ZpK5P/Of5Pm5:5P/Of:&ZpK5PSi@~> q(i5is,8aTs1dSM"W@@@"q1_8!!!r11B7XX!!"YE1C"U&"onW-$l&=i!!`B%!&"('J,~> q90'3s5M8Xs6o!l"_Rf8)DN00!!$[)bQ&R[!!'P%bQh!")?9aU0i@Se!#ke9!4_jKJ,~> q.9iWs/BUrs3K_;"\gd/3BoP'1B:/BAcOji1B:kVAd:gj3AWHO5=b?X!'1!6!+G\8J,~> q(i4?kPo/bk q90&hq#B%Fps8!E$"j5 q.9hMmJi. pbMn^rr2t1i\LZT!!!r:1BRsa!&""%"r%%;/cYkUo.pIe!!!r/1BnNn!%n6O#5L'*~> pri`krr2uOilhL;!!$[2bQA@U!4_dI##P@#\,ZLIo?7;L!!$['bQ^oE!4W"/)YqU-~> pgsMbrr2tWiar9e1G_c)Ack+N1L^#i#"LI*@5B]"o4A)!1G_bsAd1a]1LW'q3Vd9;~> pG2m(s6&>s!u_.>)ZDMp$ig8PpbN1.!!!]h,6.]goJ6Rf!!!r01C,T5!#.46!!"8?1Oo~> pWN^3s7kQs"(qT6BE$*W0`V33prj#R!!#m?MZ pLXKds6\cW"&1R-:&\`,5;P)rpgse?1G_O5<\lO4oO\2"1G_btAdDg$1Il%X1G`).Aq0~> pbN&@s6'EMi\LZT!!!r:1BRg]!&"%&![@[FrXAf,!#5&]!u_.>)Y>fe,6.`C%0$;-'`'V9~> prim's7lWVilhL;!!$[2bQAa`!4_gJ!fI$Yr\=EQ!)`C4"(qT6BCsCLMZSLe~> pgsZ8s6]imiar9e1G_c)Ack%L1L^&j!`h*5r]gE=!(ZZn"&1R-:%W$!<\lQ25Q8,?hJ~> q(i4Xs4K[#s(::I#oWdD)Da/f!!!5t1B7XU!!*EZoeQ[g!!!r01B7XU!!*EZq_Na~> q90&os7O_5s4QGV$"j5 q.9h`s5J"bs,>uM#u*339kJ!31G_&cAcOjf1BBRGok";#1G_btAcOjf1BBRGqdt?~> qD/CBkOMb3B)h$Zj>-rX!!!33#6"T&)Yc)j/cYkUrYbkI!!"8:1BSNq!#kMd""jQR#6#MC$ig8P q_Na~> qTK5kq#&^eg&LinjNId?!!!ol)ZB^:BDB[Q\,ZLIrau qIU"PmIc*DN;r9ajCSQi1G_$U3W:f7:&&<&@5B]"r_3JZ1G`))Acka`1JROS"( qD/2Zs,?q5!h')'j>-cSqZ$X()YZ#i'EA+Or\FX$!!!5r1BSNq!#kMd!u(_8)ZDMp,6.]Jq_Na~> qTK$-s5O%%!p9OOjNIU:qZ$X-BD9UP;#gT/rlbJ&!!!r1bQDJX!,(uK"&T$uBE$*WMZ<_qqojQ~> qITfKs/H!0!jhpQjCSBdq_J77:%r6%7l)qqral751G_&aAcka`1JROS"%P.':&\`,<\lNlqdt?~> q_J:=R>h&"s-WjPjYHl]r#,S\0(q(',8qIQr\FO,rYkGc"!\^&,P qof,fk2Q<_s5j=-jid^_r+?%g\G",KMe?\4rlbAPrb(oJ",gf)MtP9rMe?\4rlbAPrb),PJ,~> qdonKZ`3k7s0D]Ej^nKnr(R2m@J4:8<_Z:sral.=r_<&t"'/,j M)0Y~> M9LJ~> M.V8~> M)0Y~> M9LJ~> M.V8~> M)0Y~> M9LJ~> M.V8~> M)0Y~> M9LJ~> M.V8~> M)0Y~> M9LJ~> M.V8~> %%EndData showpage %%Trailer end %%EOF yaz-4.2.30/doc/common/Makefile.in0000644000175000017500000003172311741237726013446 00000000000000# Makefile.in generated by automake 1.11.3 from Makefile.am. # @configure_input@ # Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, # 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011 Free Software # Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ VPATH = @srcdir@ pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ subdir = doc/common DIST_COMMON = README $(srcdir)/Makefile.am $(srcdir)/Makefile.in \ $(srcdir)/print.dsl.in ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/m4/ac_check_icu.m4 \ $(top_srcdir)/m4/acx_pthread.m4 $(top_srcdir)/m4/libtool.m4 \ $(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \ $(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \ $(top_srcdir)/m4/yaz.m4 $(top_srcdir)/m4/yaz_libxml2.m4 \ $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/include/config.h CONFIG_CLEAN_FILES = print.dsl CONFIG_CLEAN_VPATH_FILES = SOURCES = DIST_SOURCES = am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; am__vpath_adj = case $$p in \ $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \ *) f=$$p;; \ esac; am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`; am__install_max = 40 am__nobase_strip_setup = \ srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'` am__nobase_strip = \ for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||" am__nobase_list = $(am__nobase_strip_setup); \ for p in $$list; do echo "$$p $$p"; done | \ sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \ $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \ if (++n[$$2] == $(am__install_max)) \ { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \ END { for (dir in files) print dir, files[dir] }' am__base_list = \ sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \ sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g' am__uninstall_files_from_dir = { \ test -z "$$files" \ || { test ! -d "$$dir" && test ! -f "$$dir" && test ! -r "$$dir"; } \ || { echo " ( cd '$$dir' && rm -f" $$files ")"; \ $(am__cd) "$$dir" && rm -f $$files; }; \ } am__installdirs = "$(DESTDIR)$(commondir)" DATA = $(common_DATA) DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ AMTAR = @AMTAR@ AR = @AR@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CYGPATH_W = @CYGPATH_W@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DLLTOOL = @DLLTOOL@ DSSSL_DIR = @DSSSL_DIR@ DSYMUTIL = @DSYMUTIL@ DTD_DIR = @DTD_DIR@ DUMPBIN = @DUMPBIN@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ FGREP = @FGREP@ GREP = @GREP@ HTML_COMPILE = @HTML_COMPILE@ ICU_CFLAGS = @ICU_CFLAGS@ ICU_CONFIG = @ICU_CONFIG@ ICU_CPPFLAGS = @ICU_CPPFLAGS@ ICU_CXXFLAGS = @ICU_CXXFLAGS@ ICU_LIBS = @ICU_LIBS@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ LD = @LD@ LDFLAGS = @LDFLAGS@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ LIPO = @LIPO@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ MAKEINFO = @MAKEINFO@ MANIFEST_TOOL = @MANIFEST_TOOL@ MAN_COMPILE = @MAN_COMPILE@ MKDIR_P = @MKDIR_P@ NM = @NM@ NMEDIT = @NMEDIT@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ OTOOL = @OTOOL@ OTOOL64 = @OTOOL64@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ PDF_COMPILE = @PDF_COMPILE@ PTHREAD_CC = @PTHREAD_CC@ PTHREAD_CFLAGS = @PTHREAD_CFLAGS@ PTHREAD_LIBS = @PTHREAD_LIBS@ RANLIB = @RANLIB@ READLINE_LIBS = @READLINE_LIBS@ SED = @SED@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ SSL_CFLAGS = @SSL_CFLAGS@ SSL_LIBS = @SSL_LIBS@ STRIP = @STRIP@ TCLSH = @TCLSH@ TCPD_LIBS = @TCPD_LIBS@ TKL_COMPILE = @TKL_COMPILE@ VERSION = @VERSION@ VERSION_HEX = @VERSION_HEX@ VERSION_SHA1 = @VERSION_SHA1@ WIN_FILEVERSION = @WIN_FILEVERSION@ XML2_CFLAGS = @XML2_CFLAGS@ XSLTPROC_COMPILE = @XSLTPROC_COMPILE@ XSL_DIR = @XSL_DIR@ YACC = @YACC@ YAZ_CONFIG_CFLAGS = @YAZ_CONFIG_CFLAGS@ YAZ_CONF_CFLAGS = @YAZ_CONF_CFLAGS@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_ct_AR = @ac_ct_AR@ ac_ct_CC = @ac_ct_CC@ ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ acx_pthread_config = @acx_pthread_config@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ pkgconfigpath = @pkgconfigpath@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ commondir = $(datadir)/doc/$(PACKAGE)$(PACKAGE_SUFFIX)/common common_DATA = style1.css id.png SUPPORTFILES = \ xml.dcl \ common.ent \ id.eps \ ref2dbinc.xsl \ stripref.xsl \ print.dsl.in \ id.htmlhelp.xsl \ id.man.xsl \ id.tkl.xsl EXTRA_DIST = $(SUPPORTFILES) $(common_DATA) README all: all-am .SUFFIXES: $(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu doc/common/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --gnu doc/common/Makefile .PRECIOUS: Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): print.dsl: $(top_builddir)/config.status $(srcdir)/print.dsl.in cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ mostlyclean-libtool: -rm -f *.lo clean-libtool: -rm -rf .libs _libs install-commonDATA: $(common_DATA) @$(NORMAL_INSTALL) test -z "$(commondir)" || $(MKDIR_P) "$(DESTDIR)$(commondir)" @list='$(common_DATA)'; test -n "$(commondir)" || list=; \ for p in $$list; do \ if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ echo "$$d$$p"; \ done | $(am__base_list) | \ while read files; do \ echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(commondir)'"; \ $(INSTALL_DATA) $$files "$(DESTDIR)$(commondir)" || exit $$?; \ done uninstall-commonDATA: @$(NORMAL_UNINSTALL) @list='$(common_DATA)'; test -n "$(commondir)" || list=; \ files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \ dir='$(DESTDIR)$(commondir)'; $(am__uninstall_files_from_dir) tags: TAGS TAGS: ctags: CTAGS CTAGS: distdir: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done check-am: all-am check: check-am all-am: Makefile $(DATA) installdirs: for dir in "$(DESTDIR)$(commondir)"; do \ test -z "$$dir" || $(MKDIR_P) "$$dir"; \ done install: install-am install-exec: install-exec-am install-data: install-data-am uninstall: uninstall-am install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-am install-strip: if test -z '$(STRIP)'; then \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ install; \ else \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ fi mostlyclean-generic: clean-generic: distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." clean: clean-am clean-am: clean-generic clean-libtool mostlyclean-am distclean: distclean-am -rm -f Makefile distclean-am: clean-am distclean-generic dvi: dvi-am dvi-am: html: html-am html-am: info: info-am info-am: install-data-am: install-commonDATA install-dvi: install-dvi-am install-dvi-am: install-exec-am: install-html: install-html-am install-html-am: install-info: install-info-am install-info-am: install-man: install-pdf: install-pdf-am install-pdf-am: install-ps: install-ps-am install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-am -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-am mostlyclean-am: mostlyclean-generic mostlyclean-libtool pdf: pdf-am pdf-am: ps: ps-am ps-am: uninstall-am: uninstall-commonDATA .MAKE: install-am install-strip .PHONY: all all-am check check-am clean clean-generic clean-libtool \ distclean distclean-generic distclean-libtool distdir dvi \ dvi-am html html-am info info-am install install-am \ install-commonDATA install-data install-data-am install-dvi \ install-dvi-am install-exec install-exec-am install-html \ install-html-am install-info install-info-am install-man \ install-pdf install-pdf-am install-ps install-ps-am \ install-strip installcheck installcheck-am installdirs \ maintainer-clean maintainer-clean-generic mostlyclean \ mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \ uninstall uninstall-am uninstall-commonDATA # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: yaz-4.2.30/doc/common/common.ent0000644000175000017500000002636711733047146013405 00000000000000 Anders Sønderberg"> Adam Dickmeiss"> Heikki Levanto"> Marc Cromme"> Mike Taylor"> Sebastian Hammer"> Index Data ApS"> Metaproxy"> YAZ"> YazPP"> Yazproxy"> Zebra"> Zebra 1.3"> Zebra 2.0"> ANSI"> API"> APT"> BIB-1"> CQL"> DOM"> Explain"> EXSLT"> GET"> GRS-1"> IDXPATH"> MARC"> MARCXML"> MARC21"> OAI"> PHP"> POST"> PQF"> PQN"> REST"> RPN"> SGML"> SOAP"> SRU"> SRW"> SUTRS"> USMARC"> XML"> XPATH"> XSLT"> Z39.50"> ZOOM"> ZeeReX"> ZOOM.NET"> yaz-4.2.30/doc/common/README0000644000175000017500000000012211654451761012246 00000000000000This directory contains various common files for our Docbook based documentation. yaz-4.2.30/doc/common/print.dsl.in0000644000175000017500000000107211654451761013640 00000000000000 ]> (define preferred-mediaobject-notations (list "PDF" "JPG" "JPEG" "PNG" "linespecific")) (define preferred-mediaobject-extensions (list "pdf" "jpg" "jpeg" "png")) yaz-4.2.30/doc/comstack.xml0000644000175000017500000005071411733047144012432 00000000000000 The COMSTACK Module Synopsis (blocking mode) Introduction The &comstack; subsystem provides a transparent interface to different types of transport stacks for the exchange of BER-encoded data and HTTP packets. At present, the RFC1729 method (BER over TCP/IP), local UNIX socket and an experimental SSL stack are supported, but others may be added in time. The philosophy of the module is to provide a simple interface by hiding unused options and facilities of the underlying libraries. This is always done at the risk of losing generality, and it may prove that the interface will need extension later on. There hasn't been interest in the XTImOSI stack for some years. Therefore, it is no longer supported. The interface is implemented in such a fashion that only the sub-layers constructed to the transport methods that you wish to use in your application are linked in. You will note that even though simplicity was a goal in the design, the interface is still orders of magnitudes more complex than the transport systems found in many other packages. One reason is that the interface needs to support the somewhat different requirements of the different lower-layer communications stacks; another important reason is that the interface seeks to provide a more or less industrial-strength approach to asynchronous event-handling. When no function is allowed to block, things get more complex - particularly on the server side. We urge you to have a look at the demonstration client and server provided with the package. They are meant to be easily readable and instructive, while still being at least moderately useful. Common Functions Managing Endpoints COMSTACK cs_create(CS_TYPE type, int blocking, int protocol); Creates an instance of the protocol stack - a communications endpoint. The type parameter determines the mode of communication. At present the following values are supported: tcpip_type TCP/IP (BER over TCP/IP or HTTP over TCP/IP) ssl_type Secure Socket Layer (SSL). This COMSTACK is experimental and is not fully implemented. If HTTP is used, this effectively is HTTPS. unix_type Unix socket (unix only). Local Transfer via file socket. See unix 7. The cs_create function returns a null-pointer if a system error occurs. The blocking parameter should be one if you wish the association to operate in blocking mode, zero otherwise. The protocol field should be PROTO_Z3950 or PROTO_HTTP. Protocol PROTO_SR is no longer supported. void cs_close(COMSTACK handle); Closes the connection (as elegantly as the lower layers will permit), and releases the resources pointed to by the handle parameter. The handle should not be referenced again after this call. We really need a soft disconnect, don't we? Data Exchange int cs_put(COMSTACK handle, char *buf, int len); Sends buf down the wire. In blocking mode, this function will return only when a full buffer has been written, or an error has occurred. In nonblocking mode, it's possible that the function will be unable to send the full buffer at once, which will be indicated by a return value of 1. The function will keep track of the number of octets already written; you should call it repeatedly with the same values of buf and len, until the buffer has been transmitted. When a full buffer has been sent, the function will return 0 for success. -1 indicates an error condition (see below). int cs_get(COMSTACK handle, char **buf, int *size); Receives a PDU or HTTP Response from the peer. Returns the number of bytes read. In nonblocking mode, it is possible that not all of the packet can be read at once. In this case, the function returns 1. To simplify the interface, the function is responsible for managing the size of the buffer. It will be reallocated if necessary to contain large packages, and will sometimes be moved around internally by the subsystem when partial packages are read. Before calling cs_get for the fist time, the buffer can be initialized to the null pointer, and the length should also be set to 0 - cs_get will perform a malloc(2) on the buffer for you. When a full buffer has been read, the size of the package is returned (which will always be greater than 1). -1 indicates an error condition. See also the cs_more() function below. int cs_more(COMSTACK handle); The cs_more() function should be used in conjunction with cs_get and select(2). The cs_get() function will sometimes (notably in the TCP/IP mode) read more than a single protocol package off the network. When this happens, the extra package is stored by the subsystem. After calling cs_get(), and before waiting for more input, You should always call cs_more() to check if there's a full protocol package already read. If cs_more() returns 1, cs_get() can be used to immediately fetch the new package. For the mOSI subsystem, the function should always return 0, but if you want your stuff to be protocol independent, you should use it. The cs_more() function is required because the RFC1729-method does not provide a way of separating individual PDUs, short of partially decoding the BER. Some other implementations will carefully nibble at the packet by calling read(2) several times. This was felt to be too inefficient (or at least clumsy) - hence the call for this extra function. int cs_look(COMSTACK handle); This function is useful when you're operating in nonblocking mode. Call it when select(2) tells you there's something happening on the line. It returns one of the following values: CS_NONE No event is pending. The data found on the line was not a complete package. CS_CONNECT A response to your connect request has been received. Call cs_rcvconnect to process the event and to finalize the connection establishment. CS_DISCON The other side has closed the connection (or maybe sent a disconnect request - but do we care? Maybe later). Call cs_close to close your end of the association as well. CS_LISTEN A connect request has been received. Call cs_listen to process the event. CS_DATA There's data to be found on the line. Call cs_get to get it. You should be aware that even if cs_look() tells you that there's an event event pending, the corresponding function may still return and tell you there was nothing to be found. This means that only part of a package was available for reading. The same event will show up again, when more data has arrived. int cs_fileno(COMSTACK h); Returns the file descriptor of the association. Use this when file-level operations on the endpoint are required (select(2) operations, specifically). Client Side int cs_connect(COMSTACK handle, void *address); Initiate a connection with the target at address (more on addresses below). The function will return 0 on success, and 1 if the operation does not complete immediately (this will only happen on a nonblocking endpoint). In this case, use cs_rcvconnect to complete the operation, when select(2) or poll(2) reports input pending on the association. int cs_rcvconnect(COMSTACK handle); Complete a connect operation initiated by cs_connect(). It will return 0 on success; 1 if the operation has not yet completed (in this case, call the function again later); -1 if an error has occurred. Server Side To establish a server under the inetd server, you can use COMSTACK cs_createbysocket(int socket, CS_TYPE type, int blocking, int protocol); The socket parameter is an established socket (when your application is invoked from inetd, the socket will typically be 0. The following parameters are identical to the ones for cs_create. int cs_bind(COMSTACK handle, void *address, int mode) Binds a local address to the endpoint. Read about addresses below. The mode parameter should be either CS_CLIENT or CS_SERVER. int cs_listen(COMSTACK handle, char *addr, int *addrlen); Call this to process incoming events on an endpoint that has been bound in listening mode. It will return 0 to indicate that the connect request has been received, 1 to signal a partial reception, and -1 to indicate an error condition. COMSTACK cs_accept(COMSTACK handle); This finalizes the server-side association establishment, after cs_listen has completed successfully. It returns a new connection endpoint, which represents the new association. The application will typically wish to fork off a process to handle the association at this point, and continue listen for new connections on the old handle. You can use the call const char *cs_addrstr(COMSTACK); on an established connection to retrieve the host-name of the remote host. You may need to use this function with some care if your name server service is slow or unreliable Addresses The low-level format of the addresses are different depending on the mode of communication you have chosen. A function is provided by each of the lower layers to map a user-friendly string-form address to the binary form required by the lower layers. void *cs_straddr(COMSTACK handle, const char *str); The format for TCP/IP and SSL addresses is: <host> [ ':' <portnum> ] The hostname can be either a domain name or an IP address. The port number, if omitted, defaults to 210. For TCP/IP and SSL transport modes, the special hostname "@" is mapped to any local address (the manifest constant INADDR_ANY). It is used to establish local listening endpoints in the server role. For UNIX sockets, the format of an address is the socket filename. When a connection has been established, you can use const char *cs_addrstr(COMSTACK h); to retrieve the host name of the peer system. The function returns a pointer to a static area, which is overwritten on the next call to the function. A fairly recent addition to the &comstack; module is the utility function COMSTACK cs_create_host (const char *str, int blocking, void **vp); which is just a wrapper for cs_create and cs_straddr. The str is similar to that described for cs_straddr but with a prefix denoting the &comstack; type. Prefixes supported are tcp:, unix: and ssl: for TCP/IP, UNIX and SSL respectively. If no prefix is given, then TCP/IP is used. The blocking is passed to function cs_create. The third parameter vp is a pointer to &comstack; stack type specific values. For SSL (ssl_type) vp is an already create OpenSSL CTX. For TCP/IP and UNIX vp is unused (can be set to NULL. SSL void *cs_get_ssl(COMSTACK cs); Returns the SSL handle, SSL * for comstack. If comstack is not of type SSL, NULL is returned. int cs_set_ssl_ctx(COMSTACK cs, void *ctx); Sets SSL context for comstack. The parameter is expected to be of type SSL_CTX *. This function should be called just after comstack has been created (before connect, bind, etc). This function returns 1 for success; 0 for failure. int cs_set_ssl_certificate_file(COMSTACK cs, const char *fname); Sets SSL certificate for comstack as a PEM file. This function returns 1 for success; 0 for failure. int cs_get_ssl_peer_certificate_x509(COMSTACK cs, char **buf, int *len); This function returns the peer certificate. If successful, *buf and *len holds X509 buffer and length respectively. Buffer should be freed with xfree. This function returns 1 for success; 0 for failure. Diagnostics All functions return -1 if an error occurs. Typically, the functions will return 0 on success, but the data exchange functions (cs_get, cs_put, cs_more) follow special rules. Consult their descriptions. The error code for the COMSTACK can be retrieved using C macro cs_errno which will return one of the error codes CSYSERR, CSOUTSTATE, CSNODATA, ... int cs_errno(COMSTACK handle); You can the textual representation of the error code by using cs_errmsg - which works like strerror(3) const char *cs_errmsg(int n); It is also possible to get straight to the textual represenataion without the error code by using cs_strerror. const char *cs_strerror(COMSTACK h); Summary and Synopsis #include /* this is for TCP/IP and SSL support */ #include /* this is for UNIX socket support */ COMSTACK cs_create(CS_TYPE type, int blocking, int protocol); COMSTACK cs_createbysocket(int s, CS_TYPE type, int blocking, int protocol); COMSTACK cs_create_host(const char *str, int blocking, void **vp); int cs_bind(COMSTACK handle, int mode); int cs_connect(COMSTACK handle, void *address); int cs_rcvconnect(COMSTACK handle); int cs_listen(COMSTACK handle); COMSTACK cs_accept(COMSTACK handle); int cs_put(COMSTACK handle, char *buf, int len); int cs_get(COMSTACK handle, char **buf, int *size); int cs_more(COMSTACK handle); void cs_close(COMSTACK handle); int cs_look(COMSTACK handle); void *cs_straddr(COMSTACK handle, const char *str); const char *cs_addrstr(COMSTACK h); ]]> yaz-4.2.30/doc/zoom.facets.html0000644000175000017500000001156311741237744013227 000000000000005. Facets

5. Facets

Facets operations is not part of the official ZOOM specification, but is an Index Data extension for YAZ-based Z39.50 targets or SOLR targets. In case the target can and is requested to return facets, using a result set the ZOOM client can request one or all facet fields. Using a facet field the client can request the term count and then interate over the terms.

    ZOOM_facet_field *ZOOM_resultset_facets(ZOOM_resultset r);
    const char ** ZOOM_resultset_facets_names(ZOOM_resultset r);
    ZOOM_facet_field ZOOM_resultset_get_facet_field(ZOOM_resultset r, const char *facet_name);
    ZOOM_facet_field ZOOM_resultset_get_facet_field_by_index(ZOOM_resultset r, int pos);
    size_t ZOOM_resultset_facets_size(ZOOM_resultset r);

    const char *ZOOM_facet_field_name(ZOOM_facet_field facet_field);
    size_t ZOOM_facet_field_term_count(ZOOM_facet_field facet_field);
    const char *ZOOM_facet_field_get_term(ZOOM_facet_field facet_field, size_t idx, int *freq);
   

References to temporary structures are returned by all functions. They are only valid as long the Result set is valid. ZOOM_resultset_get_facet_field or ZOOM_resultset_get_facet_field_by_index. ZOOM_resultset_facets. ZOOM_resultset_facets_names. ZOOM_facet_field_name. ZOOM_facet_field_get_term.

A single Facet field is returned by function ZOOM_resultset_get_facet_field or ZOOM_resultset_get_facet_field_by_index that takes a result set and facet name or positive index respectively. First facet has position zero. If no facet could be obtained (invalid name or index out of bounds) NULL is returned.

An array of facets field can be returned by ZOOM_resultset_facets. The length of the array is given by ZOOM_resultset_facets_size. The array is zero-based and last entry will be at ZOOM_resultset_facets_size(result_set)-1.

It is possible to interate over facets by name, by calling ZOOM_resultset_facets_names. This will return an const array of char * where each string can be used as parameter for ZOOM_resultset_get_facet_field.

Function ZOOM_facet_field_name gets the request facet name from a returned facet field.

Function ZOOM_facet_field_get_term returns the idx'th term and term count for a facet field. Idx must between 0 and ZOOM_facet_field_term_count-1, otherwise the returned reference will be NULL. On a valid idx, the value of the freq reference will be the term count. The *freq parameter must be valid pointer to integer.

yaz-4.2.30/doc/yaz-url.10000644000175000017500000000502011741237741011562 00000000000000'\" t .\" Title: yaz-url .\" Author: Index Data .\" Generator: DocBook XSL Stylesheets v1.76.1 .\" Date: 04/11/2012 .\" Manual: Commands .\" Source: YAZ 4.2.30 .\" Language: English .\" .TH "YAZ\-URL" "1" "04/11/2012" "YAZ 4.2.30" "Commands" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" yaz-url \- YAZ URL fetch utility .SH "SYNOPSIS" .HP \w'\fByaz\-url\fR\ 'u \fByaz\-url\fR [\-H\ \fIname:value\fR] [\-m\ \fImethod\fR] [\-O\ \fIfname\fR] [\-p\ \fIfname\fR] [\-u\ \fIuser/password\fR] [\-x\ \fIproxy\fR] [url...] .SH "DESCRIPTION" .PP \fByaz\-url\fR is utility to get web content\&. It is very limited in functionality compared to programs such as curl, wget\&. .PP The options must be precede the URL given on the command line to take effect\&. .PP Fetched HTTP content is written to stdout, unless option \-O is given\&. .SH "OPTIONS" .PP \-H \fIname:value\fR .RS 4 Specifies HTTP header content with name and value\&. This option can be given multiple times (for different names, of course)\&. .RE .PP \-m \fImethod\fR .RS 4 Specifies the HTTP method to be used for the next URL\&. Default is method "GET"\&. However, option \-p sets it to "POST"\&. .RE .PP \-O \fIfname\fR .RS 4 Sets output filename for HTTP content\&. .RE .PP \-p \fIfname\fR .RS 4 Sets a file to be POSTed in the folloing URL\&. .RE .PP \-u \fIuser/password\fR .RS 4 Specifies a user and a password to be uesd in HTTP basic authentication in the following URL fetch\&. The user and password must be separated by a slash (this it is not possible to specify a user with a slash in it)\&. .RE .PP \-x \fIproxy\fR .RS 4 Specifies a proxy to be used for URL fetch\&. .RE .SH "SEE ALSO" .PP \fByaz\fR(7) yaz-4.2.30/doc/zoomsh-man.xml0000644000175000017500000001244711733047144012717 00000000000000 %local; %entities; %idcommon; ]> YAZ &version; Index Data zoomsh 1 Commands zoomsh ZOOM shell zoomsh commands DESCRIPTION zoomsh is a ZOOM client with a simple command line interface. The client demonstrates the ZOOM API and is useful for testing targets. You may pass one or more commands to zoomsh. These commands are invoked first. OPTIONS -e Makes zoomsh stop processing commands as soon as an error occur. The exit code of zoomsh is 1 if error occurs; 0 otherwise. -v loglevel Sets YAZ log level. EXAMPLES If you start the yaz-ztest in one console you can use the ZOOM shell as follows: connect localhost:9999 ZOOM>search computer localhost:9999: 7 hits ZOOM>show 0 1 1 Default USmarc 001 11224466 003 DLC 005 00000000000000.0 008 910710c19910701nju 00010 eng 010 $a 11224466 040 $a DLC $c DLC 050 00 $a 123-xyz 100 10 $a Jack Collins 245 10 $a How to program a computer 260 1 $a Penguin 263 $a 8710 300 $a p. cm. ZOOM>quit ]]> You can also achieve the same result by passing the commands as arguments on a single command line: $ zoomsh "connect localhost:9999" "search computer" "show 0 1" quit COMMANDS connect zurl Connects to the target given by zurl. close [zurl] Closes connection to target given by zurl or all targets if zurl was omitted. show [start [count]] Displays count records starting at offset given by start. First records has offset 0 (unlike the Z39.50 protocol). quit Quits zoomsh. set name [value] Sets option name to value. get name Prints value of option name. help Prints list of available commands. SEE ALSO yaz 7 , yaz-ztest 8 , Section "Building clients with ZOOM" in the YAZ manual. ZOOM home page. yaz-4.2.30/doc/yaz-url-man.xml0000644000175000017500000000707011733047144012777 00000000000000 %local; %entities; %idcommon; ]> YAZ &version; Index Data yaz-url 1 Commands yaz-url YAZ URL fetch utility yaz-url -H name:value -m method -O fname -p fname -u user/password -x proxy url DESCRIPTION yaz-url is utility to get web content. It is very limited in functionality compared to programs such as curl, wget. The options must be precede the URL given on the command line to take effect. Fetched HTTP content is written to stdout, unless option -O is given. OPTIONS -H name:value Specifies HTTP header content with name and value. This option can be given multiple times (for different names, of course). -m method Specifies the HTTP method to be used for the next URL. Default is method "GET". However, option -p sets it to "POST". -O fname Sets output filename for HTTP content. -p fname Sets a file to be POSTed in the folloing URL. -u user/password Specifies a user and a password to be uesd in HTTP basic authentication in the following URL fetch. The user and password must be separated by a slash (this it is not possible to specify a user with a slash in it). -x proxy Specifies a proxy to be used for URL fetch. SEE ALSO yaz 7 yaz-4.2.30/doc/soap.srw.html0000644000175000017500000001125211741237744012546 000000000000004. SRU

4. SRU

SRU SOAP is just one implementation of a SOAP handler as described in the previous section. The encoder/decoder handler for SRU is defined as follows:

#include <yaz/srw.h>

int yaz_srw_codec(ODR o, void * pptr,
                  Z_SRW_GDU **handler_data,
                  void *client_data, const char *ns);
      

Here, Z_SRW_GDU is either searchRetrieveRequest or a searchRetrieveResponse.

Note

The xQuery and xSortKeys are not handled yet by the SRW implementation of YAZ. Explain is also missing. Future versions of YAZ will include these features.

The definition of searchRetrieveRequest is:

typedef struct {

#define Z_SRW_query_type_cql  1
#define Z_SRW_query_type_xcql 2
#define Z_SRW_query_type_pqf  3
    int query_type;
    union {
        char *cql;
        char *xcql;
        char *pqf;
    } query;

#define Z_SRW_sort_type_none 1
#define Z_SRW_sort_type_sort 2
#define Z_SRW_sort_type_xSort 3
    int sort_type;
    union {
        char *none;
        char *sortKeys;
        char *xSortKeys;
    } sort;
    int  *startRecord;
    int  *maximumRecords;
    char *recordSchema;
    char *recordPacking;
    char *database;
} Z_SRW_searchRetrieveRequest;
      

Please observe that data of type xsd:string is represented as a char pointer (char *). A null pointer means that the element is absent. Data of type xsd:integer is representd as a pointer to an int (int *). Again, a null pointer us used for absent elements.

The SearchRetrieveResponse has the following definition.

typedef struct {
    int * numberOfRecords;
    char * resultSetId;
    int * resultSetIdleTime;
    
    Z_SRW_record *records;
    int num_records;

    Z_SRW_diagnostic *diagnostics;
    int num_diagnostics;
    int *nextRecordPosition;
} Z_SRW_searchRetrieveResponse;
      

The num_records and num_diagnostics is number of returned records and diagnostics respectively and also correspond to the "size of" arrays records and diagnostics.

A retrieval record is defined as follows:

typedef struct {
    char *recordSchema;
    char *recordData_buf;
    int recordData_len;
    int *recordPosition;
} Z_SRW_record;
      

The record data is defined as a buffer of some length so that data can be of any type. SRW 1.0 currenly doesn't allow for this (only XML), but future versions might do.

And, a diagnostic as:

typedef struct {
    int  *code;
    char *details;
} Z_SRW_diagnostic;
      

yaz-4.2.30/doc/introduction.api.html0000644000175000017500000002172211741237744014266 000000000000002. The API

2. The API

The YAZ toolkit offers several different levels of access to the ISO23950/Z39.50, ILL and SRU protocols. The level that you need to use depends on your requirements, and the role (server or client) that you want to implement. If you're developing a client application you should consider the ZOOM API. It is, by far, the easiest way to develop clients in C. Server implementers should consider the generic frontend server. None of those high-level APIs support the whole protocol, but they do include most facilities used in existing Z39.50 applications.

If you're using 'exotic' functionality (meaning anything not included in the high-level APIs), developing non-standard extensions to Z39.50 or you're going to develop an ILL application you'll have to learn the lower level APIs of YAZ.

The YAZ toolkit modules is shown in figure Figure 1.1, “YAZ layers”.

Figure 1.1. YAZ layers

YAZ layers

There are four layers.

  • A client or server application (or both). This layer includes ZOOM and the generic frontend server.

  • The second layer provides a C represenation of the protocol units (packages) for Z39.50 ASN.1, ILL ASN.1, SRU.

  • The third layer encodes and decodes protocol data units to simple packages (buffer with certain length). The ODR module encodes and decodes BER whereas the HTTP modules encodes and decodes HTTP ruquests/responses.

  • The lowest layer is COMSTACK which exchanges the encoded packages with a peer process over a network.

The Z39.50 ASN.1 module represents the ASN.1 definition of the Z39.50 protocol. It establishes a set of type and structure definitions, with one structure for each of the top-level PDUs, and one structure or type for each of the contained ASN.1 types. For primitive types, or other types that are defined by the ASN.1 standard itself (such as the EXTERNAL type), the C representation is provided by the ODR (Open Data Representation) subsystem.

ODR is a basic mechanism for representing an ASN.1 type in the C programming language, and for implementing BER encoders and decoders for values of that type. The types defined in the Z39.50 ASN.1 module generally have the prefix Z_, and a suffix corresponding to the name of the type in the ASN.1 specification of the protocol (generally Z39.50-1995). In the case of base types (those originating in the ASN.1 standard itself), the prefix Odr_ is sometimes seen. Either way, look for the actual definition in either z-core.h (for the types from the protocol), odr.h (for the primitive ASN.1 types). The Z39.50 ASN.1 library also provides functions (which are, in turn, defined using ODR primitives) for encoding and decoding data values. Their general form is

int z_xxx(o,  
 p,  
 optional,  
 name); 
ODR o;
Z_xxx **p;
int optional;
const char *name;
 

(note the lower-case "z" in the function name)

Note

If you are using the premade definitions of the Z39.50 ASN.1 module, and you are not adding new protocol of your own, the only parts of ODR that you need to worry about are documented in Section 2, “Using ODR”.

When you have created a BER-encoded buffer, you can use the COMSTACK subsystem to transmit (or receive) data over the network. The COMSTACK module provides simple functions for establishing a connection (passively or actively, depending on the role of your application), and for exchanging BER-encoded PDUs over that connection. When you create a connection endpoint, you need to specify what transport to use (TCP/IP, SSL or UNIX sockets). For the remainder of the connection's lifetime, you don't have to worry about the underlying transport protocol at all - the COMSTACK will ensure that the correct mechanism is used.

We call the combined interfaces to ODR, Z39.50 ASN.1, and COMSTACK the service level API. It's the API that most closely models the Z39.50 service/protocol definition, and it provides unlimited access to all fields and facilities of the protocol definitions.

The reason that the YAZ service-level API is a conglomerate of the APIs from three different submodules is twofold. First, we wanted to allow the user a choice of different options for each major task. For instance, if you don't like the protocol API provided by ODR/Z39.50 ASN.1, you can use SNACC or BERUtils instead, and still have the benefits of the transparent transport approach of the COMSTACK module. Secondly, we realize that you may have to fit the toolkit into an existing event-processing structure, in a way that is incompatible with the COMSTACK interface or some other part of YAZ.

yaz-4.2.30/doc/yaz-ztest-man.xml0000644000175000017500000001164211733047144013346 00000000000000 %local; %entities; %idcommon; ]> YAZ &version; Index Data yaz-ztest 8 System management commands yaz-ztest Z39.50/SRU Test Server &gfs-synopsis; DESCRIPTION yaz-ztest is a Z39.50/SRU test server that uses the YAZ generic frontend server (GFS) API. The server acts as a real Z39.50/SRU server but does not use a database. It returns a random hit count and returns a subset of a few built-in records. The listener-spec consists of a transport mode followed by a colon, followed by a listener address. The transport mode is either tcp, unix, or ssl. For TCP and SSL, an address has the form: hostname | IP-number [ : portnumber ] For UNIX local socket the address is the filename of the local socket. OPTIONS &gfs-options; TESTING yaz-ztest normally returns a random hit count between 0 and 24. However, if a query term includes leading digits, then the integer value of that term is used as hit count. This allows testers to return any number of hits. yaz-ztest includes 24 MARC records for testing. Hit counts exceeding 24 will make yaz-ztest return the same record batch over and over.. So record at position 1, 25, 49, etc .. are equivalent. The following databases are honored by yaz-ztest: Default, slow and db.* (all databases with prefix "db"). Any other database will make yaz-ztest return diagnostic 109: "Database unavailable". Options for search may be included in the form or URL get arguments included as part of the Z39.50 database name. The following database options are present: search-delay, present-delay, fetch-delay and seed. The former, delay type options, specify a fake delay (sleep) that yaz-ztest will perform when searching, presenting, fetching records respectively. The value of the delay may either be a fixed floating point value which specifies the delay in seconds. Alternatively the value may be given as two floating point numbers separated by colon, which wil make yaz-ztest perform a random sleep between the first and second number. The database parameter seed takes an integer as value. This will call srand with this integer to ensure that the random behavior can be re-played. Suppose we want searches to take between 0.1 and 0.5 seconds and a fetch to take 0.2 second. To access test database Default we'd use: Default?search-delay=0.1:0.5&fetch-delay=0.2. GFS CONFIGURATION AND VIRTUAL HOSTS &gfs-virtual; FILES yaz-<version>/ztest/yaz-ztest.c yaz-<version>/include/yaz/backend.h SEE ALSO yaz 7 yaz-log 7 yaz-4.2.30/doc/installation.win32.html0000644000175000017500000003013111741237744014431 000000000000003. WIN32

3. WIN32

The easiest way to install YAZ on Windows is by downloading an installer from here. The installer comes with source too - in case you wish to compile YAZ with different Compiler options etc.

3.1. Compiling from Source on WIN32

YAZ is shipped with "makefiles" for the NMAKE tool that comes with Microsoft Visual Studio. Version 6 and .NET has been tested. We expect that YAZ compiles with version 5 as well.

Start a command prompt and switch the sub directory WIN where the file makefile is located. Customize the installation by editing the makefile file (for example by using notepad). The following summarizes the most important settings in that file:

DEBUG

If set to 1, the software is compiled with debugging libraries (code generation is multi-threaded debug DLL). If set to 0, the software is compiled with release libraries (code generation is multi-threaded DLL).

HAVE_TCL, TCL

If HAVE_TCL is set to 1, nmake will use the ASN.1 compiler (Tcl based). You must set TCL to the full path of the Tcl interpreter.

If you do not have Tcl installed, set HAVE_TCL to 0.

HAVE_BISON, BISON

If GNU Bison is present, you might set HAVE_ICONV to 1 and specify the Bison executable in BISON. Bison is only required if you use the CVS version of YAZ or if you modify the grammar for CQL (cql.y).

A Windows version of GNU Bison is part of unxutils.

HAVE_ICONV, ICONV_DIR

If HAVE_ICONV is set to 1, YAZ is compiled with iconv support. In this configuration, set ICONV_DIR to the iconv source directory.

HAVE_LIBXML2, LIBXML2_DIR

If HAVE_LIBXML2 is set to 1, YAZ is compiled with SRU support. In this configuration, set LIBXML2_DIR to the libxml2 source directory and ZLIB_DIR to the zlib directory.

Windows versions of libxslt, libxml2, zlib and iconv can be found Igor Zlatković' site.

Note

YAZ is not using zlib but libxml2 is depending on it.

HAVE_LIBXSLT, LIBXSLT_DIR

If HAVE_LIBXSLT is set to 1, YAZ is compiled with XSLT support. In this configuration, set LIBXSLT_DIR to the libxslt source directory.

Note

libxslt depends libxml2.

HAVE_ICU, ICU_DIR

If HAVE_ICU is set to 1, YAZ is compiled with ICU support. In this configuration, set ICU_DIR to the ICU source directory.

When satisfied with the settings in the makefile, type

      nmake
     

Note

If the nmake command is not found on your system you probably haven't defined the environment variables required to use that tool. To fix that, find and run the batch file vcvars32.bat. You need to run it from within the command prompt or set the environment variables "globally"; otherwise it doesn't work.

If you wish to recompile YAZ - for example if you modify settings in the makefile you can delete object files, etc by running.

      nmake clean
     

The following files are generated upon successful compilation:

bin/yaz4.dll / bin/yaz4d.dll

YAZ Release/Debug DLL.

lib/yaz4.lib / lib/yaz4d.lib

Import library for yaz4.dll / yaz4d.dll.

bin/yaz_cond4.dll / bin/yaz_cond4d.dll

Release/Debug DLL for condition variable utilities (condvar.c).

lib/yaz_cond4.lib / lib/yaz_cond4d.lib

Import library for yaz_cond4.dll / yaz_cond4d.dll.

bin/yaz_icu4.dll / bin/yaz_icu4d.dll

Release/Debug DLL for the ICU wrapper utility. Only build if HAVE_ICU is 1.

lib/yaz_icu4.lib / lib/yaz_icu4d.lib

Import library for yaz_icu4.dll / yaz_icu4d.dll.

bin/yaz-ztest.exe

Z39.50 multi-threaded test/example server. It's a WIN32 console application.

bin/yaz-client.exe

YAZ Z39.50 client application. It's a WIN32 console application. See chapter YAZ client for more information.

bin/yaz-icu.exe

This program exposes the ICU wrapper library if that is enabled for YAZ. Only if ICU is available this program is build.

bin/zoomsh.exe

Simple console application implemented on top of the ZOOM functions. The application is a command line shell that allows you to enter simple commands to perform ZOOM operations.

bin/zoomtst1.exe, bin/zoomtst2.exe, ..

Several small applications that demonstrates the ZOOM API.

3.2. How to make apps using YAZ on WIN32

This section will go though the process of linking your WIN32 applications with YAZ.

Some people are confused by the fact that we use the nmake tool to build YAZ. They think they have to do that too - in order to make their WIN32 applications work with YAZ. The good news is that you don't have to. You can use the integrated environment of Visual Studio if desired for your own application.

When setting up a project or Makefile you have to set the following:

include path

Set it to the include directory of YAZ.

import library yaz4.lib

You must link with this library. It's located in the sub directory lib of YAZ. If you want to link with the debug version of YAZ, you must link against yaz4d.lib instead.

dynamic link library yaz4.dll

This DLL must be in your execution path when you invoke your application. Specifically, you should distribute this DLL with your application.

yaz-4.2.30/doc/yaz-ztest.html0000644000175000017500000005513011741237744012747 00000000000000yaz-ztest

Name

yaz-ztest — Z39.50/SRU Test Server

Synopsis

application [-install] [-installa] [-remove] [-a file] [-v level] [-l file] [-u uid] [-c config] [-f vconfig] [-C fname] [-t minutes] [-k kilobytes] [-K] [-d daemon] [-w dir] [-p pidfile] [-r kilobytes] [-ziDST1] [listener-spec...]

DESCRIPTION

yaz-ztest is a Z39.50/SRU test server that uses the YAZ generic frontend server (GFS) API. The server acts as a real Z39.50/SRU server but does not use a database. It returns a random hit count and returns a subset of a few built-in records.

The listener-spec consists of a transport mode followed by a colon, followed by a listener address. The transport mode is either tcp, unix, or ssl.

For TCP and SSL, an address has the form:

    hostname | IP-number [ : portnumber ]
   

For UNIX local socket the address is the filename of the local socket.

OPTIONS

-a file

Specify a file for dumping PDUs (for diagnostic purposes). The special name - (dash) sends output to stderr.

-S

Don't fork or make threads on connection requests. This is good for debugging, but not recommended for real operation: Although the server is asynchronous and non-blocking, it can be nice to keep a software malfunction (okay then, a crash) from affecting all current users.

-1

Like -S but after one session the server exits. This mode is for debugging only.

-T

Operate the server in threaded mode. The server creates a thread for each connection rather than a fork a process. Only available on UNIX systems that offers POSIX threads.

-s

Use the SR protocol (obsolete).

-z

Use the Z39.50 protocol (default). This option and -s complement each other. You can use both multiple times on the same command line, between listener-specifications (see below). This way, you can set up the server to listen for connections in both protocols concurrently, on different local ports.

-l file

The logfile.

-c config

A user option that serves as a specifier for some sort of configuration, usually a filename. The argument to this option is transferred to member configname of the statserv_options_block.

-f vconfig

This specifies an XML file that describes one or more YAZ frontend virtual servers.

-C fname

Sets SSL certificate file name for server (PEM).

-v level

The log level. Use a comma-separated list of members of the set {fatal,debug,warn,log,malloc,all,none}.

-u uid

Set user ID. Sets the real UID of the server process to that of the given user. It's useful if you aren't comfortable with having the server run as root, but you need to start it as such to bind a privileged port.

-w dir

The server changes to this directory during before listening on incoming connections. This option is useful when the server is operating from the inetd daemon (see -i).

-p pidfile

Specifies that the server should write its Process ID to file given by pidfile. A typical location would be /var/run/yaz-ztest.pid.

-i

Use this to make the the server run from the inetd server (UNIX only).

-D

Use this to make the server put itself in the background and run as a daemon. If neither -i nor -D is given, the server starts in the foreground.

-install

Use this to install the server as an NT service (Windows NT/2000/XP only). Control the server by going to the Services in the Control Panel.

-installa

Use this to install and activate the server as an NT service (Windows NT/2000/XP only). Control the server by going to the Services in the Control Panel.

-remove

Use this to remove the server from the NT services (Windows NT/2000/XP only).

-t minutes

Idle session timeout, in minutes.

-k size

Maximum record size/message size, in kilobytes.

-K

Forces no-keepalive for HTTP sessions. By default GFS will keep sessions alive for HTTP 1.1 sessions (as defined by the standard). Using this option will force GFS to close the connection for each operation.

-r size

Maximum size of log file before rotation occurs, in kilobytes. Default size is 1048576 k (=1 GB).

-d daemon

Set name of daemon to be used in hosts access file. See hosts_access(5) and tcpd(8).

-m time-format

Sets the format of time-stamps in the log-file. Specify a string in the input format to strftime().

TESTING

yaz-ztest normally returns a random hit count between 0 and 24. However, if a query term includes leading digits, then the integer value of that term is used as hit count. This allows testers to return any number of hits. yaz-ztest includes 24 MARC records for testing. Hit counts exceeding 24 will make yaz-ztest return the same record batch over and over.. So record at position 1, 25, 49, etc .. are equivalent.

The following databases are honored by yaz-ztest: Default, slow and db.* (all databases with prefix "db"). Any other database will make yaz-ztest return diagnostic 109: "Database unavailable".

Options for search may be included in the form or URL get arguments included as part of the Z39.50 database name. The following database options are present: search-delay, present-delay, fetch-delay and seed.

The former, delay type options, specify a fake delay (sleep) that yaz-ztest will perform when searching, presenting, fetching records respectively. The value of the delay may either be a fixed floating point value which specifies the delay in seconds. Alternatively the value may be given as two floating point numbers separated by colon, which wil make yaz-ztest perform a random sleep between the first and second number.

The database parameter seed takes an integer as value. This will call srand with this integer to ensure that the random behavior can be re-played.

Suppose we want searches to take between 0.1 and 0.5 seconds and a fetch to take 0.2 second. To access test database Default we'd use: Default?search-delay=0.1:0.5&fetch-delay=0.2.

GFS CONFIGURATION AND VIRTUAL HOSTS

The Virtual hosts mechanism allows a YAZ frontend server to support multiple backends. A backend is selected on the basis of the TCP/IP binding (port+listening adddress) and/or the virtual host.

A backend can be configured to execute in a particular working directory. Or the YAZ frontend may perform CQL to RPN conversion, thus allowing traditional Z39.50 backends to be offered as a SRW/SRU service. SRW/SRU Explain information for a particular backend may also be specified.

For the HTTP protocol, the virtual host is specified in the Host header. For the Z39.50 protocol, the virtual host is specified as in the Initialize Request in the OtherInfo, OID 1.2.840.10003.10.1000.81.1.

Note

Not all Z39.50 clients allows the VHOST information to be set. For those the selection of the backend must rely on the TCP/IP information alone (port and address).

The YAZ frontend server uses XML to describe the backend configurations. Command-line option -f specifies filename of the XML configuration.

The configuration uses the root element yazgfs. This element includes a list of listen elements, followed by one or more server elements.

The listen describes listener (transport end point), such as TCP/IP, Unix file socket or SSL server. Content for a listener:

CDATA (required)

The CDATA for the listen element holds the listener string, such as tcp:@:210, tcp:server1:2100, etc.

attribute id (optional)

identifier for this listener. This may be referred to from server sections.

Note

We expect more information to be added for the listen section in a future version, such as CERT file for SSL servers.

The server describes a server and the parameters for this server type. Content for a server:

attribute id (optional)

Identifier for this server. Currently not used for anything, but it might be for logging purposes.

attribute listenref (optional)

Specifies listener for this server. If this attribute is not given, the server is accessible from all listener. In order for the server to be used for real, howeever, the virtual host must match (if specified in the configuration).

element config (optional)

Specifies the server configuration. This is equivalent to the config specified using command line option -c.

element directory (optional)

Specifies a working directory for this backend server. If specifid, the YAZ fronend changes current working directory to this directory whenever a backend of this type is started (backend handler bend_start), stopped (backend handler hand_stop) and initialized (bend_init).

element host (optional)

Specifies the virtual host for this server. If this is specified a client must specify this host string in order to use this backend.

element cql2rpn (optional)

Specifies a filename that includes CQL to RPN conversion for this backend server. See Section 1.3.4, “Specification of CQL to RPN mappings” If given, the backend server will only "see" a Type-1/RPN query.

element ccl2rpn (optional)

Specifies a filename that includes CCL to RPN conversion for this backend server. See Section 1.2.2, “CCL Qualifiers” If given, the backend server will only "see" a Type-1/RPN query.

element stylesheet (optional)

Specifies the stylesheet reference to be part of SRU HTTP responses when the client does not specify one. If neither this is given, nor the client specifies one, no stylesheet reference is part of the SRU HTTP response.

element docpath (optional)

Specifies a path for local file access using HTTP. All URLs with a leading prefix (/ exluded) that matches the value of docpath are used for file access. For example, if the server is to offer access in directory xsl, the docpath would be xsl and all URLs of the form http://host/exl will result in a local file access.

element explain (optional)

Specifies SRW/SRU ZeeRex content for this server. Copied verbatim to the client. As things are now, some of the Explain content seeem redundant because host information, etc. is also stored elsewhere.

element maximumrecordsize (optional)

Specifies maximum record size/message size, in bytes. This value also servers as maximum size of incoming packages (for Record Updates etc). It's the same value as that given by the -k option.

element retrievalinfo (optional)

Enables the retrieval facility supporting conversions and specifications of record formats/types. See Section 6, “Retrieval Facility” for more information.

The XML below configures a server that accepts connections from two ports, TCP/IP port 9900 and a local UNIX file socket. We name the TCP/IP server public and the other server internal.

  
 <yazgfs>
  <listen id="public">tcp:@:9900</listen>
  <listen id="internal">unix:/var/tmp/socket</listen>
  <server id="server1">
    <host>server1.mydomain</host>
    <directory>/var/www/s1</directory>
    <config>config.cfg</config>
  </server>
  <server id="server2">
    <host>server2.mydomain</host>
    <directory>/var/www/s2</directory>
    <config>config.cfg</config>
    <cql2rpn>../etc/pqf.properties</cql2rpn>
    <explain xmlns="http://explain.z3950.org/dtd/2.0/">
      <serverInfo>
        <host>server2.mydomain</host>
        <port>9900</port>
        <database>a</database>
      </serverInfo>
    </explain>
  </server>
  <server id="server3" listenref="internal">
    <directory>/var/www/s3</directory>
    <config>config.cfg</config>
  </server>
 </yazgfs>

 

There are three configured backend servers. The first two servers, "server1" and "server2", can be reached by both listener addresses - since no listenref attribute is specified. In order to distinguish between the two a virtual host has been specified for each of server in the host elements.

For "server2" elements for CQL to RPN conversion is supported and explain information has been added (a short one here to keep the example small).

The third server, "server3" can only be reached via listener "internal".

FILES

yaz-<version>/ztest/yaz-ztest.c

yaz-<version>/include/yaz/backend.h

SEE ALSO

yaz(7) yaz-log(7)

yaz-4.2.30/doc/yaz-json-parse.10000644000175000017500000000356511741237741013055 00000000000000'\" t .\" Title: yaz-json-parse .\" Author: Index Data .\" Generator: DocBook XSL Stylesheets v1.76.1 .\" Date: 04/11/2012 .\" Manual: Commands .\" Source: YAZ 4.2.30 .\" Language: English .\" .TH "YAZ\-JSON\-PARSE" "1" "04/11/2012" "YAZ 4.2.30" "Commands" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" yaz-json-parse \- YAZ JSON parser .SH "SYNOPSIS" .HP \w'\fByaz\-json\-parse\fR\ 'u \fByaz\-json\-parse\fR [\-p] .SH "DESCRIPTION" .PP \fByaz\-json\-parse\fR is utility which demonstrates the JSON API of YAZ\&. (yaz/json\&.h)\&. .PP The program attempts to parse a JSON from standard input (stdin)\&. It will return exit code 1 if parsing fails and the parsing error message will be printed to standard error (stderr)\&. The program returns exit code 0 parsing succeeds and return no output, unless \-p is given (see below)\&. .SH "OPTIONS" .PP \-p .RS 4 Makes the JSON parser echo the JSON result string to standard output \- if parsing from stdin was successful\&. .RE .SH "SEE ALSO" .PP \fByaz\fR(7) yaz-4.2.30/doc/apilayer.obj0000644000175000017500000001145211654451754012412 00000000000000%TGIF 4.1.42-QPL state(1,37,100.000,0,78,1,16,1,9,0,0,0,0,3,1,1,0,'Helvetica',0,80640,0,0,1,5,0,1,1,1,0,16,0,0,1,1,1,0,1485,1050,0,0,2880,0). % % @(#)$Header: /home/cvsroot/yaz/doc/apilayer.obj,v 1.2 2003-04-28 21:02:16 adam Exp $ % %W% % unit("1 pixel/pixel"). color_info(19,65535,0,[ "magenta", 65535, 0, 65535, 65535, 0, 65535, 1, "red", 65535, 0, 0, 65535, 0, 0, 1, "green", 0, 65535, 0, 0, 65535, 0, 1, "blue", 0, 0, 65535, 0, 0, 65535, 1, "yellow", 65535, 65535, 0, 65535, 65535, 0, 1, "pink", 65535, 49931, 50971, 65535, 49344, 52171, 1, "cyan", 0, 65535, 65535, 0, 65535, 65535, 1, "CadetBlue", 22885, 40569, 40569, 24415, 40606, 41120, 1, "white", 65535, 65535, 65535, 65535, 65535, 65535, 1, "black", 0, 0, 0, 0, 0, 0, 1, "DarkSlateGray", 10402, 19764, 18724, 12079, 20303, 20303, 1, "#00000000c000", 0, 0, 48891, 0, 0, 49152, 1, "#820782070000", 34327, 33287, 0, 33287, 33287, 0, 1, "#3cf3fbee34d2", 14563, 64494, 14563, 15603, 64494, 13522, 1, "#3cf3fbed34d3", 14563, 64494, 14563, 15603, 64493, 13523, 1, "#ffffa6990000", 65535, 42649, 0, 65535, 42649, 0, 1, "#ffff0000fffe", 65535, 0, 65535, 65535, 0, 65534, 1, "#fffe0000fffe", 65535, 0, 65535, 65534, 0, 65534, 1, "#fffe00000000", 65535, 0, 0, 65534, 0, 0, 1 ]). script_frac("0.6"). fg_bg_colors('black','white'). dont_reencode("FFDingbests:ZapfDingbats"). page(1,"",1,''). text('black',95,51,2,0,1,159,34,6,14,3,0,0,0,0,2,159,34,0,0,"",0,0,0,0,65,'',[ minilines(159,34,0,0,0,0,0,[ mini_line(159,14,3,0,0,0,[ str_block(0,159,14,3,0,-1,0,0,0,[ str_seg('black','Helvetica',0,80640,159,14,3,0,-1,0,0,0,0,0, "Client/Server Application")]) ]), mini_line(0,14,3,0,0,0,[ str_block(0,0,14,3,0,0,0,0,0,[ str_seg('black','Helvetica',0,80640,0,14,3,0,0,0,0,0,0,0, "")]) ]) ])]). text('black',190,121,2,0,1,40,34,17,14,3,0,0,0,0,2,40,34,0,0,"",0,0,0,0,135,'',[ minilines(40,34,0,0,0,0,0,[ mini_line(33,14,3,0,0,0,[ str_block(0,33,14,3,0,-1,0,0,0,[ str_seg('black','Helvetica',0,80640,33,14,3,0,-1,0,0,0,0,0, "SRW")]) ]), mini_line(40,14,3,0,0,0,[ str_block(0,40,14,3,0,-1,0,0,0,[ str_seg('black','Helvetica',0,80640,40,14,3,0,-1,0,0,0,0,0, "SOAP")]) ]) ])]). text('black',120,121,2,0,1,44,34,21,14,3,0,0,0,0,2,44,34,0,0,"",0,0,0,0,135,'',[ minilines(44,34,0,0,0,0,0,[ mini_line(44,14,3,0,0,0,[ str_block(0,44,14,3,0,-1,0,0,0,[ str_seg('black','Helvetica',0,80640,44,14,3,0,-1,0,0,0,0,0, "Z39.50")]) ]), mini_line(41,14,3,0,0,0,[ str_block(0,41,14,3,0,-3,0,0,0,[ str_seg('black','Helvetica',0,80640,41,14,3,0,-3,0,0,0,0,0, "ASN.1")]) ]) ])]). text('black',190,186,1,0,1,37,17,25,14,3,0,0,0,0,2,37,17,0,0,"",0,0,0,0,200,'',[ minilines(37,17,0,0,0,0,0,[ mini_line(37,14,3,0,0,0,[ str_block(0,37,14,3,0,-1,0,0,0,[ str_seg('black','Helvetica',0,80640,37,14,3,0,-1,0,0,0,0,0, "HTTP")]) ]) ])]). text('black',240,266,1,0,1,26,17,53,14,3,0,0,0,0,2,26,17,0,0,"",0,0,0,0,280,'',[ minilines(26,17,0,0,0,0,0,[ mini_line(26,14,3,0,0,0,[ str_block(0,26,14,3,0,-1,0,0,0,[ str_seg('black','Helvetica',0,80640,26,14,3,0,-1,0,0,0,0,0, "SSL")]) ]) ])]). box('black','',35,230,305,255,0,1,1,197,0,0,0,0,0,'1',0,[ ]). box('black','',175,180,305,215,0,1,1,198,0,0,0,0,0,'1',0,[ ]). box('black','',175,115,240,165,0,1,1,200,0,0,0,0,0,'1',0,[ ]). box('black','',100,115,170,165,0,1,1,203,0,0,0,0,0,'1',0,[ ]). box('black','',205,255,305,290,0,1,1,214,0,0,0,0,0,'1',0,[ ]). text('black',95,231,1,0,1,83,17,224,14,3,0,0,0,0,2,83,17,0,0,"",0,0,0,0,245,'',[ minilines(83,17,0,0,0,0,0,[ mini_line(83,14,3,0,0,0,[ str_block(0,83,14,3,0,-1,0,0,0,[ str_seg('black','Helvetica',0,80640,83,14,3,0,-1,0,0,0,0,0, "COMSTACK")]) ]) ])]). text('black',80,186,1,0,1,71,17,254,14,3,0,0,0,0,2,71,17,0,0,"",0,0,0,0,200,'',[ minilines(71,17,0,0,0,0,0,[ mini_line(71,14,3,0,0,0,[ str_block(0,71,14,3,0,-1,0,0,0,[ str_seg('black','Helvetica',0,80640,71,14,3,0,-1,0,0,0,0,0, "ODR (BER)")]) ]) ])]). box('black','',35,180,170,215,0,1,1,266,0,0,0,0,0,'1',0,[ ]). box('black','',35,45,305,90,0,1,1,268,0,0,0,0,0,'1',0,[ ]). box('black','',240,115,305,165,0,1,1,292,5,0,0,0,0,'1',0,[ ]). text('black',255,121,2,0,1,29,34,293,14,3,0,0,0,0,2,29,34,0,0,"",0,0,0,0,135,'',[ minilines(29,34,0,0,0,0,0,[ mini_line(28,14,3,0,0,0,[ str_block(0,28,14,3,0,-1,0,0,0,[ str_seg('black','Helvetica',0,80640,28,14,3,0,-1,0,0,0,0,0, "SRU")]) ]), mini_line(29,14,3,0,0,0,[ str_block(0,29,14,3,0,0,0,0,0,[ str_seg('black','Helvetica',0,80640,29,14,3,0,0,0,0,0,0,0, "GET")]) ]) ])]). text('black',50,121,2,0,1,41,34,303,14,3,0,0,0,0,2,41,34,0,0,"",0,0,0,0,135,'',[ minilines(41,34,0,0,0,0,0,[ mini_line(21,14,3,0,0,0,[ str_block(0,21,14,3,0,-1,0,0,0,[ str_seg('black','Helvetica',0,80640,21,14,3,0,-1,0,0,0,0,0, "ILL")]) ]), mini_line(41,14,3,0,0,0,[ str_block(0,41,14,3,0,-3,0,0,0,[ str_seg('black','Helvetica',0,80640,41,14,3,0,-3,0,0,0,0,0, "ASN.1")]) ]) ])]). box('black','',35,115,100,165,0,1,1,305,0,0,0,0,0,'1',0,[ ]). box('black','',240,115,305,165,0,1,1,306,0,0,0,0,0,'1',0,[ ]). yaz-4.2.30/doc/zoom.scan.html0000644000175000017500000001437211741237744012707 000000000000006. Scan

6. Scan

This section describes an interface for Scan. Scan is not an official part of the ZOOM model yet. The result of a scan operation is the ZOOM_scanset which is a set of terms returned by a target.

The Scan interface is supported for both Z39.50, SRU (and SOLR?).

    ZOOM_scanset ZOOM_connection_scan(ZOOM_connection c,
                                      const char *startpqf);

    ZOOM_scanset ZOOM_connection_scan1(ZOOM_connection c,
                                       ZOOM_query q);

    size_t ZOOM_scanset_size(ZOOM_scanset scan);

    const char *ZOOM_scanset_term(ZOOM_scanset scan, size_t pos,
                                  size_t *occ, size_t *len);

    const char *ZOOM_scanset_display_term(ZOOM_scanset scan, size_t pos,
                                          size_t *occ, size_t *len);

    void ZOOM_scanset_destroy(ZOOM_scanset scan);

    const char *ZOOM_scanset_option_get(ZOOM_scanset scan,
                                        const char *key);

    void ZOOM_scanset_option_set(ZOOM_scanset scan, const char *key,
                                 const char *val);
    

The scan set is created by function ZOOM_connection_scan which performs a scan operation on the connection using the specified startpqf. If the operation was successful, the size of the scan set can be retrieved by a call to ZOOM_scanset_size. Like result sets, the items are numbered 0,..size-1. To obtain information about a particular scan term, call function ZOOM_scanset_term. This function takes a scan set offset pos and returns a pointer to a raw term or NULL if non-present. If present, the occ and len are set to the number of occurrences and the length of the actual term respectively. ZOOM_scanset_display_term is similar to ZOOM_scanset_term except that it returns the display term rather than the raw term. In a few cases, the term is different from display term. Always use the display term for display and the raw term for subsequent scan operations (to get more terms, next scan result, etc).

A scan set may be freed by a call to function ZOOM_scanset_destroy. Functions ZOOM_scanset_option_get and ZOOM_scanset_option_set retrieves and sets an option respectively.

The startpqf is a subset of PQF, namely the Attributes+Term part. Multiple @attr can be used. For example to scan in title (complete) phrases:


     @attr 1=4 @attr 6=2 "science o"
    

The ZOOM_connecton_scan1 is a newer and more generic alternative to ZOOM_connection_scan which allows to use both CQL and PQF for Scan.

Table 3.4. ZOOM Scan Set Options

OptionDescriptionDefault
numberNumber of Scan Terms requested in next scan. After scan it holds the actual number of terms returned. 20
positionPreferred Position of term in response in next scan; actual position after completion of scan. 1
stepSizeStep Size 0
scanStatusAn integer indicating the Scan Status of last scan. 0
rpnCharsetCharacter set for RPN terms. If this is set, ZOOM C will assume that the ZOOM application is running UTF-8. Terms in RPN queries are then converted to the rpnCharset. If this is unset, ZOOM C will not assume any encoding of RPN terms and no conversion is performed. none

yaz-4.2.30/doc/soap.http.html0000644000175000017500000000474611741237744012724 000000000000002. HTTP

2. HTTP

YAZ only offers HTTP as transport carrier for SOAP, but it is relatively easy to change that.

The following definition of Z_GDU (Generic Data Unit) allows for both HTTP and Z39.50 in one packet.

#include <yaz/zgdu.h>

#define Z_GDU_Z3950         1
#define Z_GDU_HTTP_Request  2
#define Z_GDU_HTTP_Response 3
typedef struct {
  int which;
  union {
    Z_APDU *z3950;
    Z_HTTP_Request *HTTP_Request;
    Z_HTTP_Response *HTTP_Response;
  } u;
} Z_GDU ;
    

The corresponding Z_GDU encoder/decoder is z_GDU. The z3950 is any of the known BER encoded Z39.50 APDUs. HTTP_Request and HTTP_Response is the HTTP Request and Response respectively.

yaz-4.2.30/doc/soap.html0000644000175000017500000000527311741237744011742 00000000000000Chapter 6. SOAP and SRU

Chapter 6. SOAP and SRU

1. Introduction

YAZ uses a very simple implementation of SOAP that only, currenly, supports what is sufficient to offer SRU SOAP functionality. The implementation uses the tree API of libxml2 to encode and decode SOAP packages.

Like the Z39.50 ASN.1 module, the YAZ SRU implementation uses simple C structs to represent SOAP packages as well as HTTP packages.

yaz-4.2.30/doc/tools.nmem.html0000644000175000017500000001047011741237744013066 000000000000003. Nibble Memory

3. Nibble Memory

Sometimes when you need to allocate and construct a large, interconnected complex of structures, it can be a bit of a pain to release the associated memory again. For the structures describing the Z39.50 PDUs and related structures, it is convenient to use the memory-management system of the ODR subsystem (see Section 2, “Using ODR”). However, in some circumstances where you might otherwise benefit from using a simple nibble memory management system, it may be impractical to use odr_malloc() and odr_reset(). For this purpose, the memory manager which also supports the ODR streams is made available in the NMEM module. The external interface to this module is given in the nmem.h file.

The following prototypes are given:

    NMEM nmem_create(void);
    void nmem_destroy(NMEM n);
    void *nmem_malloc(NMEM n, size_t size);
    void nmem_reset(NMEM n);
    size_t nmem_total(NMEM n);
    void nmem_init(void);
    void nmem_exit(void);
   

The nmem_create() function returns a pointer to a memory control handle, which can be released again by nmem_destroy() when no longer needed. The function nmem_malloc() allocates a block of memory of the requested size. A call to nmem_reset() or nmem_destroy() will release all memory allocated on the handle since it was created (or since the last call to nmem_reset(). The function nmem_total() returns the number of bytes currently allocated on the handle.

The nibble memory pool is shared amongst threads. POSIX mutex'es and WIN32 Critical sections are introduced to keep the module thread safe. Function nmem_init() initializes the nibble memory library and it is called automatically the first time the YAZ.DLL is loaded. YAZ uses function DllMain to achieve this. You should not call nmem_init or nmem_exit unless you're absolute sure what you're doing. Note that in previous YAZ versions you'd have to call nmem_init yourself.

yaz-4.2.30/doc/yaz-iconv.10000644000175000017500000001020411741237741012076 00000000000000'\" t .\" Title: yaz-iconv .\" Author: Index Data .\" Generator: DocBook XSL Stylesheets v1.76.1 .\" Date: 04/11/2012 .\" Manual: Commands .\" Source: YAZ 4.2.30 .\" Language: English .\" .TH "YAZ\-ICONV" "1" "04/11/2012" "YAZ 4.2.30" "Commands" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" yaz-iconv \- YAZ Character set conversion utility .SH "SYNOPSIS" .HP \w'\fByaz\-iconv\fR\ 'u \fByaz\-iconv\fR [\fB\-f\ \fR\fB\fIfrom\fR\fR] [\fB\-t\ \fR\fB\fIto\fR\fR] [\fB\-v\fR] [file...] .SH "DESCRIPTION" .PP \fByaz\-iconv\fR converts data in file in character set specified by \fIfrom\fR to output in character set as specified by \fIto\fR\&. .PP This \fByaz\-iconv\fR utility similar to the \fBiconv\fR found on many POSIX systems (Glibc, Solaris, etc)\&. .PP If no \fIfile\fR is specified, \fByaz\-iconv\fR reads from standard input\&. .SH "OPTIONS" .PP \-f\fIfrom\fR] .RS 4 Specify the character set \fIfrom\fR of the input file\&. Should be used in conjunction with option \-t\&. .RE .PP \-t\fIto\fR] .RS 4 Specify the character set \fIof\fR of the output\&. Should be used in conjunction with option \-f\&. .RE .PP \-v .RS 4 Print more information about the conversion process\&. .RE .SH "ENCODINGS" .PP The yaz\-iconv command and the API as defined in yaz/yaz\-iconv\&.h is a wrapper for the library system call iconv\&. But YAZ\*(Aq iconv utility also implements conversions on its own\&. The table below lists characters sets (or encodings)\&. that are supported by YAZ\&. Each character set is marked with either \fIencode\fR or \fIdecode\fR\&. If an encoding is encode\-enabled YAZ may convert \fIto\fR to the designated encoding\&. If an encoding is decode\-enabled, YAZ may convert \fIfrom\fR the designated encoding\&. .PP marc8 (encode, decode) .RS 4 The \m[blue]\fBMARC8\fR\m[]\&\s-2\u[1]\d\s+2 encoding as defined by the Library of Congress\&. Most MARC21/USMARC records usees this encoding\&. .RE .PP marc8s (encode, decode) .RS 4 Like MARC8 but with conversion prefers non\-combined characters in the Latin\-1 plane over combined characters\&. .RE .PP marc8lossy (encode) .RS 4 Lossy encoding of MARC\-8\&. .RE .PP marc8lossless (encode) .RS 4 Lossless encoding of MARC8\&. .RE .PP utf8 (encode, decode) .RS 4 The most commonly used UNICODE encoding on the Internet\&. .RE .PP iso8859\-1 (encode, decode) .RS 4 ISO\-8859\-1, AKA Latin\-1\&. .RE .PP iso5426 (decode) .RS 4 ISO 5426\&. Some MARC records (UNIMARC) uses this encoding\&. .RE .PP iso5428:1984 (encode, decode) .RS 4 ISO 5428:1984\&. .RE .PP advancegreek (encode, decode) .RS 4 An encoding for Greek used by some vendors (Advance)\&. .RE .PP danmarc (decode) .RS 4 \m[blue]\fBDanmarc (in danish)\fR\m[]\&\s-2\u[2]\d\s+2 is an encoding based on UNICODE which is used for DanMARC2 records\&. .RE .SH "EXAMPLES" .PP The following command converts from ISO\-8859\-1 (Latin\-1) to UTF\-8\&. .sp .if n \{\ .RS 4 .\} .nf yaz\-iconv \-f ISO\-8859\-1 \-t UTF\-8 \-X output\&.lst .fi .if n \{\ .RE .\} .sp .SH "FILES" .PP \fIprefix\fR/bin/yaz\-iconv .PP \fIprefix\fR/include/yaz/yaz\-iconv\&.h .SH "SEE ALSO" .PP yaz(7) iconv(1) .SH "NOTES" .IP " 1." 4 MARC8 .RS 4 \%http://www.loc.gov/marc/specifications/speccharmarc8.html .RE .IP " 2." 4 Danmarc (in danish) .RS 4 \%http://www.kat-format.dk/danMARC2/Danmarc2.4.htm#felt+Indl.+4 .RE yaz-4.2.30/doc/gfs-options.xml0000644000175000017500000001656611733047144013105 00000000000000 -a file Specify a file for dumping PDUs (for diagnostic purposes). The special name - (dash) sends output to stderr. -S Don't fork or make threads on connection requests. This is good for debugging, but not recommended for real operation: Although the server is asynchronous and non-blocking, it can be nice to keep a software malfunction (okay then, a crash) from affecting all current users. -1 Like -S but after one session the server exits. This mode is for debugging only. -T Operate the server in threaded mode. The server creates a thread for each connection rather than a fork a process. Only available on UNIX systems that offers POSIX threads. -s Use the SR protocol (obsolete). -z Use the Z39.50 protocol (default). This option and -s complement each other. You can use both multiple times on the same command line, between listener-specifications (see below). This way, you can set up the server to listen for connections in both protocols concurrently, on different local ports. -l file The logfile. -c config A user option that serves as a specifier for some sort of configuration, usually a filename. The argument to this option is transferred to member configname of the statserv_options_block. -f vconfig This specifies an XML file that describes one or more YAZ frontend virtual servers. -C fname Sets SSL certificate file name for server (PEM). -v level The log level. Use a comma-separated list of members of the set {fatal,debug,warn,log,malloc,all,none}. -u uid Set user ID. Sets the real UID of the server process to that of the given user. It's useful if you aren't comfortable with having the server run as root, but you need to start it as such to bind a privileged port. -w dir The server changes to this directory during before listening on incoming connections. This option is useful when the server is operating from the inetd daemon (see -i). -p pidfile Specifies that the server should write its Process ID to file given by pidfile. A typical location would be /var/run/yaz-ztest.pid. -i Use this to make the the server run from the inetd server (UNIX only). -D Use this to make the server put itself in the background and run as a daemon. If neither -i nor -D is given, the server starts in the foreground. -install Use this to install the server as an NT service (Windows NT/2000/XP only). Control the server by going to the Services in the Control Panel. -installa Use this to install and activate the server as an NT service (Windows NT/2000/XP only). Control the server by going to the Services in the Control Panel. -remove Use this to remove the server from the NT services (Windows NT/2000/XP only). -t minutes Idle session timeout, in minutes. -k size Maximum record size/message size, in kilobytes. -K Forces no-keepalive for HTTP sessions. By default GFS will keep sessions alive for HTTP 1.1 sessions (as defined by the standard). Using this option will force GFS to close the connection for each operation. -r size Maximum size of log file before rotation occurs, in kilobytes. Default size is 1048576 k (=1 GB). -d daemon Set name of daemon to be used in hosts access file. See hosts_access 5 and tcpd 8 . -m time-format Sets the format of time-stamps in the log-file. Specify a string in the input format to strftime(). yaz-4.2.30/doc/comstack.client.html0000644000175000017500000000511211741237744014051 000000000000004. Client Side

4. Client Side

    int cs_connect(COMSTACK handle, void *address);
   

Initiate a connection with the target at address (more on addresses below). The function will return 0 on success, and 1 if the operation does not complete immediately (this will only happen on a nonblocking endpoint). In this case, use cs_rcvconnect to complete the operation, when select(2) or poll(2) reports input pending on the association.

    int cs_rcvconnect(COMSTACK handle);
   

Complete a connect operation initiated by cs_connect(). It will return 0 on success; 1 if the operation has not yet completed (in this case, call the function again later); -1 if an error has occurred.

yaz-4.2.30/doc/tools.oid.html0000644000175000017500000002127111741237744012706 000000000000002. Object Identifiers

2. Object Identifiers

The basic YAZ representation of an OID is an array of integers, terminated with the value -1. This integer is of type Odr_oid.

Fundamental OID operations and the type Odr_oid are defined in yaz/oid_util.h.

An OID can either be declared as a automatic variable or it can allocated using the memory utilities or ODR/NMEM. It's guaranteed that an OID can fit in OID_SIZE integers.

Example 7.13. Create OID on stack

We can create an OID for the Bib-1 attribute set with:

      Odr_oid bib1[OID_SIZE];
      bib1[0] = 1;
      bib1[1] = 2;
      bib1[2] = 840;
      bib1[3] = 10003;
      bib1[4] = 3;
      bib1[5] = 1;
      bib1[6] = -1;
     


And OID may also be filled from a string-based representation using dots (.). This is achieved by function

     int oid_dotstring_to_oid(const char *name, Odr_oid *oid);
    

This functions returns 0 if name could be converted; -1 otherwise.

Example 7.14. Using oid_oiddotstring_to_oid

We can fill the Bib-1 attribute set OID easier with:

      Odr_oid bib1[OID_SIZE];
      oid_oiddotstring_to_oid("1.2.840.10003.3.1", bib1);
     


We can also allocate an OID dynamically on a ODR stream with:

    Odr_oid *odr_getoidbystr(ODR o, const char *str);
   

This creates an OID from string-based representation using dots. This function take an ODR stream as parameter. This stream is used to allocate memory for the data elements, which is released on a subsequent call to odr_reset() on that stream.

Example 7.15. Using odr_getoidbystr

We can create a OID for the Bib-1 attribute set with:

      Odr_oid *bib1 = odr_getoidbystr(odr, "1.2.840.10003.3.1");
     


The function

     char *oid_oid_to_dotstring(const Odr_oid *oid, char *oidbuf)
    

does the reverse of oid_oiddotstring_to_oid. It converts an OID to the string-based representation using dots. The supplied char buffer oidbuf holds the resulting string and must be at least OID_STR_MAX in size.

OIDs can be copied with oid_oidcpy which takes two OID lists as arguments. Alternativly, an OID copy can be allocated on a ODR stream with:

     Odr_oid *odr_oiddup(ODR odr, const Odr_oid *o);
    

OIDs can be compared with oid_oidcmp which returns zero if the two OIDs provided are identical; non-zero otherwise.

2.1. OID database

From YAZ version 3 and later, the oident system has been replaced by an OID database. OID database is a misnomer .. the old odient system was also a database.

The OID database is really just a map between named Object Identifiers (string) and their OID raw equivalents. Most operations either convert from string to OID or other way around.

Unfortunately, whenever we supply a string we must also specify the OID class. The class is necessary because some strings correspond to multiple OIDs. An example of such a string is Bib-1 which may either be an attribute-set or a diagnostic-set.

Applications using the YAZ database should include yaz/oid_db.h.

A YAZ database handle is of type yaz_oid_db_t. Actually that's a pointer. You need not think deal with that. YAZ has a built-in database which can be considered "constant" for most purposes. We can get hold that by using function yaz_oid_std.

All functions with prefix yaz_string_to_oid converts from class + string to OID. We have variants of this operation due to different memory allocation strategies.

All functions with prefix yaz_oid_to_string converts from OID to string + class.

Example 7.16. Create OID with YAZ DB

We can create an OID for the Bib-1 attribute set on the ODR stream odr with:

        Odr_oid *bib1 = 
         yaz_string_to_oid_odr(yaz_oid_std(), CLASS_ATTSET, "Bib-1", odr);
      

This is more complex than using odr_getoidbystr. You would only use yaz_string_to_oid_odr when the string (here Bib-1) is supplied by a user or configuration.


2.2. Standard OIDs

All the object identifers in the standard OID database as returned by yaz_oid_std can referenced directly in a program as a constant OID. Each constant OID is prefixed with yaz_oid_ - followed by OID class (lowercase) - then by OID name (normalized and lowercase).

See Appendix A, List of Object Identifiers for list of all object identifiers built into YAZ. These are declared in yaz/oid_std.h but are included by yaz/oid_db.h as well.

Example 7.17. Use a built-in OID

We can allocate our own OID filled with the constant OID for Bib-1 with:

        Odr_oid *bib1 = odr_oiddup(o, yaz_oid_attset_bib1);
      


yaz-4.2.30/doc/installation.xml0000644000175000017500000007101411733047144013323 00000000000000Compilation and Installation Introduction The latest version of the software will generally be found at: We have tried our best to keep the software portable, and on many platforms, you should be able to compile everything with little or no changes. The software is regularly tested on Debian GNU/Linux, Redhat Linux, Ubuntu Linux, FreeBSD (i386), MAC OSX, SunOS 5.10 (sparc), Windows 2000, Windows 2003 server. Some versions have be known to work on HP/UX, DEC Unix, NetBSD, OpenBSD, IBM AIX, Data General DG/UX (with some CFLAGS tinkering), SGI/IRIX, DDE Supermax, Apple Macintosh (using the Codewarrior programming environment and the GUSI socket libraries), IBM AS/400 . If you move the software to other platforms, we'd be grateful if you'd let us know about it. If you run into difficulties, we will try to help if we can, and if you solve the problems, we would be happy to include your fixes in the next release. So far, we have mostly avoided #ifdefs for individual platforms, and we'd like to keep it that way as far as it makes sense. We maintain a mailing-list for the purpose of announcing new releases and bug-fixes, as well as general discussion. Subscribe by filling-in the form here. General questions and problems can be directed at , or the address given at the top of this document. UNIX We provide Debian GNU/Linux and Redhat packages for &yaz;. Only i386 binary packages are available. You should be able to create packages for other CPUs by building them from the source package. Compiling from source on Unix Note that if your system doesn't have a native ANSI C compiler, you may have to acquire one separately. We recommend GCC. If you wish to use character set conversion facilities in &yaz; or if you are compiling &yaz; for use with Zebra it is a good idea to ensure that the iconv library is installed. Some Unixes today already have it - if not, we suggest GNU libiconv. YAZ 3.0.16 and later includes a wrapper for the ICU (International Components for Unicode). In order to use this, the developer version of the ICU library must be available. The libxslt, libxml2 librararies are required if &yaz; is to support SRU. These libraries are very portable and should compile out-of-the box on virtually all Unix platforms. It is available in binary forms for Linux and others. The GNU tools Autoconf, Automake and Libtool are used to generate Makefiles and configure &yaz; for the system. You do not these tools unless you're using the CVS version of &yaz;. The CQL parser for &yaz; is built using GNU Bison. This tool is only needed if you're using the CVS version of &yaz;. &yaz; includes a tiny ASN.1 compiler. This compiler is written in Tcl. But as for Bison you do not need it unless you're using CVS version of &yaz; or you're using the compiler to built own codecs for private ASN.1. Generally it should be sufficient to run configure without options, like this: ./configure The configure script attempts to use use the C compiler specified by the CC environment variable. If not set, GNU C will be used if it is available. The CFLAGS environment variable holds options to be passed to the C compiler. If you're using Bourne-compatible shell you may pass something like this to use a particular C compiler with optimization enabled: CC=/opt/ccs/bin/cc CFLAGS=-O ./configure To customize &yaz;, the configure script also accepts a set of options. The most important are: --prefix=prefix Specifies installation prefix for &yaz;. This is only needed if you run make install later to perform a "system" installation. The prefix is /usr/local if not specified. --enable-tcpd The front end server will be built using Wietse's TCP wrapper library. It allows you to allow/deny clients depending on IP number. The TCP wrapper library is often used in GNU/Linux and BSD distributions. See hosts_access 5 and tcpd 8 . --enable-threads &yaz; will be built using POSIX threads. Specifically, _REENTRANT will be defined during compilation. --disable-shared The make process will not create shared libraries (also known as shared objects .so). By default, shared libraries are created - equivalent to --enable-shared. --disable-shared The make process will not create static libraries (.a). By default, static libraries are created - equivalent to --enable-static. --with-iconv[=prefix] Compile &yaz; with iconv library in directory prefix. By default configure will search for iconv on the system. Use this option if it doesn't find iconv. Alternatively, --without-iconv, can be uset to force &yaz; not to use iconv. --with-xslt[=prefix] Compile &yaz; with libxslt in directory prefix. Use this option if you want XSLT and XML support. By default, configure will search for libxslt on the system. Use this option if it libxslt is not found automatically. Alternatively, --without-xslt, can be used to force &yaz; not to use libxslt. --with-xml2[=prefix] Compile &yaz; with libxml2 in directory prefix. Use this option if you want &yaz; to use XML and support SRU. By default, configure will search for libxml2 on the system. Use this option if it libxml2 is not found automatically. Alternatively, --without-xml2, can be used to force &yaz; not to use libxml2. Note that option --with-xslt also enables libxml2. --with-gnutls[=prefix] &yaz; will be linked with the GNU TLS libraries and an SSL COMSTACK will be provided. By default configure enables SSL support for YAZ if the GNU TLS development libraries are found on the system. --with-openssl[=prefix] &yaz; will be linked with the OpenSSL libraries and an SSL COMSTACK will be provided. If OpenSSL is enabled, GNU TLS is automatically disabled. --with-icu[=prefix] &yaz; will be linked the ICU library in the prefix if given. If prefix is not given, the libraries exposed by the script icu-config will be used if found. When configured, build the software by typing: make The following files are generated by the make process: src/libyaz.la Main &yaz; library. This is no ordinary library. It's a Libtool archive. By default, &yaz; creates a static library in lib/.libs/libyaz.a. src/libyaz_server.la Generic Frontend server. This is an add-on for libyaz.la. Code in this library uses POSIX threads functions - if POSIX threads are available on the platform. src/libyaz_icu.la Functions that wrap the ICU library. ztest/yaz-ztest Test Z39.50 server. client/yaz-client Z39.50 client for testing the protocol. See chapter YAZ client for more information. util/yaz-config A Bourne-shell script, generated by configure, that specifies how external applications should compile - and link with &yaz;. util/yaz-asncomp The ASN.1 compiler for &yaz;. Requires the Tcl Shell, tclsh, in PATH to operate. util/yaz-iconv This program converts data in one character set to another. This command exercises the YAZ character set conversion API. util/yaz-marcdump This program parses ISO2709 encoded MARC records and prints them in line-format or XML. util/yaz-icu This program exposes the ICU wrapper library if that is enabled for YAZ. Only if ICU is available this program is useful. zoom/zoomsh A simple shell implemented on top of the ZOOM functions. The shell is a command line application that allows you to enter simple commands to perform ZOOM operations. zoom/zoomtst1, zoom/zoomtst2, .. Several small applications that demonstrates the ZOOM API. If you wish to install &yaz; in system directories /usr/local/bin, /usr/local/lib .. etc, you can type: make install You probably need to have root access in order to perform this. You must specify the --prefix option for configure if you wish to install &yaz; in other directories than the default /usr/local/. If you wish to perform an un-installation of &yaz;, use: make uninstall This will only work if you haven't reconfigured &yaz; (and therefore changed installation prefix). Note that uninstall will not remove directories created by make install, e.g. /usr/local/include/yaz. How to make apps using YAZ on UNIX This section describes how to compile - and link your own applications using the &yaz; toolkit. If you're used to Makefiles this shouldn't be hard. As for other libraries you have used before, you have to set a proper include path for your C/C++ compiler and specify the location of &yaz; libraries. You can do it by hand, but generally we suggest you use the yaz-config that is generated by configure. This is especially important if you're using the threaded version of &yaz; which require you to pass more options to your linker/compiler. The yaz-config script accepts command line options that makes the yaz-config script print options that you should use in your make process. The most important ones are: --cflags, --libs which prints C compiler flags, and linker flags respectively. A small and complete Makefile for a C application consisting of one source file, myprog.c, may look like this: YAZCONFIG=/usr/local/bin/yaz-config CFLAGS=`$(YAZCONFIG) --cflags` LIBS=`$(YAZCONFIG) --libs` myprog: myprog.o $(CC) $(CFLAGS) -o myprog myprog.o $(LIBS) The CFLAGS variable consists of a C compiler directive that will set the include path to the parent directory of yaz. That is, if &yaz; header files were installed in /usr/local/include/yaz, then include path is set to /usr/local/include. Therefore, in your applications you should use #include <yaz/proto.h> and not #include <proto.h> For Libtool users, the yaz-config script provides a different variant of option --libs, called --lalibs that returns the name of the Libtool archive(s) for &yaz; rather than the ordinary ones. For applications using the threaded version of &yaz;, specify threads after the other options. When threads is given, more flags and linker flags will be printed by yaz-config. If our previous example was using threads, you'd have to modify the lines that set CFLAGS and LIBS as follows: CFLAGS=`$(YAZCONFIG) --cflags threads` LIBS=`$(YAZCONFIG) --libs threads` There is no need specify POSIX thread libraries in your Makefile. The LIBS variable includes that as well. WIN32 The easiest way to install YAZ on Windows is by downloading an installer from here. The installer comes with source too - in case you wish to compile YAZ with different Compiler options etc. Compiling from Source on WIN32 &yaz; is shipped with "makefiles" for the NMAKE tool that comes with Microsoft Visual Studio. Version 6 and .NET has been tested. We expect that &yaz; compiles with version 5 as well. Start a command prompt and switch the sub directory WIN where the file makefile is located. Customize the installation by editing the makefile file (for example by using notepad). The following summarizes the most important settings in that file: DEBUG If set to 1, the software is compiled with debugging libraries (code generation is multi-threaded debug DLL). If set to 0, the software is compiled with release libraries (code generation is multi-threaded DLL). HAVE_TCL, TCL If HAVE_TCL is set to 1, nmake will use the ASN.1 compiler (Tcl based). You must set TCL to the full path of the Tcl interpreter. If you do not have Tcl installed, set HAVE_TCL to 0. HAVE_BISON, BISON If GNU Bison is present, you might set HAVE_ICONV to 1 and specify the Bison executable in BISON. Bison is only required if you use the CVS version of YAZ or if you modify the grammar for CQL (cql.y). A Windows version of GNU Bison is part of unxutils. HAVE_ICONV, ICONV_DIR If HAVE_ICONV is set to 1, YAZ is compiled with iconv support. In this configuration, set ICONV_DIR to the iconv source directory. HAVE_LIBXML2, LIBXML2_DIR If HAVE_LIBXML2 is set to 1, YAZ is compiled with SRU support. In this configuration, set LIBXML2_DIR to the libxml2 source directory and ZLIB_DIR to the zlib directory. Windows versions of libxslt, libxml2, zlib and iconv can be found Igor Zlatković' site. YAZ is not using zlib but libxml2 is depending on it. HAVE_LIBXSLT, LIBXSLT_DIR If HAVE_LIBXSLT is set to 1, YAZ is compiled with XSLT support. In this configuration, set LIBXSLT_DIR to the libxslt source directory. libxslt depends libxml2. HAVE_ICU, ICU_DIR If HAVE_ICU is set to 1, YAZ is compiled with ICU support. In this configuration, set ICU_DIR to the ICU source directory. When satisfied with the settings in the makefile, type nmake If the nmake command is not found on your system you probably haven't defined the environment variables required to use that tool. To fix that, find and run the batch file vcvars32.bat. You need to run it from within the command prompt or set the environment variables "globally"; otherwise it doesn't work. If you wish to recompile &yaz; - for example if you modify settings in the makefile you can delete object files, etc by running. nmake clean The following files are generated upon successful compilation: bin/yaz4.dll / bin/yaz4d.dll &yaz; Release/Debug DLL. lib/yaz4.lib / lib/yaz4d.lib Import library for yaz4.dll / yaz4d.dll. bin/yaz_cond4.dll / bin/yaz_cond4d.dll Release/Debug DLL for condition variable utilities (condvar.c). lib/yaz_cond4.lib / lib/yaz_cond4d.lib Import library for yaz_cond4.dll / yaz_cond4d.dll. bin/yaz_icu4.dll / bin/yaz_icu4d.dll Release/Debug DLL for the ICU wrapper utility. Only build if HAVE_ICU is 1. lib/yaz_icu4.lib / lib/yaz_icu4d.lib Import library for yaz_icu4.dll / yaz_icu4d.dll. bin/yaz-ztest.exe Z39.50 multi-threaded test/example server. It's a WIN32 console application. bin/yaz-client.exe &yaz; Z39.50 client application. It's a WIN32 console application. See chapter YAZ client for more information. bin/yaz-icu.exe This program exposes the ICU wrapper library if that is enabled for YAZ. Only if ICU is available this program is build. bin/zoomsh.exe Simple console application implemented on top of the ZOOM functions. The application is a command line shell that allows you to enter simple commands to perform ZOOM operations. bin/zoomtst1.exe, bin/zoomtst2.exe, .. Several small applications that demonstrates the ZOOM API. How to make apps using YAZ on WIN32 This section will go though the process of linking your WIN32 applications with &yaz;. Some people are confused by the fact that we use the nmake tool to build &yaz;. They think they have to do that too - in order to make their WIN32 applications work with &yaz;. The good news is that you don't have to. You can use the integrated environment of Visual Studio if desired for your own application. When setting up a project or Makefile you have to set the following: include path Set it to the include directory of &yaz;. import library yaz4.lib You must link with this library. It's located in the sub directory lib of &yaz;. If you want to link with the debug version of &yaz;, you must link against yaz4d.lib instead. dynamic link library yaz4.dll This DLL must be in your execution path when you invoke your application. Specifically, you should distribute this DLL with your application. yaz-4.2.30/doc/soap.xml0000644000175000017500000002046011654451754011573 00000000000000SOAP and SRU Introduction &yaz; uses a very simple implementation of SOAP that only, currenly, supports what is sufficient to offer SRU SOAP functionality. The implementation uses the tree API of libxml2 to encode and decode SOAP packages. Like the Z39.50 ASN.1 module, the &yaz; SRU implementation uses simple C structs to represent SOAP packages as well as HTTP packages. HTTP &yaz; only offers HTTP as transport carrier for SOAP, but it is relatively easy to change that. The following definition of Z_GDU (Generic Data Unit) allows for both HTTP and Z39.50 in one packet. #include <yaz/zgdu.h> #define Z_GDU_Z3950 1 #define Z_GDU_HTTP_Request 2 #define Z_GDU_HTTP_Response 3 typedef struct { int which; union { Z_APDU *z3950; Z_HTTP_Request *HTTP_Request; Z_HTTP_Response *HTTP_Response; } u; } Z_GDU ; The corresponding Z_GDU encoder/decoder is z_GDU. The z3950 is any of the known BER encoded Z39.50 APDUs. HTTP_Request and HTTP_Response is the HTTP Request and Response respectively. SOAP Packages Every SOAP package in &yaz; is represented as follows: #include <yaz/soap.h> typedef struct { char *fault_code; char *fault_string; char *details; } Z_SOAP_Fault; typedef struct { int no; char *ns; void *p; } Z_SOAP_Generic; #define Z_SOAP_fault 1 #define Z_SOAP_generic 2 #define Z_SOAP_error 3 typedef struct { int which; union { Z_SOAP_Fault *fault; Z_SOAP_Generic *generic; Z_SOAP_Fault *soap_error; } u; const char *ns; } Z_SOAP; The fault and soap_error arms represent both a SOAP fault - struct Z_SOAP_Fault. Any other generic (valid) package is represented by Z_SOAP_Generic. The ns as part of Z_SOAP is the namespace for SOAP itself and reflects the SOAP version. For version 1.1 it is http://schemas.xmlsoap.org/soap/envelope/, for version 1.2 it is http://www.w3.org/2001/06/soap-envelope. int z_soap_codec(ODR o, Z_SOAP **pp, char **content_buf, int *content_len, Z_SOAP_Handler *handlers); The content_buf and content_len is XML buffer and length of buffer respectively. The handlers is a list of SOAP codec handlers - one handler for each service namespace. For SRU SOAP, the namespace would be http://www.loc.gov/zing/srw/v1.0/. When decoding, the z_soap_codec inspects the XML content and tries to match one of the services namespaces of the supplied handlers. If there is a match a handler function is invoked which decodes that particular SOAP package. If successful, the returned Z_SOAP package will be of type Z_SOAP_Generic. Member no is set the offset of handler that matched; ns is set to namespace of matching handler; the void pointer p is set to the C data structure assocatiated with the handler. When a NULL namespace is met (member ns bwlow), that specifies end-of-list. Each handler is defined as follows: typedef struct { char *ns; void *client_data; Z_SOAP_fun f; } Z_SOAP_Handler; The ns is namespace of service associated with handler f. client_data is user-defined data which is passed to handler. The prototype for a SOAP service handler is: int handler(ODR o, void * ptr, void **handler_data, void *client_data, const char *ns); The o specifies the mode (decode/encode) as usual. The second argument, ptr, is a libxml2 tree node pointer (xmlNodePtr) and is a pointer to the Body element of the SOAP package. The handler_data is an opaque pointer to a C definitions associated with the SOAP service. client_data is the pointer which was set as part of the Z_SOAP_handler. Finally, ns the service namespace. SRU SRU SOAP is just one implementation of a SOAP handler as described in the previous section. The encoder/decoder handler for SRU is defined as follows: #include <yaz/srw.h> int yaz_srw_codec(ODR o, void * pptr, Z_SRW_GDU **handler_data, void *client_data, const char *ns); Here, Z_SRW_GDU is either searchRetrieveRequest or a searchRetrieveResponse. The xQuery and xSortKeys are not handled yet by the SRW implementation of &yaz;. Explain is also missing. Future versions of &yaz; will include these features. The definition of searchRetrieveRequest is: typedef struct { #define Z_SRW_query_type_cql 1 #define Z_SRW_query_type_xcql 2 #define Z_SRW_query_type_pqf 3 int query_type; union { char *cql; char *xcql; char *pqf; } query; #define Z_SRW_sort_type_none 1 #define Z_SRW_sort_type_sort 2 #define Z_SRW_sort_type_xSort 3 int sort_type; union { char *none; char *sortKeys; char *xSortKeys; } sort; int *startRecord; int *maximumRecords; char *recordSchema; char *recordPacking; char *database; } Z_SRW_searchRetrieveRequest; Please observe that data of type xsd:string is represented as a char pointer (char *). A null pointer means that the element is absent. Data of type xsd:integer is representd as a pointer to an int (int *). Again, a null pointer us used for absent elements. The SearchRetrieveResponse has the following definition. typedef struct { int * numberOfRecords; char * resultSetId; int * resultSetIdleTime; Z_SRW_record *records; int num_records; Z_SRW_diagnostic *diagnostics; int num_diagnostics; int *nextRecordPosition; } Z_SRW_searchRetrieveResponse; The num_records and num_diagnostics is number of returned records and diagnostics respectively and also correspond to the "size of" arrays records and diagnostics. A retrieval record is defined as follows: typedef struct { char *recordSchema; char *recordData_buf; int recordData_len; int *recordPosition; } Z_SRW_record; The record data is defined as a buffer of some length so that data can be of any type. SRW 1.0 currenly doesn't allow for this (only XML), but future versions might do. And, a diagnostic as: typedef struct { int *code; char *details; } Z_SRW_diagnostic; yaz-4.2.30/yaz.pc.in0000644000175000017500000000036611654451754011101 00000000000000prefix=@prefix@ exec_prefix=@exec_prefix@ libdir=@libdir@ includedir=@includedir@ Name: YAZ Version: @VERSION@ Description: YAZ library. Requires: libexslt Libs: -L${libdir} -lyaz Libs.private: @LIBS@ Cflags: -I${includedir} @YAZ_CONFIG_CFLAGS@ yaz-4.2.30/client/0000755000175000017500000000000011741237740010670 500000000000000yaz-4.2.30/client/admin.h0000644000175000017500000000412211733047144012046 00000000000000/* This file is part of the YAZ toolkit. * Copyright (C) 1995-2012 Index Data. * All rights reserved. * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions are met: * * * Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * * Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in the * documentation and/or other materials provided with the distribution. * * Neither the name of Index Data nor the names of its contributors * may be used to endorse or promote products derived from this * software without specific prior written permission. * * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND ANY * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE * DISCLAIMED. IN NO EVENT SHALL THE REGENTS AND CONTRIBUTORS BE LIABLE FOR ANY * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ int cmd_adm_reindex(const char* arg); int cmd_adm_truncate(const char* arg); int cmd_adm_create(const char* arg); int cmd_adm_drop(const char* arg); int cmd_adm_import(const char* arg); int cmd_adm_refresh(const char* arg); int cmd_adm_commit(const char* arg); int cmd_adm_shutdown(const char* arg); int cmd_adm_startup(const char* arg); int send_apdu(Z_APDU *a); /* * Local variables: * c-basic-offset: 4 * c-file-style: "Stroustrup" * indent-tabs-mode: nil * End: * vim: shiftwidth=4 tabstop=8 expandtab */ yaz-4.2.30/client/Makefile.am0000644000175000017500000000070011733047144012637 00000000000000## This file is part of the YAZ toolkit. ## Copyright (C) 1995-2012 Index Data bin_PROGRAMS=yaz-client EXTRA_PROGRAMS=bertorture EXTRA_DIST = default.bib COMMON=admin.c admin.h tabcomplete.c tabcomplete.h fhistory.c fhistory.h yaz_client_SOURCES=client.c $(COMMON) AM_CPPFLAGS=-I$(top_srcdir)/include $(XML2_CFLAGS) yaz_client_LDADD = ../src/libyaz.la $(READLINE_LIBS) bertorture_LDADD = ../src/libyaz.la bertorture_SOURCES=bertorture.c yaz-4.2.30/client/fhistory.h0000644000175000017500000000446111733047144012633 00000000000000/* This file is part of the YAZ toolkit. * Copyright (C) 1995-2012 Index Data. * All rights reserved. * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions are met: * * * Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * * Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in the * documentation and/or other materials provided with the distribution. * * Neither the name of Index Data nor the names of its contributors * may be used to endorse or promote products derived from this * software without specific prior written permission. * * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND ANY * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE * DISCLAIMED. IN NO EVENT SHALL THE REGENTS AND CONTRIBUTORS BE LIABLE FOR ANY * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ /** \file fhistory.h * \brief file history header */ #ifndef YAZ_FHISTORY_H #define YAZ_FHISTORY_H #include YAZ_BEGIN_CDECL typedef struct file_history *file_history_t; file_history_t file_history_new(void); void file_history_destroy(file_history_t *fhp); void file_history_add_line(file_history_t fh, const char *line); int file_history_save(file_history_t fh); int file_history_load(file_history_t fh); int file_history_trav(file_history_t fh, void *client_data, void (*callback)(void *client_data, const char *line)); YAZ_END_CDECL #endif /* * Local variables: * c-basic-offset: 4 * c-file-style: "Stroustrup" * indent-tabs-mode: nil * End: * vim: shiftwidth=4 tabstop=8 expandtab */ yaz-4.2.30/client/bertorture.c0000644000175000017500000001216011733047144013147 00000000000000/* This file is part of the YAZ toolkit. * Copyright (C) 1995-2012 Index Data * See the file LICENSE for details. */ #if HAVE_CONFIG_H #include #endif #include #if HAVE_SYS_TYPES_H #include #endif #if HAVE_SYS_STAT_H #include #endif #include #if HAVE_UNISTD_H #include #endif #include #include #include #include #include #define PACKET_SIZE 64 static int stop = 0; /* static int send_packet(const char *host) { char buf[PACKET_SIZE]; int i; void *add; COMSTACK cs = cs_create_host(host, 1, &add); if (!cs) return -1; if (cs_connect(cs, add) < 0) return -1; for (i = 0; i 0) { ssize_t wrote; wrote = write(fd, buf+off+j, sizeof(buf)-j-off); if (wrote <= 0) { yaz_log(YLOG_ERRNO|YLOG_FATAL, "write %s", fname); exit (1); } off += wrote; } if (close(fd) == -1) { yaz_log(YLOG_ERRNO|YLOG_FATAL, "close %s", fname); exit (1); } } mbuf = malloc(sizeof(buf)-j); memcpy(mbuf, buf+j, sizeof(buf)-j); odr_setbuf(odr, mbuf, sizeof(buf)-j, 0); if (z_GDU(odr, &req, 0, 0)) estat[99]++; else { int ex; odr_geterrorx(odr, &ex); estat[ex]++; } if (dumpfile) odr_dumpBER(dumpfile, buf+j, sizeof(buf)-j); free(mbuf); odr_reset(odr); odr_destroy(odr); } if (dumpfile && dumpfile != stdout) fclose(dumpfile); } void sigint_handler(int x) { stop = 1; } int main(int argc, char **argv) { int start = 0, end = 10000000, ret, i, estat[100]; char *arg; char *ber_fname = 0; char *packet_fname = 0; signal(SIGINT, sigint_handler); signal(SIGTERM, sigint_handler); for (i = 0; i #endif #include #include #include #include "tabcomplete.h" #include /* *************************************************************************** * * generic completer * * ***************************************************************************/ char *complete_from_list(const char** completions, const char *text, int state) { #if HAVE_READLINE_READLINE_H static int idx; if (!completions) return NULL; if (state==0) idx = 0; for(; completions[idx]; ++ idx) { if(! #ifdef WIN32 _strnicmp #else strncasecmp #endif (completions[idx],text,strlen(text))) { ++idx; /* skip this entry on the next run */ return (char*)strdup(completions[idx-1]); }; }; #endif return NULL; } /* *************************************************************************** * * code for getting a list of valid strings from the oid subsystem * * ***************************************************************************/ typedef struct { int oclass; const char** values; size_t index; size_t max; } oid_callback_t; /*! This is the call back function given to oid_trav... it updates the list of pointers into the oid owned data */ void oid_loader(const Odr_oid *oid, oid_class oclass, const char *name, void* data_) { oid_callback_t* data=(oid_callback_t*) data_; if ((oclass == CLASS_GENERAL) || (oclass == data->oclass)) { if (data->index==data->max) { data->values=(const char**) realloc(data->values,((data->max+1)*2)*sizeof(char*)); data->max=(data->max+1)*2 - 1; } data->values[data->index] = name; ++data->index; } } const char** build_list_for_oclass(oid_class oclass) { oid_callback_t data; data.values = (const char **) calloc(10,sizeof(char*)); data.index = 0; data.max = 9; data.oclass = oclass; yaz_oid_trav(yaz_oid_std(), oid_loader, &data); data.values[data.index]=0; return data.values; } /* *************************************************************************** * * the completer functions * * ***************************************************************************/ char* complete_querytype(const char *text, int state) { static const char* querytypes[] = {"ccl2rpn","prefix","cclrpn","ccl","cql", "cql2rpn", 0}; return complete_from_list(querytypes,text,state); } char* complete_auto_reconnect(const char *text, int state) { static const char* querytypes[] = {"on","off",0}; return complete_from_list(querytypes,text,state); } char* complete_format(const char* text, int state) { const char** list = build_list_for_oclass(CLASS_RECSYN); char* res=complete_from_list(list,text,state); free(list); return res; } char* complete_schema(const char* text, int state) { const char** list = build_list_for_oclass(CLASS_SCHEMA); char* res = complete_from_list(list,text,state); free(list); return res; } char* complete_attributeset(const char* text, int state) { const char** list = build_list_for_oclass(CLASS_ATTSET); char* res = complete_from_list(list,text,state); free(list); return res; } /* * Local variables: * c-basic-offset: 4 * c-file-style: "Stroustrup" * indent-tabs-mode: nil * End: * vim: shiftwidth=4 tabstop=8 expandtab */ yaz-4.2.30/client/fhistory.c0000644000175000017500000000574111733047144012630 00000000000000/* This file is part of the YAZ toolkit. * Copyright (C) 1995-2012 Index Data * See the file LICENSE for details. */ /** \file fhistory.c * \brief file history implementation */ #if HAVE_CONFIG_H #include #endif #include #include #include #include #include #if HAVE_SYS_TYPES_H #include #endif #include "fhistory.h" struct file_history { WRBUF wr; }; file_history_t file_history_new() { file_history_t fh = (file_history_t) xmalloc(sizeof(*fh)); fh->wr = wrbuf_alloc(); return fh; } void file_history_destroy(file_history_t *fhp) { if (*fhp) { wrbuf_destroy((*fhp)->wr); xfree(*fhp); *fhp = 0; } } void file_history_add_line(file_history_t fh, const char *line) { wrbuf_puts(fh->wr, line); wrbuf_puts(fh->wr, "\n"); } int file_history_load(file_history_t fh) { FILE *f; char* homedir = getenv("HOME"); char fname[1024]; int ret = 0; wrbuf_rewind(fh->wr); sprintf(fname, "%.500s%s%s", homedir ? homedir : "", homedir ? "/" : "", ".yazclient.history"); f = fopen(fname, "r"); if (f) { int c; while ((c = fgetc(f)) != EOF) wrbuf_putc(fh->wr, c); fclose(f); } return ret; } #define FILE_SAVE_HISTORY_MAX 16384 int file_history_save(file_history_t fh) { FILE *f; char* homedir = getenv("HOME"); char fname[1024]; int ret = 0; size_t sz = wrbuf_len(fh->wr); if (!sz) return 0; sprintf(fname, "%.500s%s%s", homedir ? homedir : "", homedir ? "/" : "", ".yazclient.history"); f = fopen(fname, "w"); if (!f) { ret = -1; } else { size_t w; const char *start = wrbuf_buf(fh->wr); if (sz > FILE_SAVE_HISTORY_MAX) { const char *nl = strchr( wrbuf_buf(fh->wr) + sz - FILE_SAVE_HISTORY_MAX, '\n'); if (nl) { nl++; sz = sz - (nl - start); start = nl; } } w = fwrite(start, 1, sz, f); if (w != sz) ret = -1; if (fclose(f)) ret = -1; } return ret; } int file_history_trav(file_history_t fh, void *client_data, void (*callback)(void *client_data, const char *line)) { size_t off = 0; while (off < wrbuf_len(fh->wr)) { size_t i; for (i = off; i < wrbuf_len(fh->wr); i++) { if (wrbuf_buf(fh->wr)[i] == '\n') { wrbuf_buf(fh->wr)[i] = '\0'; callback(client_data, wrbuf_cstr(fh->wr) + off); wrbuf_buf(fh->wr)[i] = '\n'; i++; break; } } off = i; } return 0; } /* * Local variables: * c-basic-offset: 4 * c-file-style: "Stroustrup" * indent-tabs-mode: nil * End: * vim: shiftwidth=4 tabstop=8 expandtab */ yaz-4.2.30/client/tabcomplete.h0000644000175000017500000000425611733047144013265 00000000000000/* This file is part of the YAZ toolkit. * Copyright (C) 1995-2012 Index Data. * All rights reserved. * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions are met: * * * Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * * Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in the * documentation and/or other materials provided with the distribution. * * Neither the name of Index Data nor the names of its contributors * may be used to endorse or promote products derived from this * software without specific prior written permission. * * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND ANY * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE * DISCLAIMED. IN NO EVENT SHALL THE REGENTS AND CONTRIBUTORS BE LIABLE FOR ANY * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ /* This file contains the compleaters for the different commands. */ char* complete_querytype(const char* text, int state); char* complete_format(const char* text, int state); char* complete_schema(const char* text, int state); char* complete_attributeset(const char* text, int state); char* complete_auto_reconnect(const char *text, int state); char *complete_from_list(const char** completions, const char *text, int state); /* * Local variables: * c-basic-offset: 4 * c-file-style: "Stroustrup" * indent-tabs-mode: nil * End: * vim: shiftwidth=4 tabstop=8 expandtab */ yaz-4.2.30/client/admin.c0000644000175000017500000002126511733047144012050 00000000000000/* This file is part of the YAZ toolkit. * Copyright (C) 1995-2012 Index Data * See the file LICENSE for details. */ #if HAVE_CONFIG_H #include #endif #include #include #include #include #if HAVE_DIRENT_H #include #endif #if HAVE_FNMATCH_H #include #endif #if HAVE_SYS_STAT_H #include #endif #include #include #include #include #include #include #include #include "admin.h" /* Helper functions to get to various statics in the client */ ODR getODROutputStream(void); extern char *databaseNames[]; extern int num_databaseNames; static int sendAdminES(int type, char* param1) { ODR out = getODROutputStream(); char *dbname = odr_strdup (out, databaseNames[0]); /* Type: 1=reindex, 2=truncate, 3=delete, 4=create, 5=import, 6=refresh, 7=commit */ Z_APDU *apdu = zget_APDU(out, Z_APDU_extendedServicesRequest ); Z_ExtendedServicesRequest *req = apdu->u.extendedServicesRequest; Z_External *r; Odr_oid *oid; Z_ESAdminOriginPartToKeep *toKeep; Z_ESAdminOriginPartNotToKeep *notToKeep; printf ("Admin request\n"); fflush(stdout); oid = odr_oiddup(out, yaz_oid_extserv_admin); req->packageType = oid; req->packageName = "1.Extendedserveq"; /* Allocate the external */ r = req->taskSpecificParameters = (Z_External *) odr_malloc (out, sizeof(*r)); r->direct_reference = odr_oiddup(out,oid); r->indirect_reference = 0; r->descriptor = 0; r->which = Z_External_ESAdmin; r->u.adminService = (Z_Admin *) odr_malloc(out, sizeof(*r->u.adminService)); r->u.adminService->which = Z_Admin_esRequest; r->u.adminService->u.esRequest = (Z_AdminEsRequest *) odr_malloc(out, sizeof(*r->u.adminService->u.esRequest)); toKeep = r->u.adminService->u.esRequest->toKeep = (Z_ESAdminOriginPartToKeep *) odr_malloc(out, sizeof(*r->u.adminService->u.esRequest->toKeep)); toKeep->which=type; toKeep->databaseName = dbname; switch ( type ) { case Z_ESAdminOriginPartToKeep_reIndex: toKeep->u.reIndex=odr_nullval(); break; case Z_ESAdminOriginPartToKeep_truncate: toKeep->u.truncate=odr_nullval(); break; case Z_ESAdminOriginPartToKeep_drop: toKeep->u.drop=odr_nullval(); break; case Z_ESAdminOriginPartToKeep_create: toKeep->u.create=odr_nullval(); break; case Z_ESAdminOriginPartToKeep_import: toKeep->u.import = (Z_ImportParameters*) odr_malloc(out, sizeof(*toKeep->u.import)); toKeep->u.import->recordType=param1; /* Need to add additional setup of records here */ break; case Z_ESAdminOriginPartToKeep_refresh: toKeep->u.refresh=odr_nullval(); break; case Z_ESAdminOriginPartToKeep_commit: toKeep->u.commit=odr_nullval(); break; case Z_ESAdminOriginPartToKeep_shutdown: toKeep->u.commit=odr_nullval(); break; case Z_ESAdminOriginPartToKeep_start: toKeep->u.commit=odr_nullval(); break; default: /* Unknown admin service */ break; } notToKeep = r->u.adminService->u.esRequest->notToKeep = (Z_ESAdminOriginPartNotToKeep *) odr_malloc(out, sizeof(*r->u.adminService->u.esRequest->notToKeep)); notToKeep->which=Z_ESAdminOriginPartNotToKeep_recordsWillFollow; notToKeep->u.recordsWillFollow=odr_nullval(); send_apdu(apdu); return 0; } /* cmd_adm_reindex Ask the specified database to fully reindex itself */ int cmd_adm_reindex(const char *arg) { sendAdminES(Z_ESAdminOriginPartToKeep_reIndex, NULL); return 2; } /* cmd_adm_truncate Truncate the specified database, removing all records and index entries, but leaving the database & it's explain information intact ready for new records */ int cmd_adm_truncate(const char *arg) { if ( arg ) { sendAdminES(Z_ESAdminOriginPartToKeep_truncate, NULL); return 2; } return 0; } /* cmd_adm_create Create a new database */ int cmd_adm_create(const char *arg) { if ( arg ) { sendAdminES(Z_ESAdminOriginPartToKeep_create, NULL); return 2; } return 0; } /* cmd_adm_drop Drop (Delete) a database */ int cmd_adm_drop(const char *arg) { if ( arg ) { sendAdminES(Z_ESAdminOriginPartToKeep_drop, NULL); return 2; } return 0; } /* cmd_adm_import Import the specified updated into the database N.B. That in this case, the import may contain instructions to delete records as well as new or updates to existing records */ #if HAVE_FNMATCH_H int cmd_adm_import(const char *arg) { char type_str[20], dir_str[1024], pattern_str[1024]; char *cp; char *sep = "/"; DIR *dir; struct dirent *ent; int chunk = 10; Z_APDU *apdu = 0; Z_Segment *segment = 0; ODR out = getODROutputStream(); if (arg && sscanf (arg, "%19s %1023s %1023s", type_str, dir_str, pattern_str) != 3) return 0; if (num_databaseNames != 1) return 0; dir = opendir(dir_str); if (!dir) return 0; sendAdminES(Z_ESAdminOriginPartToKeep_import, type_str); printf ("sent es request\n"); if ((cp=strrchr(dir_str, '/')) && cp[1] == 0) sep=""; while ((ent = readdir(dir))) { if (fnmatch (pattern_str, ent->d_name, 0) == 0) { char fname[1024]; struct stat status; FILE *inf; sprintf (fname, "%s%s%s", dir_str, sep, ent->d_name); stat (fname, &status); if (S_ISREG(status.st_mode) && (inf = fopen(fname, "r"))) { Z_NamePlusRecord *rec; Odr_oct *oct = (Odr_oct *) odr_malloc (out, sizeof(*oct)); if (!apdu) { apdu = zget_APDU(out, Z_APDU_segmentRequest); segment = apdu->u.segmentRequest; segment->segmentRecords = (Z_NamePlusRecord **) odr_malloc (out, chunk * sizeof(*segment->segmentRecords)); } rec = (Z_NamePlusRecord *) odr_malloc (out, sizeof(*rec)); rec->databaseName = 0; rec->which = Z_NamePlusRecord_intermediateFragment; rec->u.intermediateFragment = (Z_FragmentSyntax *) odr_malloc (out, sizeof(*rec->u.intermediateFragment)); rec->u.intermediateFragment->which = Z_FragmentSyntax_notExternallyTagged; rec->u.intermediateFragment->u.notExternallyTagged = oct; oct->len = oct->size = status.st_size; oct->buf = (unsigned char *) odr_malloc (out, oct->size); if (fread(oct->buf, 1, oct->size, inf) != (size_t) oct->size) { printf("Incomplete read of file %s\n", fname); } if (fclose(inf)) { printf("Close failed for file %s\n", fname); } segment->segmentRecords[segment->num_segmentRecords++] = rec; if (segment->num_segmentRecords == chunk) { send_apdu (apdu); apdu = 0; } } } } if (apdu) send_apdu(apdu); apdu = zget_APDU(out, Z_APDU_segmentRequest); send_apdu (apdu); closedir(dir); return 2; } #else int cmd_adm_import(const char *arg) { printf ("not available on WIN32\n"); return 0; } #endif /* "Freshen" the specified database, by checking metadata records against the sources from which they were generated, and creating a new record if the source has been touched since the last extraction */ int cmd_adm_refresh(const char *arg) { if ( arg ) { sendAdminES(Z_ESAdminOriginPartToKeep_refresh, NULL); return 2; } return 0; } /* cmd_adm_commit Make imported records a permenant & visible to the live system */ int cmd_adm_commit(const char *arg) { sendAdminES(Z_ESAdminOriginPartToKeep_commit, NULL); return 2; } int cmd_adm_shutdown(const char *arg) { sendAdminES(Z_ESAdminOriginPartToKeep_shutdown, NULL); return 2; } int cmd_adm_startup(const char *arg) { sendAdminES(Z_ESAdminOriginPartToKeep_start, NULL); return 2; } /* * Local variables: * c-basic-offset: 4 * c-file-style: "Stroustrup" * indent-tabs-mode: nil * End: * vim: shiftwidth=4 tabstop=8 expandtab */ yaz-4.2.30/client/default.bib0000644000175000017500000000233411674073724012721 00000000000000# CCL field mappings # # The rule below is used when no fields are specified term t=l,r s=al # # Simple rule for a field called "clean" clean t=l,r # # Rules for some BIB-1 fields au u=1 s=pw ti u=4 s=pw isbn u=7 issn u=8 cc u=20 su u=21 s=pw date u=30 r=r dp u=31 r=r da u=32 r=r la u=54 s=pw ab u=62 s=pw note u=63 s=pw af u=1006 s=pw # Qualifier alias tiau ti au # # Rules for a few GILS fields north gils-attset,u=2040 r=o south gils-attset,u=2041 r=o east gils-attset,u=2038 r=o west gils-attest,u=2039 r=o distributor gils-attset,u=2000 s=pw distributorname gils-attset,u=2001 s=pw # Explain fields ExplainCategory exp1,1=1 HumanStringLanguage exp1,1=2 DatabaseName exp1,1=3 TargetName exp1,1=4 AttributeSetOID exp1,1=5 RecordSyntaxOID exp1,1=6 TagSetOID exp1,1=7 ExtededServiceOID exp1,1=8 DateAdded exp1,1=9 DateChanged exp1,1=10 DateExpires exp1,1=11 ElementSetName exp1,1=12 # Define or operator @or or # Define and operator @and and # Define and not operator @not not andnot # Whether CCL is case sensitive or not. @case 1 # default stop words # @stop.* the of a # stop words for ti # @stop.ti art yaz-4.2.30/client/Makefile.in0000644000175000017500000004341611741237726012671 00000000000000# Makefile.in generated by automake 1.11.3 from Makefile.am. # @configure_input@ # Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, # 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011 Free Software # Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ VPATH = @srcdir@ pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ bin_PROGRAMS = yaz-client$(EXEEXT) EXTRA_PROGRAMS = bertorture$(EXEEXT) subdir = client DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/m4/ac_check_icu.m4 \ $(top_srcdir)/m4/acx_pthread.m4 $(top_srcdir)/m4/libtool.m4 \ $(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \ $(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \ $(top_srcdir)/m4/yaz.m4 $(top_srcdir)/m4/yaz_libxml2.m4 \ $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/include/config.h CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = am__installdirs = "$(DESTDIR)$(bindir)" PROGRAMS = $(bin_PROGRAMS) am_bertorture_OBJECTS = bertorture.$(OBJEXT) bertorture_OBJECTS = $(am_bertorture_OBJECTS) bertorture_DEPENDENCIES = ../src/libyaz.la am__objects_1 = admin.$(OBJEXT) tabcomplete.$(OBJEXT) \ fhistory.$(OBJEXT) am_yaz_client_OBJECTS = client.$(OBJEXT) $(am__objects_1) yaz_client_OBJECTS = $(am_yaz_client_OBJECTS) am__DEPENDENCIES_1 = yaz_client_DEPENDENCIES = ../src/libyaz.la $(am__DEPENDENCIES_1) DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir)/include depcomp = $(SHELL) $(top_srcdir)/config/depcomp am__depfiles_maybe = depfiles am__mv = mv -f COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \ $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) LTCOMPILE = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \ --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \ $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) CCLD = $(CC) LINK = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \ --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) \ $(LDFLAGS) -o $@ SOURCES = $(bertorture_SOURCES) $(yaz_client_SOURCES) DIST_SOURCES = $(bertorture_SOURCES) $(yaz_client_SOURCES) ETAGS = etags CTAGS = ctags DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ AMTAR = @AMTAR@ AR = @AR@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CYGPATH_W = @CYGPATH_W@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DLLTOOL = @DLLTOOL@ DSSSL_DIR = @DSSSL_DIR@ DSYMUTIL = @DSYMUTIL@ DTD_DIR = @DTD_DIR@ DUMPBIN = @DUMPBIN@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ FGREP = @FGREP@ GREP = @GREP@ HTML_COMPILE = @HTML_COMPILE@ ICU_CFLAGS = @ICU_CFLAGS@ ICU_CONFIG = @ICU_CONFIG@ ICU_CPPFLAGS = @ICU_CPPFLAGS@ ICU_CXXFLAGS = @ICU_CXXFLAGS@ ICU_LIBS = @ICU_LIBS@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ LD = @LD@ LDFLAGS = @LDFLAGS@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ LIPO = @LIPO@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ MAKEINFO = @MAKEINFO@ MANIFEST_TOOL = @MANIFEST_TOOL@ MAN_COMPILE = @MAN_COMPILE@ MKDIR_P = @MKDIR_P@ NM = @NM@ NMEDIT = @NMEDIT@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ OTOOL = @OTOOL@ OTOOL64 = @OTOOL64@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ PDF_COMPILE = @PDF_COMPILE@ PTHREAD_CC = @PTHREAD_CC@ PTHREAD_CFLAGS = @PTHREAD_CFLAGS@ PTHREAD_LIBS = @PTHREAD_LIBS@ RANLIB = @RANLIB@ READLINE_LIBS = @READLINE_LIBS@ SED = @SED@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ SSL_CFLAGS = @SSL_CFLAGS@ SSL_LIBS = @SSL_LIBS@ STRIP = @STRIP@ TCLSH = @TCLSH@ TCPD_LIBS = @TCPD_LIBS@ TKL_COMPILE = @TKL_COMPILE@ VERSION = @VERSION@ VERSION_HEX = @VERSION_HEX@ VERSION_SHA1 = @VERSION_SHA1@ WIN_FILEVERSION = @WIN_FILEVERSION@ XML2_CFLAGS = @XML2_CFLAGS@ XSLTPROC_COMPILE = @XSLTPROC_COMPILE@ XSL_DIR = @XSL_DIR@ YACC = @YACC@ YAZ_CONFIG_CFLAGS = @YAZ_CONFIG_CFLAGS@ YAZ_CONF_CFLAGS = @YAZ_CONF_CFLAGS@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_ct_AR = @ac_ct_AR@ ac_ct_CC = @ac_ct_CC@ ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ acx_pthread_config = @acx_pthread_config@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ pkgconfigpath = @pkgconfigpath@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ EXTRA_DIST = default.bib COMMON = admin.c admin.h tabcomplete.c tabcomplete.h fhistory.c fhistory.h yaz_client_SOURCES = client.c $(COMMON) AM_CPPFLAGS = -I$(top_srcdir)/include $(XML2_CFLAGS) yaz_client_LDADD = ../src/libyaz.la $(READLINE_LIBS) bertorture_LDADD = ../src/libyaz.la bertorture_SOURCES = bertorture.c all: all-am .SUFFIXES: .SUFFIXES: .c .lo .o .obj $(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu client/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --gnu client/Makefile .PRECIOUS: Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): install-binPROGRAMS: $(bin_PROGRAMS) @$(NORMAL_INSTALL) test -z "$(bindir)" || $(MKDIR_P) "$(DESTDIR)$(bindir)" @list='$(bin_PROGRAMS)'; test -n "$(bindir)" || list=; \ for p in $$list; do echo "$$p $$p"; done | \ sed 's/$(EXEEXT)$$//' | \ while read p p1; do if test -f $$p || test -f $$p1; \ then echo "$$p"; echo "$$p"; else :; fi; \ done | \ sed -e 'p;s,.*/,,;n;h' -e 's|.*|.|' \ -e 'p;x;s,.*/,,;s/$(EXEEXT)$$//;$(transform);s/$$/$(EXEEXT)/' | \ sed 'N;N;N;s,\n, ,g' | \ $(AWK) 'BEGIN { files["."] = ""; dirs["."] = 1 } \ { d=$$3; if (dirs[d] != 1) { print "d", d; dirs[d] = 1 } \ if ($$2 == $$4) files[d] = files[d] " " $$1; \ else { print "f", $$3 "/" $$4, $$1; } } \ END { for (d in files) print "f", d, files[d] }' | \ while read type dir files; do \ if test "$$dir" = .; then dir=; else dir=/$$dir; fi; \ test -z "$$files" || { \ echo " $(INSTALL_PROGRAM_ENV) $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL_PROGRAM) $$files '$(DESTDIR)$(bindir)$$dir'"; \ $(INSTALL_PROGRAM_ENV) $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL_PROGRAM) $$files "$(DESTDIR)$(bindir)$$dir" || exit $$?; \ } \ ; done uninstall-binPROGRAMS: @$(NORMAL_UNINSTALL) @list='$(bin_PROGRAMS)'; test -n "$(bindir)" || list=; \ files=`for p in $$list; do echo "$$p"; done | \ sed -e 'h;s,^.*/,,;s/$(EXEEXT)$$//;$(transform)' \ -e 's/$$/$(EXEEXT)/' `; \ test -n "$$list" || exit 0; \ echo " ( cd '$(DESTDIR)$(bindir)' && rm -f" $$files ")"; \ cd "$(DESTDIR)$(bindir)" && rm -f $$files clean-binPROGRAMS: @list='$(bin_PROGRAMS)'; test -n "$$list" || exit 0; \ echo " rm -f" $$list; \ rm -f $$list || exit $$?; \ test -n "$(EXEEXT)" || exit 0; \ list=`for p in $$list; do echo "$$p"; done | sed 's/$(EXEEXT)$$//'`; \ echo " rm -f" $$list; \ rm -f $$list bertorture$(EXEEXT): $(bertorture_OBJECTS) $(bertorture_DEPENDENCIES) $(EXTRA_bertorture_DEPENDENCIES) @rm -f bertorture$(EXEEXT) $(LINK) $(bertorture_OBJECTS) $(bertorture_LDADD) $(LIBS) yaz-client$(EXEEXT): $(yaz_client_OBJECTS) $(yaz_client_DEPENDENCIES) $(EXTRA_yaz_client_DEPENDENCIES) @rm -f yaz-client$(EXEEXT) $(LINK) $(yaz_client_OBJECTS) $(yaz_client_LDADD) $(LIBS) mostlyclean-compile: -rm -f *.$(OBJEXT) distclean-compile: -rm -f *.tab.c @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/admin.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/bertorture.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/client.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/fhistory.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/tabcomplete.Po@am__quote@ .c.o: @am__fastdepCC_TRUE@ $(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< @am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(COMPILE) -c $< .c.obj: @am__fastdepCC_TRUE@ $(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'` @am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(COMPILE) -c `$(CYGPATH_W) '$<'` .c.lo: @am__fastdepCC_TRUE@ $(LTCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< @am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(LTCOMPILE) -c -o $@ $< mostlyclean-libtool: -rm -f *.lo clean-libtool: -rm -rf .libs _libs ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES) list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in files) print i; }; }'`; \ mkid -fID $$unique tags: TAGS TAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) set x; \ here=`pwd`; \ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in files) print i; }; }'`; \ shift; \ if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ test -n "$$unique" || unique=$$empty_fix; \ if test $$# -gt 0; then \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ "$$@" $$unique; \ else \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ $$unique; \ fi; \ fi ctags: CTAGS CTAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in files) print i; }; }'`; \ test -z "$(CTAGS_ARGS)$$unique" \ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ $$unique GTAGS: here=`$(am__cd) $(top_builddir) && pwd` \ && $(am__cd) $(top_srcdir) \ && gtags -i $(GTAGS_ARGS) "$$here" distclean-tags: -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags distdir: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done check-am: all-am check: check-am all-am: Makefile $(PROGRAMS) installdirs: for dir in "$(DESTDIR)$(bindir)"; do \ test -z "$$dir" || $(MKDIR_P) "$$dir"; \ done install: install-am install-exec: install-exec-am install-data: install-data-am uninstall: uninstall-am install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-am install-strip: if test -z '$(STRIP)'; then \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ install; \ else \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ fi mostlyclean-generic: clean-generic: distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." clean: clean-am clean-am: clean-binPROGRAMS clean-generic clean-libtool mostlyclean-am distclean: distclean-am -rm -rf ./$(DEPDIR) -rm -f Makefile distclean-am: clean-am distclean-compile distclean-generic \ distclean-tags dvi: dvi-am dvi-am: html: html-am html-am: info: info-am info-am: install-data-am: install-dvi: install-dvi-am install-dvi-am: install-exec-am: install-binPROGRAMS install-html: install-html-am install-html-am: install-info: install-info-am install-info-am: install-man: install-pdf: install-pdf-am install-pdf-am: install-ps: install-ps-am install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-am -rm -rf ./$(DEPDIR) -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-am mostlyclean-am: mostlyclean-compile mostlyclean-generic \ mostlyclean-libtool pdf: pdf-am pdf-am: ps: ps-am ps-am: uninstall-am: uninstall-binPROGRAMS .MAKE: install-am install-strip .PHONY: CTAGS GTAGS all all-am check check-am clean clean-binPROGRAMS \ clean-generic clean-libtool ctags distclean distclean-compile \ distclean-generic distclean-libtool distclean-tags distdir dvi \ dvi-am html html-am info info-am install install-am \ install-binPROGRAMS install-data install-data-am install-dvi \ install-dvi-am install-exec install-exec-am install-html \ install-html-am install-info install-info-am install-man \ install-pdf install-pdf-am install-ps install-ps-am \ install-strip installcheck installcheck-am installdirs \ maintainer-clean maintainer-clean-generic mostlyclean \ mostlyclean-compile mostlyclean-generic mostlyclean-libtool \ pdf pdf-am ps ps-am tags uninstall uninstall-am \ uninstall-binPROGRAMS # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: yaz-4.2.30/client/client.c0000644000175000017500000046731511733047144012250 00000000000000/* This file is part of the YAZ toolkit. * Copyright (C) 1995-2012 Index Data * See the file LICENSE for details. */ /** \file client.c * \brief yaz-client program */ #if HAVE_CONFIG_H #include #endif #include #include #include #include #ifndef WIN32 #include #endif #if HAVE_SYS_TYPES_H #include #endif #if HAVE_LOCALE_H #include #endif #if HAVE_LANGINFO_H #include #endif #if HAVE_UNISTD_H #include #endif #if HAVE_SYS_STAT_H #include #endif #if HAVE_SYS_TIME_H #include #endif #ifdef WIN32 #include #include #include #define S_ISREG(x) (x & _S_IFREG) #define S_ISDIR(x) (x & _S_IFDIR) #endif #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #if HAVE_READLINE_READLINE_H #include #endif #if HAVE_READLINE_HISTORY_H #include #endif #include "admin.h" #include "tabcomplete.h" #include "fhistory.h" #define C_PROMPT "Z> " static file_history_t file_history = 0; static char sru_method[10] = "soap"; static char sru_version[10] = "1.2"; static char *codeset = 0; /* character set for output */ static int hex_dump = 0; static char *dump_file_prefix = 0; static ODR out, in, print; /* encoding and decoding streams */ #if YAZ_HAVE_XML2 static ODR srw_sr_odr_out = 0; static Z_SRW_PDU *srw_sr = 0; #endif static FILE *apdu_file = 0; static FILE *ber_file = 0; static COMSTACK conn = 0; /* our z-association */ static Z_IdAuthentication *auth = 0; /* our current auth definition */ static NMEM nmem_auth = NULL; char *databaseNames[128]; int num_databaseNames = 0; static Z_External *record_last = 0; static int setnumber = -1; /* current result set number */ static int smallSetUpperBound = 0; static int largeSetLowerBound = 1; static int mediumSetPresentNumber = 0; static Z_ElementSetNames *elementSetNames = 0; static Z_FacetList *facet_list = 0; static ODR facet_odr = 0; static Odr_int setno = 1; /* current set offset */ static enum oid_proto protocol = PROTO_Z3950; /* current app protocol */ #define RECORDSYNTAX_MAX 20 static char *recordsyntax_list[RECORDSYNTAX_MAX]; static int recordsyntax_size = 0; static char *record_schema = 0; static int sent_close = 0; static NMEM session_mem = NULL; /* memory handle for init-response */ static Z_InitResponse *session_initResponse = 0; /* session parameters */ static char last_scan_line[512] = "0"; static char last_scan_query[512] = "0"; static char ccl_fields[512] = "default.bib"; /* ### How can I set this path to use wherever YAZ is installed? */ static char cql_fields[512] = "/usr/local/share/yaz/etc/pqf.properties"; static char *esPackageName = 0; static char *yazProxy = 0; static int kilobytes = 1024; static char *negotiationCharset = 0; static int negotiationCharsetRecords = 1; static int negotiationCharsetVersion = 3; static char *outputCharset = 0; static char *marcCharset = 0; static char *queryCharset = 0; static char* yazLang = 0; static char last_cmd[32] = "?"; static FILE *marc_file = 0; static char *refid = NULL; static int auto_reconnect = 0; static int auto_wait = 1; static Odr_bitmask z3950_options; static int z3950_version = 3; static int scan_stepSize = 0; static char scan_position[64]; static int scan_size = 20; static char cur_host[200]; static Odr_int last_hit_count = 0; static int pretty_xml = 0; typedef enum { QueryType_Prefix, QueryType_CCL, QueryType_CCL2RPN, QueryType_CQL, QueryType_CQL2RPN } QueryType; static QueryType queryType = QueryType_Prefix; static CCL_bibset bibset; /* CCL bibset handle */ static cql_transform_t cqltrans = 0; /* CQL context-set handle */ #if HAVE_READLINE_COMPLETION_OVER #else /* readline doesn't have this var. Define it ourselves. */ int rl_attempted_completion_over = 0; #endif #define maxOtherInfosSupported 10 struct eoi { Odr_oid oid[OID_SIZE]; char* value; } extraOtherInfos[maxOtherInfosSupported]; static void process_cmd_line(char* line); #if HAVE_READLINE_READLINE_H static char **readline_completer(char *text, int start, int end); #endif static char *command_generator(const char *text, int state); static int cmd_register_tab(const char* arg); static int cmd_querycharset(const char *arg); static void close_session(void); static void marc_file_write(const char *buf, size_t sz); static void wait_and_handle_response(int one_response_only); static Z_GDU *get_HTTP_Request_url(ODR odr, const char *url); ODR getODROutputStream(void) { return out; } static const char* query_type_as_string(QueryType q) { switch (q) { case QueryType_Prefix: return "prefix (RPN sent to server)"; case QueryType_CCL: return "CCL (CCL sent to server) "; case QueryType_CCL2RPN: return "CCL -> RPN (RPN sent to server)"; case QueryType_CQL: return "CQL (CQL sent to server)"; case QueryType_CQL2RPN: return "CQL -> RPN (RPN sent to server)"; default: return "unknown Query type internal yaz-client error"; } } static void do_hex_dump(const char* buf, size_t len) { if (hex_dump) { size_t i; int x; for (i = 0; i < len ; i = i+16 ) { printf(" %4.4ld ", (long) i); for (x = 0 ; i+x < len && x < 16; ++x) { printf("%2.2X ",(unsigned int)((unsigned char)buf[i+x])); } printf("\n"); } } if (dump_file_prefix) { static int no = 0; if (++no < 1000 && strlen(dump_file_prefix) < 500) { char fname[1024]; FILE *of; sprintf(fname, "%s.%03d.raw", dump_file_prefix, no); of = fopen(fname, "wb"); if (fwrite(buf, 1, len, of) != len) { printf("write failed for %s", fname); } if (fclose(of)) { printf("close failed for %s", fname); } } } } static void add_otherInfos(Z_APDU *a) { Z_OtherInformation **oi; int i; yaz_oi_APDU(a, &oi); if (facet_list) yaz_oi_set_facetlist(oi, out, facet_list); for (i = 0; i < maxOtherInfosSupported; ++i) { if (oid_oidlen(extraOtherInfos[i].oid) > 0) yaz_oi_set_string_oid(oi, out, extraOtherInfos[i].oid, 1, extraOtherInfos[i].value); } } int send_apdu(Z_APDU *a) { char *buf; int len; add_otherInfos(a); if (apdu_file) { z_APDU(print, &a, 0, 0); odr_reset(print); } if (!z_APDU(out, &a, 0, 0)) { odr_perror(out, "Encoding APDU"); close_session(); return 0; } buf = odr_getbuf(out, &len, 0); if (ber_file) odr_dumpBER(ber_file, buf, len); do_hex_dump(buf, len); if (cs_put(conn, buf, len) < 0) { fprintf(stderr, "cs_put: %s\n", cs_errmsg(cs_errno(conn))); close_session(); return 0; } odr_reset(out); /* release the APDU structure */ return 1; } static void print_stringn(const char *buf, size_t len) { size_t i; for (i = 0; i < len; i++) if ((buf[i] <= 126 && buf[i] >= 32) || strchr("\n\r\t\f", buf[i])) printf("%c", buf[i]); else printf("\\X%02X", ((const unsigned char *)buf)[i]); } static void print_refid(Z_ReferenceId *id) { if (id) { printf("Reference Id: "); print_stringn((const char *) id->buf, id->len); printf("\n"); } } static Z_ReferenceId *set_refid(ODR out) { Z_ReferenceId *id; if (!refid) return 0; id = (Z_ReferenceId *) odr_malloc(out, sizeof(*id)); id->size = id->len = strlen(refid); id->buf = (unsigned char *) odr_malloc(out, id->len); memcpy(id->buf, refid, id->len); return id; } /* INIT SERVICE ------------------------------- */ static void send_Z3950_initRequest(const char* type_and_host) { Z_APDU *apdu = zget_APDU(out, Z_APDU_initRequest); Z_InitRequest *req = apdu->u.initRequest; int i; req->options = &z3950_options; ODR_MASK_ZERO(req->protocolVersion); for (i = 0; iprotocolVersion, i); *req->maximumRecordSize = 1024*kilobytes; *req->preferredMessageSize = 1024*kilobytes; req->idAuthentication = auth; req->referenceId = set_refid(out); if (yazProxy && type_and_host) { yaz_oi_set_string_oid(&req->otherInfo, out, yaz_oid_userinfo_proxy, 1, type_and_host); } if (negotiationCharset || yazLang) { Z_OtherInformation **p; Z_OtherInformationUnit *p0; yaz_oi_APDU(apdu, &p); if ((p0=yaz_oi_update(p, out, NULL, 0, 0))) { ODR_MASK_SET(req->options, Z_Options_negotiationModel); p0->which = Z_OtherInfo_externallyDefinedInfo; p0->information.externallyDefinedInfo = yaz_set_proposal_charneg_list(out, ",", negotiationCharset, yazLang, negotiationCharsetRecords); } } if (send_apdu(apdu)) printf("Sent initrequest.\n"); } static void render_initUserInfo(Z_OtherInformation *ui1); static void render_diag(Z_DiagnosticFormat *diag); static void pr_opt(const char *opt, void *clientData) { printf(" %s", opt); } static int process_Z3950_initResponse(Z_InitResponse *res) { int ver = 0; /* save session parameters for later use */ session_mem = odr_extract_mem(in); session_initResponse = res; for (ver = 0; ver < 8; ver++) if (!ODR_MASK_GET(res->protocolVersion, ver)) break; if (!*res->result) printf("Connection rejected by v%d target.\n", ver); else printf("Connection accepted by v%d target.\n", ver); if (res->implementationId) printf("ID : %s\n", res->implementationId); if (res->implementationName) printf("Name : %s\n", res->implementationName); if (res->implementationVersion) printf("Version: %s\n", res->implementationVersion); if (res->userInformationField) { Z_External *uif = res->userInformationField; if (uif->which == Z_External_userInfo1) render_initUserInfo(uif->u.userInfo1); else { printf("UserInformationfield:\n"); if (!z_External(print, (Z_External**)&uif, 0, 0)) { odr_perror(print, "Printing userinfo\n"); odr_reset(print); } if (uif->which == Z_External_octet) { printf("Guessing visiblestring:\n"); printf("'%.*s'\n", uif->u.octet_aligned->len, uif->u.octet_aligned->buf); } else if (uif->which == Z_External_single) { Odr_any *sat = uif->u.single_ASN1_type; if (!oid_oidcmp(uif->direct_reference, yaz_oid_userinfo_oclc_userinfo)) { Z_OCLC_UserInformation *oclc_ui; ODR decode = odr_createmem(ODR_DECODE); odr_setbuf(decode, (char *) sat->buf, sat->len, 0); if (!z_OCLC_UserInformation(decode, &oclc_ui, 0, 0)) printf("Bad OCLC UserInformation:\n"); else printf("OCLC UserInformation:\n"); if (!z_OCLC_UserInformation(print, &oclc_ui, 0, 0)) printf("Bad OCLC UserInformation spec\n"); odr_destroy(decode); } else { /* Peek at any private Init-diagnostic APDUs */ printf("yaz-client ignoring unrecognised userInformationField: %d-octet External '%.*s'\n", (int) sat->len, sat->len, sat->buf); } } odr_reset(print); } } printf("Options:"); yaz_init_opt_decode(res->options, pr_opt, 0); printf("\n"); if (ODR_MASK_GET(res->options, Z_Options_namedResultSets)) setnumber = 0; if (ODR_MASK_GET(res->options, Z_Options_negotiationModel)) { Z_CharSetandLanguageNegotiation *p = yaz_get_charneg_record(res->otherInfo); if (p) { char *charset=NULL, *lang=NULL; int selected; yaz_get_response_charneg(session_mem, p, &charset, &lang, &selected); printf("Accepted character set : %s\n", charset ? charset:"none"); printf("Accepted code language : %s\n", lang ? lang:"none"); printf("Accepted records in ...: %d\n", selected ); if (outputCharset && charset) { printf("Converting between %s and %s\n", outputCharset, charset); odr_set_charset(out, charset, outputCharset); odr_set_charset(in, outputCharset, charset); cmd_querycharset(charset); } else { odr_set_charset(out, 0, 0); odr_set_charset(in, 0, 0); } } } fflush(stdout); return 0; } static void render_initUserInfo(Z_OtherInformation *ui1) { int i; printf("Init response contains %d otherInfo unit%s:\n", ui1->num_elements, ui1->num_elements == 1 ? "" : "s"); for (i = 0; i < ui1->num_elements; i++) { Z_OtherInformationUnit *unit = ui1->list[i]; printf(" %d: otherInfo unit contains ", i+1); if (unit->which == Z_OtherInfo_externallyDefinedInfo && unit->information.externallyDefinedInfo && unit->information.externallyDefinedInfo->which == Z_External_diag1) { render_diag(unit->information.externallyDefinedInfo->u.diag1); } else if (unit->which != Z_OtherInfo_externallyDefinedInfo) { printf("unsupported otherInfo unit->which = %d\n", unit->which); } else { printf("unsupported otherInfo unit external %d\n", unit->information.externallyDefinedInfo ? unit->information.externallyDefinedInfo->which : -2); } } } /* ### should this share code with display_diagrecs()? */ static void render_diag(Z_DiagnosticFormat *diag) { int i; printf("%d diagnostic%s:\n", diag->num, diag->num == 1 ? "" : "s"); for (i = 0; i < diag->num; i++) { Z_DiagnosticFormat_s *ds = diag->elements[i]; printf(" %d: ", i+1); switch (ds->which) { case Z_DiagnosticFormat_s_defaultDiagRec: { Z_DefaultDiagFormat *dd = ds->u.defaultDiagRec; /* ### should check `dd->diagnosticSetId' */ printf("code=" ODR_INT_PRINTF " (%s)", *dd->condition, diagbib1_str(*dd->condition)); /* Both types of addinfo are the same, so use type-pun */ if (dd->u.v2Addinfo != 0) printf(",\n\taddinfo='%s'", dd->u.v2Addinfo); break; } case Z_DiagnosticFormat_s_explicitDiagnostic: printf("Explicit diagnostic (not supported)"); break; default: printf("Unrecognised diagnostic type %d", ds->which); break; } if (ds->message != 0) printf(", message='%s'", ds->message); printf("\n"); } } static int set_base(const char *arg) { int i; const char *cp; for (i = 0; i ...\n"); return 0; } return set_base(arg); } static int session_connect_base(const char *arg, const char **basep) { void *add; char type_and_host[101]; if (conn) { cs_close(conn); conn = 0; } if (session_mem) { nmem_destroy(session_mem); session_mem = NULL; session_initResponse = 0; } cs_get_host_args(arg, basep); strncpy(type_and_host, arg, sizeof(type_and_host)-1); type_and_host[sizeof(type_and_host)-1] = '\0'; if (yazProxy) conn = cs_create_host(yazProxy, 1, &add); else conn = cs_create_host(arg, 1, &add); if (!conn) { printf("Could not resolve address %s\n", arg); return 0; } #if YAZ_HAVE_XML2 #else if (conn->protocol == PROTO_HTTP) { printf("SRW/HTTP not enabled in this YAZ\n"); cs_close(conn); conn = 0; return 0; } #endif protocol = conn->protocol; printf("Connecting..."); fflush(stdout); if (cs_connect(conn, add) < 0) { printf("error = %s\n", cs_strerror(conn)); cs_close(conn); conn = 0; return 0; } printf("OK.\n"); cs_print_session_info(conn); if (protocol == PROTO_Z3950) { send_Z3950_initRequest(type_and_host); return 2; } return 0; } static int session_connect(const char *arg) { int r; const char *basep = 0; r = session_connect_base(arg, &basep); if (basep && *basep) set_base(basep); else if (protocol == PROTO_Z3950) set_base("Default"); return r; } static int cmd_open(const char *arg) { int r; if (arg) { strncpy(cur_host, arg, sizeof(cur_host)-1); cur_host[sizeof(cur_host)-1] = 0; } set_base(""); r = session_connect(cur_host); if (conn && conn->protocol == PROTO_HTTP) queryType = QueryType_CQL; return r; } static int cmd_authentication(const char *arg) { char **args; int r; nmem_reset(nmem_auth); nmem_strsplit_blank(nmem_auth, arg, &args, &r); if (r == 0) { printf("Authentication set to null\n"); auth = 0; } else if (r == 1) { auth = (Z_IdAuthentication *) nmem_malloc(nmem_auth, sizeof(*auth)); if (!strcmp(args[0], "-")) { auth->which = Z_IdAuthentication_anonymous; auth->u.anonymous = odr_nullval(); printf("Authentication set to Anonymous\n"); } else { auth->which = Z_IdAuthentication_open; auth->u.open = args[0]; printf("Authentication set to Open (%s)\n", args[0]); } } else if (r == 2) { auth = (Z_IdAuthentication *) nmem_malloc(nmem_auth, sizeof(*auth)); auth->which = Z_IdAuthentication_idPass; auth->u.idPass = (Z_IdPass *) nmem_malloc(nmem_auth, sizeof(*auth->u.idPass)); auth->u.idPass->groupId = NULL; auth->u.idPass->userId = !strcmp(args[0], "-") ? 0 : args[0]; auth->u.idPass->password = !strcmp(args[1], "-") ? 0 : args[1]; printf("Authentication set to User (%s), Pass (%s)\n", args[0], args[1]); } else if (r == 3) { auth = (Z_IdAuthentication*) nmem_malloc(nmem_auth, sizeof(*auth)); auth->which = Z_IdAuthentication_idPass; auth->u.idPass = (Z_IdPass *) nmem_malloc(nmem_auth, sizeof(*auth->u.idPass)); auth->u.idPass->groupId = args[1]; auth->u.idPass->userId = args[0]; auth->u.idPass->password = args[2]; printf("Authentication set to User (%s), Group (%s), Pass (%s)\n", args[0], args[1], args[2]); } else { printf("Bad number of args to auth\n"); auth = 0; } return 1; } /* SEARCH SERVICE ------------------------------ */ static void display_record(Z_External *r); static void print_record(const char *buf, size_t len) { size_t i = len; print_stringn(buf, len); /* add newline if not already added ... */ if (i <= 0 || buf[i-1] != '\n') printf("\n"); } static void print_xml_record(const char *buf, size_t len) { int has_printed = 0; #if YAZ_HAVE_XML2 if (pretty_xml) { xmlDocPtr doc; xmlKeepBlanksDefault(0); /* get get xmlDocFormatMemory to work! */ doc = xmlParseMemory(buf, len); if (doc) { xmlChar *xml_mem; int xml_size; xmlDocDumpFormatMemory(doc, &xml_mem, &xml_size, 1); fwrite(xml_mem, 1, xml_size, stdout); xmlFree(xml_mem); xmlFreeDoc(doc); has_printed = 1; } } #endif if (!has_printed) fwrite(buf, 1, len, stdout); } static void display_record(Z_External *r) { const Odr_oid *oid = r->direct_reference; record_last = r; /* * Tell the user what we got. */ if (oid) { oid_class oclass; char oid_name_buf[OID_STR_MAX]; const char *oid_name = yaz_oid_to_string_buf(oid, &oclass, oid_name_buf); printf("Record type: "); if (oid_name) printf("%s\n", oid_name); } /* Check if this is a known, ASN.1 type tucked away in an octet string */ if (r->which == Z_External_octet) { Z_ext_typeent *type = z_ext_getentbyref(r->direct_reference); char *rr; if (type) { /* * Call the given decoder to process the record. */ odr_setbuf(in, (char*)r->u.octet_aligned->buf, r->u.octet_aligned->len, 0); if (!(*type->fun)(in, &rr, 0, 0)) { odr_perror(in, "Decoding constructed record."); fprintf(stdout, "[Near %ld]\n", (long) odr_offset(in)); fprintf(stdout, "Packet dump:\n---------\n"); odr_dumpBER(stdout, (char*)r->u.octet_aligned->buf, r->u.octet_aligned->len); fprintf(stdout, "---------\n"); /* note just ignores the error ant print the bytes form the octet_aligned later */ } else { /* * Note: we throw away the original, BER-encoded record here. * Do something else with it if you want to keep it. */ r->u.sutrs = (Z_SUTRS *) rr; /* we don't actually check the type here. */ r->which = type->what; } } } if (oid && r->which == Z_External_octet) { const char *octet_buf = (const char*)r->u.octet_aligned->buf; size_t octet_len = r->u.octet_aligned->len; if (!oid_oidcmp(oid, yaz_oid_recsyn_xml) || !oid_oidcmp(oid, yaz_oid_recsyn_xml) || !oid_oidcmp(oid, yaz_oid_recsyn_html)) { print_xml_record(octet_buf, octet_len); } else if (yaz_oid_is_iso2709(oid)) { const char *result; size_t rlen; yaz_iconv_t cd = 0; yaz_marc_t mt = yaz_marc_create(); const char *from = 0; if (marcCharset && !strcmp(marcCharset, "auto")) { if (!oid_oidcmp(oid, yaz_oid_recsyn_usmarc)) { if (octet_buf[9] == 'a') from = "UTF-8"; else from = "MARC-8"; } else from = "ISO-8859-1"; } else if (marcCharset) from = marcCharset; if (outputCharset && from) { cd = yaz_iconv_open(outputCharset, from); printf("convert from %s to %s", from, outputCharset); if (!cd) printf(" unsupported\n"); else { yaz_marc_iconv(mt, cd); printf("\n"); } } if (yaz_marc_decode_buf(mt, octet_buf, octet_len, &result, &rlen)> 0) { if (fwrite(result, rlen, 1, stdout) != 1) { printf("write to stdout failed\n"); } } else { printf("bad MARC. Dumping as it is:\n"); print_record(octet_buf, octet_len); } yaz_marc_destroy(mt); if (cd) yaz_iconv_close(cd); } else { print_record(octet_buf, octet_len); } marc_file_write(octet_buf, r->u.octet_aligned->len); } else if (oid && !oid_oidcmp(oid, yaz_oid_recsyn_sutrs)) { if (r->which != Z_External_sutrs) { printf("Expecting single SUTRS type for SUTRS.\n"); return; } print_record((const char *) r->u.sutrs->buf, r->u.sutrs->len); marc_file_write((const char *) r->u.sutrs->buf, r->u.sutrs->len); } else if (oid && !oid_oidcmp(oid, yaz_oid_recsyn_grs_1)) { WRBUF w; if (r->which != Z_External_grs1) { printf("Expecting single GRS type for GRS.\n"); return; } w = wrbuf_alloc(); yaz_display_grs1(w, r->u.grs1, 0); puts(wrbuf_cstr(w)); wrbuf_destroy(w); } else if (oid && !oid_oidcmp(oid, yaz_oid_recsyn_opac)) { int i; if (r->u.opac->bibliographicRecord) display_record(r->u.opac->bibliographicRecord); for (i = 0; iu.opac->num_holdingsData; i++) { Z_HoldingsRecord *h = r->u.opac->holdingsData[i]; if (h->which == Z_HoldingsRecord_marcHoldingsRecord) { printf("MARC holdings %d\n", i); display_record(h->u.marcHoldingsRecord); } else if (h->which == Z_HoldingsRecord_holdingsAndCirc) { int j; Z_HoldingsAndCircData *data = h->u.holdingsAndCirc; printf("Data holdings %d\n", i); if (data->typeOfRecord) printf("typeOfRecord: %s\n", data->typeOfRecord); if (data->encodingLevel) printf("encodingLevel: %s\n", data->encodingLevel); if (data->receiptAcqStatus) printf("receiptAcqStatus: %s\n", data->receiptAcqStatus); if (data->generalRetention) printf("generalRetention: %s\n", data->generalRetention); if (data->completeness) printf("completeness: %s\n", data->completeness); if (data->dateOfReport) printf("dateOfReport: %s\n", data->dateOfReport); if (data->nucCode) printf("nucCode: %s\n", data->nucCode); if (data->localLocation) printf("localLocation: %s\n", data->localLocation); if (data->shelvingLocation) printf("shelvingLocation: %s\n", data->shelvingLocation); if (data->callNumber) printf("callNumber: %s\n", data->callNumber); if (data->shelvingData) printf("shelvingData: %s\n", data->shelvingData); if (data->copyNumber) printf("copyNumber: %s\n", data->copyNumber); if (data->publicNote) printf("publicNote: %s\n", data->publicNote); if (data->reproductionNote) printf("reproductionNote: %s\n", data->reproductionNote); if (data->termsUseRepro) printf("termsUseRepro: %s\n", data->termsUseRepro); if (data->enumAndChron) printf("enumAndChron: %s\n", data->enumAndChron); for (j = 0; jnum_volumes; j++) { printf("volume %d\n", j); if (data->volumes[j]->enumeration) printf(" enumeration: %s\n", data->volumes[j]->enumeration); if (data->volumes[j]->chronology) printf(" chronology: %s\n", data->volumes[j]->chronology); if (data->volumes[j]->enumAndChron) printf(" enumAndChron: %s\n", data->volumes[j]->enumAndChron); } for (j = 0; jnum_circulationData; j++) { printf("circulation %d\n", j); if (data->circulationData[j]->availableNow) printf(" availableNow: %d\n", *data->circulationData[j]->availableNow); if (data->circulationData[j]->availablityDate) printf(" availabiltyDate: %s\n", data->circulationData[j]->availablityDate); if (data->circulationData[j]->availableThru) printf(" availableThru: %s\n", data->circulationData[j]->availableThru); if (data->circulationData[j]->restrictions) printf(" restrictions: %s\n", data->circulationData[j]->restrictions); if (data->circulationData[j]->itemId) printf(" itemId: %s\n", data->circulationData[j]->itemId); if (data->circulationData[j]->renewable) printf(" renewable: %d\n", *data->circulationData[j]->renewable); if (data->circulationData[j]->onHold) printf(" onHold: %d\n", *data->circulationData[j]->onHold); if (data->circulationData[j]->enumAndChron) printf(" enumAndChron: %s\n", data->circulationData[j]->enumAndChron); if (data->circulationData[j]->midspine) printf(" midspine: %s\n", data->circulationData[j]->midspine); if (data->circulationData[j]->temporaryLocation) printf(" temporaryLocation: %s\n", data->circulationData[j]->temporaryLocation); } } } } else { printf("Unknown record representation.\n"); if (!z_External(print, &r, 0, 0)) { odr_perror(print, "Printing external"); odr_reset(print); } } } static void display_diagrecs(Z_DiagRec **pp, int num) { int i; Z_DefaultDiagFormat *r; printf("Diagnostic message(s) from database:\n"); for (i = 0; iwhich != Z_DiagRec_defaultFormat) { printf("Diagnostic record not in default format.\n"); return; } else r = p->u.defaultFormat; if (!r->diagnosticSetId) printf("Missing diagset\n"); else { oid_class oclass; char diag_name_buf[OID_STR_MAX]; const char *diag_name = 0; diag_name = yaz_oid_to_string_buf (r->diagnosticSetId, &oclass, diag_name_buf); if (oid_oidcmp(r->diagnosticSetId, yaz_oid_diagset_bib_1)) printf("Unknown diagset: %s\n", diag_name); } printf(" [" ODR_INT_PRINTF "] %s", *r->condition, diagbib1_str(*r->condition)); switch (r->which) { case Z_DefaultDiagFormat_v2Addinfo: printf(" -- v2 addinfo '%s'\n", r->u.v2Addinfo); break; case Z_DefaultDiagFormat_v3Addinfo: printf(" -- v3 addinfo '%s'\n", r->u.v3Addinfo); break; } } } static void display_nameplusrecord(Z_NamePlusRecord *p) { if (p->databaseName) printf("[%s]", p->databaseName); if (p->which == Z_NamePlusRecord_surrogateDiagnostic) display_diagrecs(&p->u.surrogateDiagnostic, 1); else if (p->which == Z_NamePlusRecord_databaseRecord) display_record(p->u.databaseRecord); } static void display_records(Z_Records *p) { int i; if (p->which == Z_Records_NSD) { Z_DiagRec dr, *dr_p = &dr; dr.which = Z_DiagRec_defaultFormat; dr.u.defaultFormat = p->u.nonSurrogateDiagnostic; display_diagrecs(&dr_p, 1); } else if (p->which == Z_Records_multipleNSD) display_diagrecs(p->u.multipleNonSurDiagnostics->diagRecs, p->u.multipleNonSurDiagnostics->num_diagRecs); else { printf("Records: %d\n", p->u.databaseOrSurDiagnostics->num_records); for (i = 0; i < p->u.databaseOrSurDiagnostics->num_records; i++) display_nameplusrecord(p->u.databaseOrSurDiagnostics->records[i]); } } static int send_Z3950_deleteResultSetRequest(const char *arg) { char names[8][32]; int i; Z_APDU *apdu = zget_APDU(out, Z_APDU_deleteResultSetRequest); Z_DeleteResultSetRequest *req = apdu->u.deleteResultSetRequest; req->referenceId = set_refid(out); req->num_resultSetList = sscanf(arg, "%30s %30s %30s %30s %30s %30s %30s %30s", names[0], names[1], names[2], names[3], names[4], names[5], names[6], names[7]); req->deleteFunction = odr_intdup(out, 0); if (req->num_resultSetList > 0) { *req->deleteFunction = Z_DeleteResultSetRequest_list; req->resultSetList = (char **) odr_malloc(out, sizeof(*req->resultSetList)* req->num_resultSetList); for (i = 0; inum_resultSetList; i++) req->resultSetList[i] = names[i]; } else { *req->deleteFunction = Z_DeleteResultSetRequest_all; req->resultSetList = 0; } send_apdu(apdu); printf("Sent deleteResultSetRequest.\n"); return 2; } #if YAZ_HAVE_XML2 static int send_gdu(Z_GDU *gdu) { if (z_GDU(out, &gdu, 0, 0)) { /* encode OK */ char *buf_out; int len_out; int r; if (apdu_file) { if (!z_GDU(print, &gdu, 0, 0)) printf("Failed to print outgoing SRU package\n"); odr_reset(print); } buf_out = odr_getbuf(out, &len_out, 0); /* we don't odr_reset(out), since we may need the buffer again */ do_hex_dump(buf_out, len_out); r = cs_put(conn, buf_out, len_out); if (r >= 0) return 2; } return 0; } static int send_srw_host_path(Z_SRW_PDU *sr, const char *host_port, char *path) { const char *charset = negotiationCharset; Z_GDU *gdu; gdu = z_get_HTTP_Request_host_path(out, host_port, path); if (auth) { if (auth->which == Z_IdAuthentication_open) { char **darray; int num; nmem_strsplit(out->mem, "/", auth->u.open, &darray, &num); if (num >= 1) sr->username = darray[0]; if (num >= 2) sr->password = darray[1]; } else if (auth->which == Z_IdAuthentication_idPass) { sr->username = auth->u.idPass->userId; sr->password = auth->u.idPass->password; } } if (!yaz_matchstr(sru_method, "get")) { yaz_sru_get_encode(gdu->u.HTTP_Request, sr, out, charset); } else if (!yaz_matchstr(sru_method, "post")) { yaz_sru_post_encode(gdu->u.HTTP_Request, sr, out, charset); } else if (!yaz_matchstr(sru_method, "soap")) { yaz_sru_soap_encode(gdu->u.HTTP_Request, sr, out, charset); } else if (!yaz_matchstr(sru_method, "solr")) { yaz_solr_encode_request(gdu->u.HTTP_Request, sr, out, charset); } return send_gdu(gdu); } static int send_srw(Z_SRW_PDU *sr) { char *path = yaz_encode_sru_dbpath_odr(out, databaseNames[0]); return send_srw_host_path(sr, cur_host, path); } static int send_SRW_redirect(const char *uri, Z_HTTP_Response *cookie_hres) { const char *username = 0; const char *password = 0; struct Z_HTTP_Header *h; char *combined_cookies = 0; int combined_cookies_len = 0; Z_GDU *gdu = get_HTTP_Request_url(out, uri); gdu->u.HTTP_Request->method = odr_strdup(out, "GET"); z_HTTP_header_add(out, &gdu->u.HTTP_Request->headers, "Accept", "text/xml"); for (h = cookie_hres->headers; h; h = h->next) { if (!strcmp(h->name, "Set-Cookie")) { char *cp; if (!(cp = strchr(h->value, ';'))) cp = h->value + strlen(h->value); if (cp - h->value >= 1) { combined_cookies = xrealloc(combined_cookies, combined_cookies_len + cp - h->value + 3); memcpy(combined_cookies+combined_cookies_len, h->value, cp - h->value); combined_cookies[combined_cookies_len + cp - h->value] = '\0'; strcat(combined_cookies,"; "); combined_cookies_len = strlen(combined_cookies); } } } if (combined_cookies_len) { z_HTTP_header_add(out, &gdu->u.HTTP_Request->headers, "Cookie", combined_cookies); xfree(combined_cookies); } if (auth) { if (auth->which == Z_IdAuthentication_open) { char **darray; int num; nmem_strsplit(out->mem, "/", auth->u.open, &darray, &num); if (num >= 1) username = darray[0]; if (num >= 2) password = darray[1]; } else if (auth->which == Z_IdAuthentication_idPass) { username = auth->u.idPass->userId; password = auth->u.idPass->password; } } if (username && password) { z_HTTP_header_add_basic_auth(out, &gdu->u.HTTP_Request->headers, username, password); } return send_gdu(gdu); } #endif #if YAZ_HAVE_XML2 static char *encode_SRW_term(ODR o, const char *q) { const char *in_charset = "ISO-8859-1"; WRBUF w = wrbuf_alloc(); yaz_iconv_t cd; char *res; if (outputCharset) in_charset = outputCharset; cd = yaz_iconv_open("UTF-8", in_charset); if (!cd) { wrbuf_destroy(w); return odr_strdup(o, q); } wrbuf_iconv_write(w, cd, q, strlen(q)); if (wrbuf_len(w)) res = odr_strdup(o, wrbuf_cstr(w)); else res = odr_strdup(o, q); yaz_iconv_close(cd); wrbuf_destroy(w); return res; } static int send_SRW_scanRequest(const char *arg, Odr_int *pos, int num) { Z_SRW_PDU *sr = 0; /* regular requestse .. */ sr = yaz_srw_get_pdu(out, Z_SRW_scan_request, sru_version); switch (queryType) { case QueryType_CQL: sr->u.scan_request->query_type = Z_SRW_query_type_cql; sr->u.scan_request->scanClause.cql = encode_SRW_term(out, arg); break; case QueryType_Prefix: sr->u.scan_request->query_type = Z_SRW_query_type_pqf; sr->u.scan_request->scanClause.pqf = encode_SRW_term(out, arg); break; default: printf("Only CQL and PQF supported in SRW\n"); return 0; } sr->u.scan_request->responsePosition = pos; sr->u.scan_request->maximumTerms = odr_intdup(out, num); return send_srw(sr); } static int send_SRW_searchRequest(const char *arg) { Z_SRW_PDU *sr = 0; if (!srw_sr) { assert(srw_sr_odr_out == 0); srw_sr_odr_out = odr_createmem(ODR_ENCODE); } odr_reset(srw_sr_odr_out); setno = 1; /* save this for later .. when fetching individual records */ srw_sr = yaz_srw_get_pdu(srw_sr_odr_out, Z_SRW_searchRetrieve_request, sru_version); /* regular request .. */ sr = yaz_srw_get_pdu(out, Z_SRW_searchRetrieve_request, sru_version); switch (queryType) { case QueryType_CQL: srw_sr->u.request->query_type = Z_SRW_query_type_cql; srw_sr->u.request->query.cql = encode_SRW_term(srw_sr_odr_out, arg); sr->u.request->query_type = Z_SRW_query_type_cql; sr->u.request->query.cql = encode_SRW_term(srw_sr_odr_out, arg); break; case QueryType_Prefix: srw_sr->u.request->query_type = Z_SRW_query_type_pqf; srw_sr->u.request->query.pqf = encode_SRW_term(srw_sr_odr_out, arg); sr->u.request->query_type = Z_SRW_query_type_pqf; sr->u.request->query.pqf = encode_SRW_term(srw_sr_odr_out, arg); break; default: printf("Only CQL and PQF supported in SRW\n"); return 0; } sr->u.request->maximumRecords = odr_intdup(out, 0); sr->u.request->facetList = facet_list; if (record_schema) sr->u.request->recordSchema = record_schema; if (recordsyntax_size == 1 && !yaz_matchstr(recordsyntax_list[0], "xml")) sr->u.request->recordPacking = "xml"; return send_srw(sr); } #endif static void query_charset_convert(Z_RPNQuery *q) { if (queryCharset && outputCharset) { yaz_iconv_t cd = yaz_iconv_open(queryCharset, outputCharset); if (!cd) { printf("Conversion from %s to %s unsupported\n", outputCharset, queryCharset); return; } yaz_query_charset_convert_rpnquery(q, out, cd); yaz_iconv_close(cd); } } static int send_Z3950_searchRequest(const char *arg) { Z_APDU *apdu = zget_APDU(out, Z_APDU_searchRequest); Z_SearchRequest *req = apdu->u.searchRequest; Z_Query query; struct ccl_rpn_node *rpn = NULL; int error, pos; char setstring[100]; Z_RPNQuery *RPNquery; Odr_oct ccl_query; YAZ_PQF_Parser pqf_parser; Z_External *ext; QueryType myQueryType = queryType; char pqfbuf[512]; if (myQueryType == QueryType_CCL2RPN) { rpn = ccl_find_str(bibset, arg, &error, &pos); if (error) { printf("CCL ERROR: %s\n", ccl_err_msg(error)); return 0; } } else if (myQueryType == QueryType_CQL2RPN) { /* ### All this code should be wrapped in a utility function */ CQL_parser parser; struct cql_node *node; const char *addinfo; if (cqltrans == 0) { printf("Can't use CQL: no translation file. Try set_cqlfile\n"); return 0; } parser = cql_parser_create(); if ((error = cql_parser_string(parser, arg)) != 0) { printf("Can't parse CQL: must be a syntax error\n"); return 0; } node = cql_parser_result(parser); if ((error = cql_transform_buf(cqltrans, node, pqfbuf, sizeof pqfbuf)) != 0) { error = cql_transform_error(cqltrans, &addinfo); printf("Can't convert CQL to PQF: %s (addinfo=%s)\n", cql_strerror(error), addinfo); return 0; } arg = pqfbuf; myQueryType = QueryType_Prefix; } req->referenceId = set_refid(out); if (!strcmp(arg, "@big")) /* strictly for troublemaking */ { static unsigned char big[2100]; static Odr_oct bigo; /* send a very big referenceid to test transport stack etc. */ memset(big, 'A', 2100); bigo.len = bigo.size = 2100; bigo.buf = big; req->referenceId = &bigo; } if (setnumber >= 0) { sprintf(setstring, "%d", ++setnumber); req->resultSetName = setstring; } *req->smallSetUpperBound = smallSetUpperBound; *req->largeSetLowerBound = largeSetLowerBound; *req->mediumSetPresentNumber = mediumSetPresentNumber; if (smallSetUpperBound > 0 || (largeSetLowerBound > 1 && mediumSetPresentNumber > 0)) { if (recordsyntax_size) req->preferredRecordSyntax = yaz_string_to_oid_odr(yaz_oid_std(), CLASS_RECSYN, recordsyntax_list[0], out); req->smallSetElementSetNames = req->mediumSetElementSetNames = elementSetNames; } req->num_databaseNames = num_databaseNames; req->databaseNames = databaseNames; req->query = &query; switch (myQueryType) { case QueryType_Prefix: query.which = Z_Query_type_1; pqf_parser = yaz_pqf_create(); RPNquery = yaz_pqf_parse(pqf_parser, out, arg); if (!RPNquery) { const char *pqf_msg; size_t off; int code = yaz_pqf_error(pqf_parser, &pqf_msg, &off); int ioff = off; printf("%*s^\n", ioff+4, ""); printf("Prefix query error: %s (code %d)\n", pqf_msg, code); yaz_pqf_destroy(pqf_parser); return 0; } yaz_pqf_destroy(pqf_parser); query_charset_convert(RPNquery); query.u.type_1 = RPNquery; break; case QueryType_CCL: query.which = Z_Query_type_2; query.u.type_2 = &ccl_query; ccl_query.buf = (unsigned char*) arg; ccl_query.len = strlen(arg); break; case QueryType_CCL2RPN: query.which = Z_Query_type_1; RPNquery = ccl_rpn_query(out, rpn); if (!RPNquery) { printf("Couldn't convert from CCL to RPN\n"); return 0; } query_charset_convert(RPNquery); query.u.type_1 = RPNquery; ccl_rpn_delete(rpn); break; case QueryType_CQL: query.which = Z_Query_type_104; ext = (Z_External *) odr_malloc(out, sizeof(*ext)); ext->direct_reference = odr_getoidbystr(out, "1.2.840.10003.16.2"); ext->indirect_reference = 0; ext->descriptor = 0; ext->which = Z_External_CQL; ext->u.cql = odr_strdup(out, arg); query.u.type_104 = ext; break; default: printf("Unsupported query type\n"); return 0; } if (send_apdu(apdu)) printf("Sent searchRequest.\n"); setno = 1; return 2; } static void display_term(Z_Term *term) { switch (term->which) { case Z_Term_general: printf("%.*s", term->u.general->len, term->u.general->buf); break; case Z_Term_characterString: printf("%s", term->u.characterString); break; case Z_Term_numeric: printf(ODR_INT_PRINTF, *term->u.numeric); break; case Z_Term_null: printf("null"); break; } } /* display Query Expression as part of searchResult-1 */ static void display_queryExpression(const char *lead, Z_QueryExpression *qe) { if (!qe) return; printf(" %s=", lead); if (qe->which == Z_QueryExpression_term) { if (qe->u.term->queryTerm) { Z_Term *term = qe->u.term->queryTerm; display_term(term); } } } static void display_facet(Z_FacetField *facet) { if (facet->attributes) { Z_AttributeList *al = facet->attributes; struct yaz_facet_attr attr_values; attr_values.errcode = 0; attr_values.limit = -1; attr_values.useattr = "NONE"; attr_values.relation = "default"; yaz_facet_attr_get_z_attributes(al, &attr_values); if (!attr_values.errcode) { int term_index; printf(" %s (%d): \n", attr_values.useattr, facet->num_terms); for (term_index = 0 ; term_index < facet->num_terms; term_index++) { Z_FacetTerm *facetTerm = facet->terms[term_index]; printf(" "); display_term(facetTerm->term); printf(" (" NMEM_INT_PRINTF ")\n", *facetTerm->count); } } } } static void* display_facets(Z_FacetList *fl) { int index; printf("Facets(%d): \n", fl->num); for (index = 0; index < fl->num ; index++) { display_facet(fl->elements[index]); } return 0; } void display_searchResult1(Z_SearchInfoReport *sr) { int j; printf("SearchResult-1:"); for (j = 0; j < sr->num; j++) { if (j) printf(","); if (!sr->elements[j]->subqueryExpression) printf("%d", j); display_queryExpression("term", sr->elements[j]->subqueryExpression); display_queryExpression("interpretation", sr->elements[j]->subqueryInterpretation); display_queryExpression("recommendation", sr->elements[j]->subqueryRecommendation); if (sr->elements[j]->subqueryCount) printf(" cnt=" ODR_INT_PRINTF, *sr->elements[j]->subqueryCount); if (sr->elements[j]->subqueryId) printf(" id=%s ", sr->elements[j]->subqueryId); } printf("\n"); } /* see if we can find USR:SearchResult-1 */ static void display_searchResult(Z_OtherInformation *o) { int i; if (!o) return ; for (i = 0; i < o->num_elements; i++) { if (o->list[i]->which == Z_OtherInfo_externallyDefinedInfo) { Z_External *ext = o->list[i]->information.externallyDefinedInfo; if (ext->which == Z_External_searchResult1) display_searchResult1(ext->u.searchResult1); else if (ext->which == Z_External_userFacets) display_facets(ext->u.facetList); } } } static int process_Z3950_searchResponse(Z_SearchResponse *res) { printf("Received SearchResponse.\n"); print_refid(res->referenceId); if (*res->searchStatus) printf("Search was a success.\n"); else printf("Search was a bloomin' failure.\n"); printf("Number of hits: " ODR_INT_PRINTF, *res->resultCount); last_hit_count = *res->resultCount; if (setnumber >= 0) printf(", setno %d", setnumber); putchar('\n'); if (res->resultSetStatus) { printf("Result Set Status: "); switch (*res->resultSetStatus) { case Z_SearchResponse_subset: printf("subset"); break; case Z_SearchResponse_interim: printf("interim"); break; case Z_SearchResponse_none: printf("none"); break; case Z_SearchResponse_estimate: printf("estimate"); break; default: printf(ODR_INT_PRINTF, *res->resultSetStatus); } putchar('\n'); } display_searchResult(res->additionalSearchInfo); printf("records returned: " ODR_INT_PRINTF "\n", *res->numberOfRecordsReturned); setno += *res->numberOfRecordsReturned; if (res->records) display_records(res->records); return 0; } static void print_level(int iLevel) { int i; for (i = 0; i < iLevel * 4; i++) printf(" "); } static void print_int(int iLevel, const char *pTag, Odr_int *pInt) { if (pInt != NULL) { print_level(iLevel); printf("%s: " ODR_INT_PRINTF "\n", pTag, *pInt); } } static void print_bool(int iLevel, const char *pTag, Odr_bool *pInt) { if (pInt != NULL) { print_level(iLevel); printf("%s: %d\n", pTag, *pInt); } } static void print_string(int iLevel, const char *pTag, const char *pString) { if (pString != NULL) { print_level(iLevel); printf("%s: %s\n", pTag, pString); } } static void print_oid(int iLevel, const char *pTag, Odr_oid *pOid) { if (pOid != NULL) { Odr_oid *pInt = pOid; print_level(iLevel); printf("%s:", pTag); for (; *pInt != -1; pInt++) printf(" %d", *pInt); printf("\n"); } } static void print_referenceId(int iLevel, Z_ReferenceId *referenceId) { if (referenceId != NULL) { int i; print_level(iLevel); printf("Ref Id (%d, %d): ", referenceId->len, referenceId->size); for (i = 0; i < referenceId->len; i++) printf("%c", referenceId->buf[i]); printf("\n"); } } static void print_string_or_numeric(int iLevel, const char *pTag, Z_StringOrNumeric *pStringNumeric) { if (pStringNumeric != NULL) { switch (pStringNumeric->which) { case Z_StringOrNumeric_string: print_string(iLevel, pTag, pStringNumeric->u.string); break; case Z_StringOrNumeric_numeric: print_int(iLevel, pTag, pStringNumeric->u.numeric); break; default: print_level(iLevel); printf("%s: valid type for Z_StringOrNumeric\n", pTag); break; } } } static void print_universe_report_duplicate( int iLevel, Z_UniverseReportDuplicate *pUniverseReportDuplicate) { if (pUniverseReportDuplicate != NULL) { print_level(iLevel); printf("Universe Report Duplicate: \n"); iLevel++; print_string_or_numeric(iLevel, "Hit No", pUniverseReportDuplicate->hitno); } } static void print_universe_report_hits( int iLevel, Z_UniverseReportHits *pUniverseReportHits) { if (pUniverseReportHits != NULL) { print_level(iLevel); printf("Universe Report Hits: \n"); iLevel++; print_string_or_numeric(iLevel, "Database", pUniverseReportHits->database); print_string_or_numeric(iLevel, "Hits", pUniverseReportHits->hits); } } static void print_universe_report(int iLevel, Z_UniverseReport *pUniverseReport) { if (pUniverseReport != NULL) { print_level(iLevel); printf("Universe Report: \n"); iLevel++; print_int(iLevel, "Total Hits", pUniverseReport->totalHits); switch (pUniverseReport->which) { case Z_UniverseReport_databaseHits: print_universe_report_hits(iLevel, pUniverseReport->u.databaseHits); break; case Z_UniverseReport_duplicate: print_universe_report_duplicate(iLevel, pUniverseReport->u.duplicate); break; default: print_level(iLevel); printf("Type: %d\n", pUniverseReport->which); break; } } } static void print_external(int iLevel, Z_External *pExternal) { if (pExternal != NULL) { print_level(iLevel); printf("External: \n"); iLevel++; print_oid(iLevel, "Direct Reference", pExternal->direct_reference); print_int(iLevel, "InDirect Reference", pExternal->indirect_reference); print_string(iLevel, "Descriptor", pExternal->descriptor); switch (pExternal->which) { case Z_External_universeReport: print_universe_report(iLevel, pExternal->u.universeReport); break; default: print_level(iLevel); printf("Type: %d\n", pExternal->which); break; } } } static int process_Z3950_resourceControlRequest(Z_ResourceControlRequest *req) { printf("Received ResourceControlRequest.\n"); print_referenceId(1, req->referenceId); print_bool(1, "Suspended Flag", req->suspendedFlag); print_int(1, "Partial Results Available", req->partialResultsAvailable); print_bool(1, "Response Required", req->responseRequired); print_bool(1, "Triggered Request Flag", req->triggeredRequestFlag); print_external(1, req->resourceReport); return 0; } static void process_Z3950_ESResponse(Z_ExtendedServicesResponse *res) { printf("Status: "); switch (*res->operationStatus) { case Z_ExtendedServicesResponse_done: printf("done\n"); break; case Z_ExtendedServicesResponse_accepted: printf("accepted\n"); break; case Z_ExtendedServicesResponse_failure: printf("failure\n"); display_diagrecs(res->diagnostics, res->num_diagnostics); break; default: printf("unknown\n"); } if ( (*res->operationStatus != Z_ExtendedServicesResponse_failure) && (res->num_diagnostics != 0) ) { display_diagrecs(res->diagnostics, res->num_diagnostics); } print_refid (res->referenceId); if (res->taskPackage && res->taskPackage->which == Z_External_extendedService) { Z_TaskPackage *taskPackage = res->taskPackage->u.extendedService; Odr_oct *id = taskPackage->targetReference; Z_External *ext = taskPackage->taskSpecificParameters; if (id) { printf("Target Reference: "); print_stringn((const char *) id->buf, id->len); printf("\n"); } if (ext->which == Z_External_update) { Z_IUUpdateTaskPackage *utp = ext->u.update->u.taskPackage; if (utp && utp->targetPart) { Z_IUTargetPart *targetPart = utp->targetPart; int i; for (i = 0; inum_taskPackageRecords; i++) { Z_IUTaskPackageRecordStructure *tpr = targetPart->taskPackageRecords[i]; printf("task package record %d\n", i+1); if (tpr->which == Z_IUTaskPackageRecordStructure_record) { display_record (tpr->u.record); } else { printf("other type\n"); } } } } if (ext->which == Z_External_itemOrder) { Z_IOTaskPackage *otp = ext->u.itemOrder->u.taskPackage; if (otp && otp->targetPart) { if (otp->targetPart->itemRequest) { Z_External *ext = otp->targetPart->itemRequest; if (ext->which == Z_External_octet) { Odr_oct *doc = ext->u.octet_aligned; printf("Got itemRequest doc %.*s\n", doc->len, doc->buf); } } else if (otp->targetPart->statusOrErrorReport) { Z_External *ext = otp->targetPart->statusOrErrorReport; if (ext->which == Z_External_octet) { Odr_oct *doc = ext->u.octet_aligned; printf("Got Status or Error Report doc %.*s\n", doc->len, doc->buf); } } } } } if (res->taskPackage && res->taskPackage->which == Z_External_octet) { Odr_oct *doc = res->taskPackage->u.octet_aligned; printf("%.*s\n", doc->len, doc->buf); } } static const char *get_ill_element(void *clientData, const char *element) { return 0; } static Z_External *create_external_itemRequest(void) { struct ill_get_ctl ctl; ILL_ItemRequest *req; Z_External *r = 0; int item_request_size = 0; char *item_request_buf = 0; ctl.odr = out; ctl.clientData = 0; ctl.f = get_ill_element; req = ill_get_ItemRequest(&ctl, "ill", 0); if (!req) printf("ill_get_ItemRequest failed\n"); if (!ill_ItemRequest(out, &req, 0, 0)) { if (apdu_file) { ill_ItemRequest(print, &req, 0, 0); odr_reset(print); } item_request_buf = odr_getbuf (out, &item_request_size, 0); if (item_request_buf) odr_setbuf (out, item_request_buf, item_request_size, 1); printf("Couldn't encode ItemRequest, size %d\n", item_request_size); return 0; } else { r = (Z_External *) odr_malloc(out, sizeof(*r)); r->direct_reference = odr_oiddup(out, yaz_oid_general_isoill_1); r->indirect_reference = 0; r->descriptor = 0; r->which = Z_External_single; r->u.single_ASN1_type = (Odr_oct *) odr_malloc(out, sizeof(*r->u.single_ASN1_type)); r->u.single_ASN1_type->buf = (unsigned char *) odr_malloc(out, item_request_size); r->u.single_ASN1_type->len = item_request_size; r->u.single_ASN1_type->size = item_request_size; memcpy(r->u.single_ASN1_type->buf, item_request_buf, item_request_size); do_hex_dump(item_request_buf,item_request_size); } return r; } static Z_External *create_external_ILL_APDU(void) { struct ill_get_ctl ctl; ILL_APDU *ill_apdu; Z_External *r = 0; int ill_request_size = 0; char *ill_request_buf = 0; ctl.odr = out; ctl.clientData = 0; ctl.f = get_ill_element; ill_apdu = ill_get_APDU(&ctl, "ill", 0); if (!ill_APDU (out, &ill_apdu, 0, 0)) { if (apdu_file) { printf("-------------------\n"); ill_APDU(print, &ill_apdu, 0, 0); odr_reset(print); printf("-------------------\n"); } ill_request_buf = odr_getbuf (out, &ill_request_size, 0); if (ill_request_buf) odr_setbuf (out, ill_request_buf, ill_request_size, 1); printf("Couldn't encode ILL-Request, size %d\n", ill_request_size); return 0; } else { ill_request_buf = odr_getbuf (out, &ill_request_size, 0); r = (Z_External *) odr_malloc(out, sizeof(*r)); r->direct_reference = odr_oiddup(out, yaz_oid_general_isoill_1); r->indirect_reference = 0; r->descriptor = 0; r->which = Z_External_single; r->u.single_ASN1_type = (Odr_oct *) odr_malloc(out, sizeof(*r->u.single_ASN1_type)); r->u.single_ASN1_type->buf = (unsigned char *) odr_malloc(out, ill_request_size); r->u.single_ASN1_type->len = ill_request_size; r->u.single_ASN1_type->size = ill_request_size; memcpy(r->u.single_ASN1_type->buf, ill_request_buf, ill_request_size); /* printf("len = %d\n", ill_request_size); */ /* do_hex_dump(ill_request_buf,ill_request_size); */ /* printf("--- end of extenal\n"); */ } return r; } static Z_External *create_ItemOrderExternal(const char *type, int itemno, const char *xml_buf, int xml_len) { Z_External *r = (Z_External *) odr_malloc(out, sizeof(Z_External)); r->direct_reference = odr_oiddup(out, yaz_oid_extserv_item_order); r->indirect_reference = 0; r->descriptor = 0; r->which = Z_External_itemOrder; r->u.itemOrder = (Z_ItemOrder *) odr_malloc(out,sizeof(Z_ItemOrder)); memset(r->u.itemOrder, 0, sizeof(Z_ItemOrder)); r->u.itemOrder->which=Z_IOItemOrder_esRequest; r->u.itemOrder->u.esRequest = (Z_IORequest *) odr_malloc(out,sizeof(Z_IORequest)); memset(r->u.itemOrder->u.esRequest, 0, sizeof(Z_IORequest)); r->u.itemOrder->u.esRequest->toKeep = (Z_IOOriginPartToKeep *) odr_malloc(out,sizeof(Z_IOOriginPartToKeep)); memset(r->u.itemOrder->u.esRequest->toKeep, 0, sizeof(Z_IOOriginPartToKeep)); r->u.itemOrder->u.esRequest->notToKeep = (Z_IOOriginPartNotToKeep *) odr_malloc(out,sizeof(Z_IOOriginPartNotToKeep)); memset(r->u.itemOrder->u.esRequest->notToKeep, 0, sizeof(Z_IOOriginPartNotToKeep)); r->u.itemOrder->u.esRequest->toKeep->supplDescription = NULL; r->u.itemOrder->u.esRequest->toKeep->contact = NULL; r->u.itemOrder->u.esRequest->toKeep->addlBilling = NULL; r->u.itemOrder->u.esRequest->notToKeep->resultSetItem = (Z_IOResultSetItem *) odr_malloc(out, sizeof(Z_IOResultSetItem)); memset(r->u.itemOrder->u.esRequest->notToKeep->resultSetItem, 0, sizeof(Z_IOResultSetItem)); r->u.itemOrder->u.esRequest->notToKeep->resultSetItem->resultSetId = "1"; r->u.itemOrder->u.esRequest->notToKeep->resultSetItem->item = odr_intdup(out, itemno); if (!strcmp (type, "item") || !strcmp(type, "2")) { printf("using item-request\n"); r->u.itemOrder->u.esRequest->notToKeep->itemRequest = create_external_itemRequest(); } else if (!strcmp(type, "ill") || !strcmp(type, "1")) { printf("using ILL-request\n"); r->u.itemOrder->u.esRequest->notToKeep->itemRequest = create_external_ILL_APDU(); } else if (!strcmp(type, "xml") || !strcmp(type, "3")) { printf("using XML ILL-request\n"); if (!xml_buf) { printf("no docoument added\n"); r->u.itemOrder->u.esRequest->notToKeep->itemRequest = 0; } else { r->u.itemOrder->u.esRequest->notToKeep->itemRequest = z_ext_record_oid(out, yaz_oid_recsyn_xml, xml_buf, xml_len); } } else r->u.itemOrder->u.esRequest->notToKeep->itemRequest = 0; return r; } static int send_Z3950_itemorder(const char *type, int itemno, const char *xml_buf, int xml_len) { Z_APDU *apdu = zget_APDU(out, Z_APDU_extendedServicesRequest); Z_ExtendedServicesRequest *req = apdu->u.extendedServicesRequest; req->referenceId = set_refid (out); req->packageType = odr_oiddup(out, yaz_oid_extserv_item_order); req->packageName = esPackageName; req->taskSpecificParameters = create_ItemOrderExternal(type, itemno, xml_buf, xml_len); send_apdu(apdu); return 0; } static int only_z3950(void) { if (!conn) { printf("Not connected yet\n"); return 1; } if (protocol == PROTO_HTTP) { printf("Not supported by SRW\n"); return 1; } return 0; } static int cmd_update_common(const char *arg, int version); static int cmd_update(const char *arg) { return cmd_update_common(arg, 1); } static int cmd_update0(const char *arg) { return cmd_update_common(arg, 0); } static int send_Z3950_update(int version, int action_no, const char *recid, char *rec_buf, int rec_len); #if YAZ_HAVE_XML2 static int send_SRW_update(int action_no, const char *recid, char *rec_buf, int rec_len); #endif static int cmd_update_common(const char *arg, int version) { char *action_buf; int action_len; char *recid_buf; int recid_len; const char *recid = 0; char *rec_buf; int rec_len; int action_no; int noread = 0; if (parse_cmd_doc(&arg, out, &action_buf, &action_len) == 0) { printf("Use: update action recid [fname]\n"); printf(" where action is one of insert,replace,delete.update\n"); printf(" recid is some record ID. Use none for no ID\n"); printf(" fname is file of record to be updated\n"); return 0; } if (parse_cmd_doc(&arg, out, &recid_buf, &recid_len) == 0) { printf("Missing recid\n"); return 0; } if (!strcmp(action_buf, "insert")) action_no = Z_IUOriginPartToKeep_recordInsert; else if (!strcmp(action_buf, "replace")) action_no = Z_IUOriginPartToKeep_recordReplace; else if (!strcmp(action_buf, "delete")) action_no = Z_IUOriginPartToKeep_recordDelete; else if (!strcmp(action_buf, "update")) action_no = Z_IUOriginPartToKeep_specialUpdate; else { printf("Bad action: %s\n", action_buf); printf("Possible values: insert, replace, delete, update\n"); return 0; } if (strcmp(recid_buf, "none")) /* none means no record ID */ recid = recid_buf; arg += noread; if (parse_cmd_doc(&arg, out, &rec_buf, &rec_len) == 0) return 0; #if YAZ_HAVE_XML2 if (protocol == PROTO_HTTP) return send_SRW_update(action_no, recid, rec_buf, rec_len); #endif return send_Z3950_update(version, action_no, recid, rec_buf, rec_len); } #if YAZ_HAVE_XML2 static int send_SRW_update(int action_no, const char *recid, char *rec_buf, int rec_len) { if (!conn) session_connect(cur_host); if (!conn) return 0; else { Z_SRW_PDU *srw = yaz_srw_get(out, Z_SRW_update_request); Z_SRW_updateRequest *sr = srw->u.update_request; switch (action_no) { case Z_IUOriginPartToKeep_recordInsert: sr->operation = "info:srw/action/1/create"; break; case Z_IUOriginPartToKeep_recordReplace: sr->operation = "info:srw/action/1/replace"; break; case Z_IUOriginPartToKeep_recordDelete: sr->operation = "info:srw/action/1/delete"; break; } if (rec_buf) { sr->record = yaz_srw_get_record(out); sr->record->recordData_buf = rec_buf; sr->record->recordData_len = rec_len; sr->record->recordSchema = record_schema; } if (recid) sr->recordId = odr_strdup(out, recid); return send_srw(srw); } } #endif static int send_Z3950_update(int version, int action_no, const char *recid, char *rec_buf, int rec_len) { Z_APDU *apdu = zget_APDU(out, Z_APDU_extendedServicesRequest ); Z_ExtendedServicesRequest *req = apdu->u.extendedServicesRequest; Z_External *r; Z_External *record_this = 0; if (rec_buf) record_this = z_ext_record_oid(out, yaz_oid_recsyn_xml, rec_buf, rec_len); else { if (!record_last) { printf("No last record (update ignored)\n"); return 0; } record_this = record_last; } req->packageType = odr_oiddup(out, (version == 0 ? yaz_oid_extserv_database_update_first_version : yaz_oid_extserv_database_update)); req->packageName = esPackageName; req->referenceId = set_refid (out); r = req->taskSpecificParameters = (Z_External *) odr_malloc(out, sizeof(*r)); r->direct_reference = req->packageType; r->indirect_reference = 0; r->descriptor = 0; if (version == 0) { Z_IU0OriginPartToKeep *toKeep; Z_IU0SuppliedRecords *notToKeep; r->which = Z_External_update0; r->u.update0 = (Z_IU0Update *) odr_malloc(out, sizeof(*r->u.update0)); r->u.update0->which = Z_IUUpdate_esRequest; r->u.update0->u.esRequest = (Z_IU0UpdateEsRequest *) odr_malloc(out, sizeof(*r->u.update0->u.esRequest)); toKeep = r->u.update0->u.esRequest->toKeep = (Z_IU0OriginPartToKeep *) odr_malloc(out, sizeof(*r->u.update0->u.esRequest->toKeep)); toKeep->databaseName = databaseNames[0]; toKeep->schema = 0; if (record_schema) { toKeep->schema = yaz_string_to_oid_odr(yaz_oid_std(), CLASS_SCHEMA, record_schema, out); } toKeep->elementSetName = 0; toKeep->action = odr_intdup(out, action_no); notToKeep = r->u.update0->u.esRequest->notToKeep = (Z_IU0SuppliedRecords *) odr_malloc(out, sizeof(*r->u.update0->u.esRequest->notToKeep)); notToKeep->num = 1; notToKeep->elements = (Z_IU0SuppliedRecords_elem **) odr_malloc(out, sizeof(*notToKeep->elements)); notToKeep->elements[0] = (Z_IU0SuppliedRecords_elem *) odr_malloc(out, sizeof(**notToKeep->elements)); notToKeep->elements[0]->which = Z_IUSuppliedRecords_elem_opaque; if (recid) { notToKeep->elements[0]->u.opaque = (Odr_oct *) odr_malloc(out, sizeof(Odr_oct)); notToKeep->elements[0]->u.opaque->buf = (unsigned char *) recid; notToKeep->elements[0]->u.opaque->size = strlen(recid); notToKeep->elements[0]->u.opaque->len = strlen(recid); } else notToKeep->elements[0]->u.opaque = 0; notToKeep->elements[0]->supplementalId = 0; notToKeep->elements[0]->correlationInfo = 0; notToKeep->elements[0]->record = record_this; } else { Z_IUOriginPartToKeep *toKeep; Z_IUSuppliedRecords *notToKeep; r->which = Z_External_update; r->u.update = (Z_IUUpdate *) odr_malloc(out, sizeof(*r->u.update)); r->u.update->which = Z_IUUpdate_esRequest; r->u.update->u.esRequest = (Z_IUUpdateEsRequest *) odr_malloc(out, sizeof(*r->u.update->u.esRequest)); toKeep = r->u.update->u.esRequest->toKeep = (Z_IUOriginPartToKeep *) odr_malloc(out, sizeof(*r->u.update->u.esRequest->toKeep)); toKeep->databaseName = databaseNames[0]; toKeep->schema = 0; if (record_schema) { toKeep->schema = yaz_string_to_oid_odr(yaz_oid_std(), CLASS_SCHEMA, record_schema, out); } toKeep->elementSetName = 0; toKeep->actionQualifier = 0; toKeep->action = odr_intdup(out, action_no); notToKeep = r->u.update->u.esRequest->notToKeep = (Z_IUSuppliedRecords *) odr_malloc(out, sizeof(*r->u.update->u.esRequest->notToKeep)); notToKeep->num = 1; notToKeep->elements = (Z_IUSuppliedRecords_elem **) odr_malloc(out, sizeof(*notToKeep->elements)); notToKeep->elements[0] = (Z_IUSuppliedRecords_elem *) odr_malloc(out, sizeof(**notToKeep->elements)); notToKeep->elements[0]->which = Z_IUSuppliedRecords_elem_opaque; if (recid) { notToKeep->elements[0]->u.opaque = (Odr_oct *) odr_malloc(out, sizeof(Odr_oct)); notToKeep->elements[0]->u.opaque->buf = (unsigned char *) recid; notToKeep->elements[0]->u.opaque->size = strlen(recid); notToKeep->elements[0]->u.opaque->len = strlen(recid); } else notToKeep->elements[0]->u.opaque = 0; notToKeep->elements[0]->supplementalId = 0; notToKeep->elements[0]->correlationInfo = 0; notToKeep->elements[0]->record = record_this; } send_apdu(apdu); return 2; } static int cmd_xmles(const char *arg) { if (only_z3950()) return 1; else { char *asn_buf = 0; int noread = 0; Odr_oid *oid; char oid_str[51]; Z_APDU *apdu = zget_APDU(out, Z_APDU_extendedServicesRequest); Z_ExtendedServicesRequest *req = apdu->u.extendedServicesRequest; Z_External *ext = (Z_External *) odr_malloc(out, sizeof(*ext)); req->referenceId = set_refid (out); req->taskSpecificParameters = ext; ext->indirect_reference = 0; ext->descriptor = 0; ext->which = Z_External_octet; ext->u.single_ASN1_type = (Odr_oct *) odr_malloc(out, sizeof(Odr_oct)); sscanf(arg, "%50s%n", oid_str, &noread); if (noread == 0) { printf("Missing OID for xmles\n"); return 0; } arg += noread; if (parse_cmd_doc(&arg, out, &asn_buf, &ext->u.single_ASN1_type->len) == 0) return 0; ext->u.single_ASN1_type->buf = (unsigned char *) asn_buf; oid = yaz_string_to_oid_odr(yaz_oid_std(), CLASS_EXTSERV, oid_str, out); if (!oid) { printf("Bad OID: %s\n", oid_str); return 0; } req->packageType = oid; ext->direct_reference = oid; send_apdu(apdu); return 2; } } static int cmd_itemorder(const char *arg) { char type[12]; int itemno; char *xml_buf = 0; int xml_len = 0; int no_read = 0; if (only_z3950()) return 1; if (sscanf(arg, "%10s %d%n", type, &itemno, &no_read) < 2) return 0; arg += no_read; parse_cmd_doc(&arg, out, &xml_buf, &xml_len); fflush(stdout); send_Z3950_itemorder(type, itemno, xml_buf, xml_len); return 2; } static void show_opt(const char *arg, void *clientData) { printf("%s ", arg); } static int cmd_zversion(const char *arg) { if (*arg && arg) z3950_version = atoi(arg); else printf("version is %d\n", z3950_version); return 0; } static int cmd_options(const char *arg) { if (*arg) { int r; int pos; r = yaz_init_opt_encode(&z3950_options, arg, &pos); if (r == -1) printf("Unknown option(s) near %s\n", arg+pos); } else { yaz_init_opt_decode(&z3950_options, show_opt, 0); printf("\n"); } return 0; } static int cmd_explain(const char *arg) { if (protocol != PROTO_HTTP) return 0; #if YAZ_HAVE_XML2 if (!conn) session_connect(cur_host); if (conn) { Z_SRW_PDU *sr = 0; setno = 1; /* save this for later .. when fetching individual records */ sr = yaz_srw_get(out, Z_SRW_explain_request); if (recordsyntax_size == 1 && !yaz_matchstr(recordsyntax_list[0], "xml")) sr->u.explain_request->recordPacking = "xml"; send_srw(sr); return 2; } #endif return 0; } static int cmd_init(const char *arg) { if (*arg) { strncpy(cur_host, arg, sizeof(cur_host)-1); cur_host[sizeof(cur_host)-1] = 0; } if (only_z3950()) return 1; send_Z3950_initRequest(cur_host); return 2; } static Z_GDU *get_HTTP_Request_url(ODR odr, const char *url) { Z_GDU *p = z_get_HTTP_Request(odr); const char *host = url; const char *cp0 = strstr(host, "://"); const char *cp1 = 0; if (cp0) cp0 = cp0+3; else cp0 = host; cp1 = strchr(cp0, '/'); if (!cp1) cp1 = cp0 + strlen(cp0); if (cp0 && cp1) { char *h = (char*) odr_malloc(odr, cp1 - cp0 + 1); memcpy (h, cp0, cp1 - cp0); h[cp1-cp0] = '\0'; z_HTTP_header_add(odr, &p->u.HTTP_Request->headers, "Host", h); } p->u.HTTP_Request->path = odr_strdup(odr, *cp1 ? cp1 : "/"); return p; } static WRBUF get_url(const char *uri, WRBUF username, WRBUF password, int *code, int show_headers) { WRBUF result = 0; ODR out = odr_createmem(ODR_ENCODE); ODR in = odr_createmem(ODR_DECODE); Z_GDU *gdu = get_HTTP_Request_url(out, uri); gdu->u.HTTP_Request->method = odr_strdup(out, "GET"); if (username && password) { z_HTTP_header_add_basic_auth(out, &gdu->u.HTTP_Request->headers, wrbuf_cstr(username), wrbuf_cstr(password)); } z_HTTP_header_add(out, &gdu->u.HTTP_Request->headers, "Accept", "text/xml"); if (!z_GDU(out, &gdu, 0, 0)) { yaz_log(YLOG_WARN, "Can not encode HTTP request URL:%s", uri); } else { void *add; COMSTACK conn = cs_create_host(uri, 1, &add); if (cs_connect(conn, add) < 0) yaz_log(YLOG_WARN, "Can not connect to URL:%s", uri); else { int len; char *buf = odr_getbuf(out, &len, 0); if (cs_put(conn, buf, len) < 0) yaz_log(YLOG_WARN, "cs_put failed URL:%s", uri); else { char *netbuffer = 0; int netlen = 0; int res = cs_get(conn, &netbuffer, &netlen); if (res <= 0) { yaz_log(YLOG_WARN, "cs_get failed URL:%s", uri); } else { Z_GDU *gdu; odr_setbuf(in, netbuffer, res, 0); if (!z_GDU(in, &gdu, 0, 0) || gdu->which != Z_GDU_HTTP_Response) { yaz_log(YLOG_WARN, "decode failed URL: %s", uri); } else { Z_HTTP_Response *res = gdu->u.HTTP_Response; struct Z_HTTP_Header *h; result = wrbuf_alloc(); if (show_headers) { wrbuf_printf(result, "HTTP %d\n", res->code); for (h = res->headers; h; h = h->next) wrbuf_printf(result, "%s: %s\n", h->name, h->value); } *code = res->code; wrbuf_write(result, res->content_buf, res->content_len); } } xfree(netbuffer); } cs_close(conn); } } odr_destroy(out); odr_destroy(in); return result; } static int cmd_url(const char *arg) { int code = 0; WRBUF res = get_url(arg, 0, 0, &code, 1); if (res) { if (wrbuf_len(res) > 1200) { fwrite(wrbuf_buf(res), 1, 1200, stdout); printf(".. out of %lld\n", (long long) wrbuf_len(res)); } else puts(wrbuf_cstr(res)); wrbuf_destroy(res); } return 0; } static int cmd_sru(const char *arg) { if (!*arg) { printf("SRU method is: %s\n", sru_method); printf("SRU version is: %s\n", sru_version); } else { int r = sscanf(arg, "%9s %9s", sru_method, sru_version); if (r >= 1) { if (!yaz_matchstr(sru_method, "post")) ; else if (!yaz_matchstr(sru_method, "get")) ; else if (!yaz_matchstr(sru_method, "soap")) ; else if (!yaz_matchstr(sru_method, "solr")) ; else { strcpy(sru_method, "soap"); printf("Unknown SRU method: %s\n", arg); printf("Specify one of POST, GET, SOAP, SOLR\n"); } } } return 0; } static int cmd_find(const char *arg) { if (!*arg) { printf("Find what?\n"); return 0; } if (protocol == PROTO_HTTP) { #if YAZ_HAVE_XML2 if (!conn) session_connect(cur_host); if (!conn) return 0; if (!send_SRW_searchRequest(arg)) return 0; #else return 0; #endif } else { if (*cur_host && auto_reconnect) { int i = 0; for (;;) { if (conn) { if (!send_Z3950_searchRequest(arg)) return 0; wait_and_handle_response(0); if (conn) break; } if (++i == 2) { printf("Unable to reconnect\n"); break; } session_connect(cur_host); wait_and_handle_response(0); } return 0; } else if (conn) { if (!send_Z3950_searchRequest(arg)) return 0; } else { printf("Not connected yet\n"); return 0; } } return 2; } static int cmd_facets(const char *arg) { if (!facet_odr) facet_odr = odr_createmem(ODR_ENCODE); odr_reset(facet_odr); if (!*arg) { facet_list = 0; printf("Facets cleared.\n"); return 0; } facet_list = yaz_pqf_parse_facet_list(facet_odr, arg); if (!facet_list) { printf("Invalid facet list: %s", arg); return 0; } return 1; } static int cmd_delete(const char *arg) { if (only_z3950()) return 0; if (!send_Z3950_deleteResultSetRequest(arg)) return 0; return 2; } static int cmd_ssub(const char *arg) { if (!(smallSetUpperBound = atoi(arg))) return 0; return 1; } static int cmd_lslb(const char *arg) { if (!(largeSetLowerBound = atoi(arg))) return 0; return 1; } static int cmd_mspn(const char *arg) { if (!(mediumSetPresentNumber = atoi(arg))) return 0; return 1; } static int cmd_status(const char *arg) { printf("smallSetUpperBound: %d\n", smallSetUpperBound); printf("largeSetLowerBound: %d\n", largeSetLowerBound); printf("mediumSetPresentNumber: %d\n", mediumSetPresentNumber); return 1; } static int cmd_setnames(const char *arg) { if (*arg == '1') /* enable ? */ setnumber = 0; else if (*arg == '0') /* disable ? */ setnumber = -1; else if (setnumber < 0) /* no args, toggle .. */ setnumber = 0; else setnumber = -1; if (setnumber >= 0) printf("Set numbering enabled.\n"); else printf("Set numbering disabled.\n"); return 1; } /* PRESENT SERVICE ----------------------------- */ size_t check_token(const char *haystack, const char *token) { size_t len = strlen(token); size_t extra; if (strncmp(haystack, token, len)) return 0; for (extra = 0; haystack[extra + len] != '\0'; extra++) if (!strchr(" \r\n\t", haystack[extra + len])) { if (extra) break; else return 0; /* no whitespace after token */ } return extra + len; } static int parse_show_args(const char *arg_c, char *setstring, Odr_int *start, Odr_int *number) { char *end_ptr; Odr_int start_position; size_t token_len; if (setnumber >= 0) sprintf(setstring, "%d", setnumber); else *setstring = '\0'; token_len = check_token(arg_c, "format"); if (token_len) { pretty_xml = 1; arg_c += token_len; } else pretty_xml = 0; token_len = check_token(arg_c, "all"); if (token_len) { *number = last_hit_count; *start = 1; return 1; } start_position = odr_strtol(arg_c, &end_ptr, 10); if (end_ptr == arg_c) return 1; *start = start_position; if (*end_ptr == '\0') return 1; while (yaz_isspace(*end_ptr)) end_ptr++; if (*end_ptr != '+') { printf("Bad show arg: expected +. Got %s\n", end_ptr); return 0; } end_ptr++; arg_c = end_ptr; *number = odr_strtol(arg_c, &end_ptr, 10); if (end_ptr == arg_c) { printf("Bad show arg: expected number after +\n"); return 0; } if (*end_ptr == '\0') return 1; while (yaz_isspace(*end_ptr)) end_ptr++; if (*end_ptr != '+') { printf("Bad show arg: + expected. Got %s\n", end_ptr); return 0; } strcpy(setstring, end_ptr+1); return 1; } static int send_Z3950_presentRequest(const char *arg) { Z_APDU *apdu = zget_APDU(out, Z_APDU_presentRequest); Z_PresentRequest *req = apdu->u.presentRequest; Z_RecordComposition compo; Odr_int nos = 1; char setstring[100]; req->referenceId = set_refid(out); if (!parse_show_args(arg, setstring, &setno, &nos)) return 0; if (*setstring) req->resultSetId = setstring; req->resultSetStartPoint = &setno; req->numberOfRecordsRequested = &nos; if (recordsyntax_size) req->preferredRecordSyntax = yaz_string_to_oid_odr(yaz_oid_std(), CLASS_RECSYN, recordsyntax_list[0], out); if (record_schema || recordsyntax_size >= 2) { req->recordComposition = &compo; compo.which = Z_RecordComp_complex; compo.u.complex = (Z_CompSpec *) odr_malloc(out, sizeof(*compo.u.complex)); compo.u.complex->selectAlternativeSyntax = (bool_t *) odr_malloc(out, sizeof(bool_t)); *compo.u.complex->selectAlternativeSyntax = 0; compo.u.complex->generic = (Z_Specification *) odr_malloc(out, sizeof(*compo.u.complex->generic)); compo.u.complex->generic->which = Z_Schema_oid; if (!record_schema) compo.u.complex->generic->schema.oid = 0; else { compo.u.complex->generic->schema.oid = yaz_string_to_oid_odr(yaz_oid_std(), CLASS_SCHEMA, record_schema, out); if (!compo.u.complex->generic->schema.oid) { /* OID wasn't a schema! Try record syntax instead. */ compo.u.complex->generic->schema.oid = (Odr_oid *) yaz_string_to_oid_odr(yaz_oid_std(), CLASS_RECSYN, record_schema, out); } } if (!elementSetNames) compo.u.complex->generic->elementSpec = 0; else { compo.u.complex->generic->elementSpec = (Z_ElementSpec *) odr_malloc(out, sizeof(Z_ElementSpec)); compo.u.complex->generic->elementSpec->which = Z_ElementSpec_elementSetName; compo.u.complex->generic->elementSpec->u.elementSetName = elementSetNames->u.generic; } compo.u.complex->num_dbSpecific = 0; compo.u.complex->dbSpecific = 0; compo.u.complex->num_recordSyntax = 0; compo.u.complex->recordSyntax = 0; if (recordsyntax_size >= 2) { int i; compo.u.complex->num_recordSyntax = recordsyntax_size; compo.u.complex->recordSyntax = (Odr_oid **) odr_malloc(out, recordsyntax_size * sizeof(Odr_oid*)); for (i = 0; i < recordsyntax_size; i++) compo.u.complex->recordSyntax[i] = yaz_string_to_oid_odr(yaz_oid_std(), CLASS_RECSYN, recordsyntax_list[i], out); } } else if (elementSetNames) { req->recordComposition = &compo; compo.which = Z_RecordComp_simple; compo.u.simple = elementSetNames; } send_apdu(apdu); printf("Sent presentRequest (" ODR_INT_PRINTF "+" ODR_INT_PRINTF ").\n", setno, nos); return 2; } #if YAZ_HAVE_XML2 static int send_SRW_presentRequest(const char *arg) { char setstring[100]; Odr_int nos = 1; Z_SRW_PDU *sr = srw_sr; if (!sr) return 0; if (!parse_show_args(arg, setstring, &setno, &nos)) return 0; sr->u.request->startRecord = odr_intdup(out, setno); sr->u.request->maximumRecords = odr_intdup(out, nos); if (record_schema) sr->u.request->recordSchema = record_schema; if (recordsyntax_size == 1 && !yaz_matchstr(recordsyntax_list[0], "xml")) sr->u.request->recordPacking = "xml"; return send_srw(sr); } #endif static void close_session(void) { if (conn) cs_close(conn); conn = 0; sent_close = 0; odr_reset(out); odr_reset(in); odr_reset(print); last_hit_count = 0; } static void process_Z3950_close(Z_Close *req) { Z_APDU *apdu = zget_APDU(out, Z_APDU_close); Z_Close *res = apdu->u.close; static char *reasons[] = { "finished", "shutdown", "system problem", "cost limit reached", "resources", "security violation", "protocolError", "lack of activity", "peer abort", "unspecified" }; printf("Reason: %s, message: %s\n", reasons[*req->closeReason], req->diagnosticInformation ? req->diagnosticInformation : "NULL"); if (sent_close) close_session(); else { *res->closeReason = Z_Close_finished; send_apdu(apdu); printf("Sent response.\n"); sent_close = 1; } } static int cmd_show(const char *arg) { if (protocol == PROTO_HTTP) { #if YAZ_HAVE_XML2 if (!conn) session_connect(cur_host); if (!conn) return 0; if (!send_SRW_presentRequest(arg)) return 0; #else return 0; #endif } else { if (!conn) { printf("Not connected yet\n"); return 0; } if (!send_Z3950_presentRequest(arg)) return 0; } return 2; } static void exit_client(int code) { file_history_save(file_history); file_history_destroy(&file_history); nmem_destroy(nmem_auth); exit(code); } static int cmd_quit(const char *arg) { printf("See you later, alligator.\n"); xmalloc_trav(""); exit_client(0); return 0; } static int cmd_cancel(const char *arg) { if (only_z3950()) return 0; else { Z_APDU *apdu = zget_APDU(out, Z_APDU_triggerResourceControlRequest); Z_TriggerResourceControlRequest *req = apdu->u.triggerResourceControlRequest; bool_t rfalse = 0; char command[16]; *command = '\0'; sscanf(arg, "%15s", command); if (only_z3950()) return 0; if (session_initResponse && !ODR_MASK_GET(session_initResponse->options, Z_Options_triggerResourceCtrl)) { printf("Target doesn't support cancel (trigger resource ctrl)\n"); return 0; } *req->requestedAction = Z_TriggerResourceControlRequest_cancel; req->resultSetWanted = &rfalse; req->referenceId = set_refid(out); send_apdu(apdu); printf("Sent cancel request\n"); if (!strcmp(command, "wait")) return 2; return 1; } } static int cmd_cancel_find(const char *arg) { int fres; if (only_z3950()) return 0; fres = cmd_find(arg); if (fres > 0) { return cmd_cancel(""); }; return fres; } static int send_Z3950_scanrequest(const char *set, const char *query, Odr_int *pos, Odr_int num, const char *term) { Z_APDU *apdu = zget_APDU(out, Z_APDU_scanRequest); Z_ScanRequest *req = apdu->u.scanRequest; if (only_z3950()) return 0; printf("query: %s\n", query); if (queryType == QueryType_CCL2RPN) { int error, pos; struct ccl_rpn_node *rpn; rpn = ccl_find_str(bibset, query, &error, &pos); if (error) { printf("CCL ERROR: %s\n", ccl_err_msg(error)); return -1; } req->attributeSet = yaz_string_to_oid_odr(yaz_oid_std(), CLASS_ATTSET, "Bib-1", out); if (!(req->termListAndStartPoint = ccl_scan_query(out, rpn))) { printf("Couldn't convert CCL to Scan term\n"); return -1; } ccl_rpn_delete(rpn); } else { YAZ_PQF_Parser pqf_parser = yaz_pqf_create(); if (!(req->termListAndStartPoint = yaz_pqf_scan(pqf_parser, out, &req->attributeSet, query))) { const char *pqf_msg; size_t off; int code = yaz_pqf_error(pqf_parser, &pqf_msg, &off); int ioff = off; printf("%*s^\n", ioff+7, ""); printf("Prefix query error: %s (code %d)\n", pqf_msg, code); yaz_pqf_destroy(pqf_parser); return -1; } yaz_pqf_destroy(pqf_parser); } if (queryCharset && outputCharset) { yaz_iconv_t cd = yaz_iconv_open(queryCharset, outputCharset); if (!cd) { printf("Conversion from %s to %s unsupported\n", outputCharset, queryCharset); return -1; } yaz_query_charset_convert_apt(req->termListAndStartPoint, out, cd); yaz_iconv_close(cd); } if (term && *term) { if (req->termListAndStartPoint->term && req->termListAndStartPoint->term->which == Z_Term_general && req->termListAndStartPoint->term->u.general) { req->termListAndStartPoint->term->u.general->buf = (unsigned char *) odr_strdup(out, term); req->termListAndStartPoint->term->u.general->len = req->termListAndStartPoint->term->u.general->size = strlen(term); } } req->referenceId = set_refid(out); req->num_databaseNames = num_databaseNames; req->databaseNames = databaseNames; req->numberOfTermsRequested = # req->preferredPositionInResponse = pos; req->stepSize = odr_intdup(out, scan_stepSize); if (set) yaz_oi_set_string_oid(&req->otherInfo, out, yaz_oid_userinfo_scan_set, 1, set); send_apdu(apdu); return 2; } static int send_sortrequest(const char *arg, int newset) { Z_APDU *apdu = zget_APDU(out, Z_APDU_sortRequest); Z_SortRequest *req = apdu->u.sortRequest; Z_SortKeySpecList *sksl = (Z_SortKeySpecList *) odr_malloc(out, sizeof(*sksl)); char setstring[32]; if (only_z3950()) return 0; if (setnumber >= 0) sprintf(setstring, "%d", setnumber); else sprintf(setstring, "default"); req->referenceId = set_refid(out); req->num_inputResultSetNames = 1; req->inputResultSetNames = (Z_InternationalString **) odr_malloc(out, sizeof(*req->inputResultSetNames)); req->inputResultSetNames[0] = odr_strdup(out, setstring); if (newset && setnumber >= 0) sprintf(setstring, "%d", ++setnumber); req->sortedResultSetName = odr_strdup(out, setstring); req->sortSequence = yaz_sort_spec(out, arg); if (!req->sortSequence) { printf("Missing sort specifications\n"); return -1; } send_apdu(apdu); return 2; } static void display_term_info(Z_TermInfo *t) { if (t->displayTerm) printf("%s", t->displayTerm); else if (t->term->which == Z_Term_general) printf("%.*s", t->term->u.general->len, t->term->u.general->buf); else printf("Term (not general)"); if (t->term->which == Z_Term_general) sprintf(last_scan_line, "%.*s", t->term->u.general->len, t->term->u.general->buf); if (t->globalOccurrences) printf(" (" ODR_INT_PRINTF ")\n", *t->globalOccurrences); else printf("\n"); } static void process_Z3950_scanResponse(Z_ScanResponse *res) { int i; Z_Entry **entries = NULL; int num_entries = 0; printf("Received ScanResponse\n"); print_refid(res->referenceId); printf(ODR_INT_PRINTF " entries", *res->numberOfEntriesReturned); if (res->positionOfTerm) printf(", position=" ODR_INT_PRINTF, *res->positionOfTerm); printf("\n"); if (*res->scanStatus != Z_Scan_success) printf("Scan returned code " ODR_INT_PRINTF "\n", *res->scanStatus); if (!res->entries) return; if ((entries = res->entries->entries)) num_entries = res->entries->num_entries; for (i = 0; i < num_entries; i++) { int pos_term = res->positionOfTerm ? *res->positionOfTerm : -1; if (entries[i]->which == Z_Entry_termInfo) { printf("%c ", i + 1 == pos_term ? '*' : ' '); display_term_info(entries[i]->u.termInfo); } else display_diagrecs(&entries[i]->u.surrogateDiagnostic, 1); } if (res->entries->nonsurrogateDiagnostics) display_diagrecs(res->entries->nonsurrogateDiagnostics, res->entries->num_nonsurrogateDiagnostics); } static void process_Z3950_sortResponse(Z_SortResponse *res) { printf("Received SortResponse: status="); switch (*res->sortStatus) { case Z_SortResponse_success: printf("success"); break; case Z_SortResponse_partial_1: printf("partial"); break; case Z_SortResponse_failure: printf("failure"); break; default: printf("unknown (" ODR_INT_PRINTF ")", *res->sortStatus); } printf("\n"); print_refid (res->referenceId); if (res->diagnostics) display_diagrecs(res->diagnostics, res->num_diagnostics); } static void process_Z3950_deleteResultSetResponse( Z_DeleteResultSetResponse *res) { printf("Got deleteResultSetResponse status=" ODR_INT_PRINTF "\n", *res->deleteOperationStatus); if (res->deleteListStatuses) { int i; for (i = 0; i < res->deleteListStatuses->num; i++) { printf("%s status=" ODR_INT_PRINTF "\n", res->deleteListStatuses->elements[i]->id, *res->deleteListStatuses->elements[i]->status); } } } static int cmd_sort_generic(const char *arg, int newset) { if (only_z3950()) return 0; if (session_initResponse && !ODR_MASK_GET(session_initResponse->options, Z_Options_sort)) { printf("Target doesn't support sort\n"); return 0; } if (*arg) { if (send_sortrequest(arg, newset) < 0) return 0; return 2; } return 0; } static int cmd_sort(const char *arg) { return cmd_sort_generic(arg, 0); } static int cmd_sort_newset(const char *arg) { return cmd_sort_generic(arg, 1); } static int cmd_scanstep(const char *arg) { scan_stepSize = atoi(arg); return 0; } static int cmd_scanpos(const char *arg) { if (!strcmp(arg, "none")) strcpy(scan_position, "none"); else { int dummy; int r = sscanf(arg, "%d", &dummy); if (r == 1 && strlen(arg) < sizeof(scan_position)-1) strcpy(scan_position, arg); else printf("specify number of none for scanpos\n"); } return 0; } static int cmd_scansize(const char *arg) { int r = sscanf(arg, "%d", &scan_size); if (r == 0) scan_size = 20; return 0; } static int cmd_scan_common(const char *set, const char *arg) { Odr_int pos, *pos_p = 0; const char *scan_term = 0; const char *scan_query = 0; if (!*arg) { pos = 1; pos_p = &pos; scan_query = last_scan_query; scan_term = last_scan_line; } else { strcpy(last_scan_query, arg); scan_query = arg; if (strcmp(scan_position, "none")) { pos = odr_atoi(scan_position); pos_p = &pos; } } if (protocol == PROTO_HTTP) { #if YAZ_HAVE_XML2 if (!conn) session_connect(cur_host); if (!conn) return 0; if (send_SRW_scanRequest(scan_query, pos_p, scan_size) < 0) return 0; return 2; #else return 0; #endif } else { if (*cur_host && !conn && auto_reconnect) { session_connect(cur_host); wait_and_handle_response(0); } if (!conn) return 0; if (session_initResponse && !ODR_MASK_GET(session_initResponse->options, Z_Options_scan)) { printf("Target doesn't support scan\n"); return 0; } if (send_Z3950_scanrequest(set, scan_query, pos_p, scan_size, scan_term) < 0) return 0; return 2; } } static int cmd_scan(const char *arg) { return cmd_scan_common(0, arg); } static int cmd_setscan(const char *arg) { char setstring[100]; int nor; if (sscanf(arg, "%99s%n", setstring, &nor) < 1) { printf("missing set for setscan\n"); return 0; } return cmd_scan_common(setstring, arg + nor); } static int cmd_schema(const char *arg) { xfree(record_schema); record_schema = 0; if (arg && *arg) record_schema = xstrdup(arg); return 1; } static int cmd_format(const char *arg) { const char *cp = arg; int nor; int idx = 0; int i; char form_str[41]; if (!arg || !*arg) { printf("Usage: format \n"); return 0; } while (sscanf(cp, "%40s%n", form_str, &nor) >= 1 && nor > 0 && idx < RECORDSYNTAX_MAX) { if (strcmp(form_str, "none") && !yaz_string_to_oid_odr(yaz_oid_std(), CLASS_RECSYN, form_str, out)) { printf("Bad format: %s\n", form_str); return 0; } cp += nor; } for (i = 0; i < recordsyntax_size; i++) { xfree(recordsyntax_list[i]); recordsyntax_list[i] = 0; } cp = arg; while (sscanf(cp, "%40s%n", form_str, &nor) >= 1 && nor > 0 && idx < RECORDSYNTAX_MAX) { if (!strcmp(form_str, "none")) break; recordsyntax_list[idx] = xstrdup(form_str); cp += nor; idx++; } recordsyntax_size = idx; return 1; } static int cmd_elements(const char *arg) { static Z_ElementSetNames esn; static char what[100]; if (!arg || !*arg) { elementSetNames = 0; return 1; } strcpy(what, arg); esn.which = Z_ElementSetNames_generic; esn.u.generic = what; elementSetNames = &esn; return 1; } static int cmd_querytype(const char *arg) { if (!strcmp(arg, "ccl")) queryType = QueryType_CCL; else if (!strcmp(arg, "prefix") || !strcmp(arg, "rpn")) queryType = QueryType_Prefix; else if (!strcmp(arg, "ccl2rpn") || !strcmp(arg, "cclrpn")) queryType = QueryType_CCL2RPN; else if (!strcmp(arg, "cql")) queryType = QueryType_CQL; else if (!strcmp(arg, "cql2rpn") || !strcmp(arg, "cqlrpn")) queryType = QueryType_CQL2RPN; else { printf("Querytype must be one of:\n"); printf(" prefix - Prefix query\n"); printf(" ccl - CCL query\n"); printf(" ccl2rpn - CCL query converted to RPN\n"); printf(" cql - CQL\n"); printf(" cql2rpn - CQL query converted to RPN\n"); return 0; } return 1; } static int cmd_refid(const char *arg) { xfree(refid); refid = NULL; if (*arg) refid = xstrdup(arg); return 1; } static int cmd_close(const char *arg) { Z_APDU *apdu; Z_Close *req; if (only_z3950()) return 0; apdu = zget_APDU(out, Z_APDU_close); req = apdu->u.close; *req->closeReason = Z_Close_finished; send_apdu(apdu); printf("Sent close request.\n"); sent_close = 1; return 2; } int cmd_packagename(const char* arg) { xfree(esPackageName); esPackageName = NULL; if (*arg) esPackageName = xstrdup(arg); return 1; } static int cmd_proxy(const char* arg) { xfree(yazProxy); yazProxy = 0; if (*arg) yazProxy = xstrdup(arg); return 1; } static int cmd_marccharset(const char *arg) { char l1[30]; *l1 = 0; if (sscanf(arg, "%29s", l1) < 1) { printf("MARC character set is `%s'\n", marcCharset ? marcCharset: "none"); return 1; } xfree(marcCharset); marcCharset = 0; if (strcmp(l1, "-") && strcmp(l1, "none")) marcCharset = xstrdup(l1); return 1; } static int cmd_querycharset(const char *arg) { char l1[30]; *l1 = 0; if (sscanf(arg, "%29s", l1) < 1) { printf("Query character set is `%s'\n", queryCharset ? queryCharset: "none"); return 1; } xfree(queryCharset); queryCharset = 0; if (strcmp(l1, "-") && strcmp(l1, "none")) queryCharset = xstrdup(l1); return 1; } static int cmd_displaycharset(const char *arg) { char l1[30]; *l1 = 0; if (sscanf(arg, "%29s", l1) < 1) { printf("Display character set is `%s'\n", outputCharset ? outputCharset: "none"); } else { xfree(outputCharset); outputCharset = 0; if (!strcmp(l1, "auto") && codeset) { if (codeset) { printf("Display character set: %s\n", codeset); outputCharset = xstrdup(codeset); } else printf("No codeset found on this system\n"); } else if (strcmp(l1, "-") && strcmp(l1, "none")) outputCharset = xstrdup(l1); } return 1; } static int cmd_negcharset(const char *arg) { char l1[30]; *l1 = 0; if (sscanf(arg, "%29s %d %d", l1, &negotiationCharsetRecords, &negotiationCharsetVersion) < 1) { printf("Negotiation character set `%s'\n", negotiationCharset ? negotiationCharset: "none"); if (negotiationCharset) { printf("Records in charset %s\n", negotiationCharsetRecords ? "yes" : "no"); printf("Charneg version %d\n", negotiationCharsetVersion); } } else { xfree(negotiationCharset); negotiationCharset = NULL; if (*l1 && strcmp(l1, "-") && strcmp(l1, "none")) { negotiationCharset = xstrdup(l1); printf("Character set negotiation : %s\n", negotiationCharset); } } return 1; } static int cmd_charset(const char* arg) { char l1[30], l2[30], l3[30], l4[30]; *l1 = *l2 = *l3 = *l4 = '\0'; if (sscanf(arg, "%29s %29s %29s %29s", l1, l2, l3, l4) < 1) { cmd_negcharset(""); cmd_displaycharset(""); cmd_marccharset(""); cmd_querycharset(""); } else { cmd_negcharset(l1); if (*l2) cmd_displaycharset(l2); if (*l3) cmd_marccharset(l3); if (*l4) cmd_querycharset(l4); } return 1; } static int cmd_lang(const char* arg) { if (*arg == '\0') { printf("Current language is `%s'\n", yazLang ? yazLang : "none"); return 1; } xfree(yazLang); yazLang = NULL; if (*arg) yazLang = xstrdup(arg); return 1; } static int cmd_source(const char* arg, int echo ) { /* first should open the file and read one line at a time.. */ FILE* includeFile; char line[102400], *cp; if (strlen(arg) < 1) { fprintf(stderr, "Error in source command use a filename\n"); return -1; } includeFile = fopen(arg, "r"); if (!includeFile) { fprintf(stderr, "Unable to open file %s for reading\n",arg); return -1; } while (fgets(line, sizeof(line), includeFile)) { if (strlen(line) < 2) continue; if (line[0] == '#') continue; if ((cp = strrchr(line, '\n'))) *cp = '\0'; if (echo) printf("processing line: %s\n", line); process_cmd_line(line); } if (fclose(includeFile)) { perror("unable to close include file"); exit(1); } return 1; } static int cmd_source_echo(const char* arg) { cmd_source(arg, 1); return 1; } static int cmd_subshell(const char* args) { int ret = system(strlen(args) ? args : getenv("SHELL")); printf("\n"); if (ret) { printf("Exit %d\n", ret); } return 1; } static int cmd_set_berfile(const char *arg) { if (ber_file && ber_file != stdout && ber_file != stderr) fclose(ber_file); if (!strcmp(arg, "")) ber_file = 0; else if (!strcmp(arg, "-")) ber_file = stdout; else ber_file = fopen(arg, "a"); return 1; } static int cmd_set_apdufile(const char *arg) { if (apdu_file && apdu_file != stderr && apdu_file != stderr) fclose(apdu_file); if (!strcmp(arg, "")) apdu_file = 0; else if (!strcmp(arg, "-")) apdu_file = stderr; else { apdu_file = fopen(arg, "a"); if (!apdu_file) perror("unable to open apdu log file"); } if (apdu_file) odr_setprint(print, apdu_file); return 1; } static int cmd_set_cclfile(const char* arg) { FILE *inf; bibset = ccl_qual_mk(); inf = fopen(arg, "r"); if (!inf) perror("unable to open CCL file"); else { ccl_qual_file(bibset, inf); fclose(inf); } strcpy(ccl_fields,arg); return 0; } static int cmd_set_cqlfile(const char* arg) { cql_transform_t newcqltrans; if ((newcqltrans = cql_transform_open_fname(arg)) == 0) { perror("unable to open CQL file"); return 0; } if (cqltrans != 0) cql_transform_close(cqltrans); cqltrans = newcqltrans; strcpy(cql_fields, arg); return 0; } static int cmd_set_auto_reconnect(const char* arg) { if (strlen(arg)==0) auto_reconnect = ! auto_reconnect; else if (strcmp(arg,"on")==0) auto_reconnect = 1; else if (strcmp(arg,"off")==0) auto_reconnect = 0; else { printf("Error use on or off\n"); return 1; } if (auto_reconnect) printf("Set auto reconnect enabled.\n"); else printf("Set auto reconnect disabled.\n"); return 0; } static int cmd_set_auto_wait(const char* arg) { if (strlen(arg)==0) auto_wait = ! auto_wait; else if (strcmp(arg,"on")==0) auto_wait = 1; else if (strcmp(arg,"off")==0) auto_wait = 0; else { printf("Error use on or off\n"); return 1; } if (auto_wait) printf("Set auto wait enabled.\n"); else printf("Set auto wait disabled.\n"); return 0; } static int cmd_set_marcdump(const char* arg) { if (marc_file && marc_file != stderr) { /* don't close stdout*/ fclose(marc_file); } if (!strcmp(arg, "")) marc_file = 0; else if (!strcmp(arg, "-")) marc_file = stderr; else { marc_file = fopen(arg, "a"); if (!marc_file) perror("unable to open marc log file"); } return 1; } static void marc_file_write(const char *buf, size_t sz) { if (marc_file) { if (fwrite(buf, 1, sz, marc_file) != sz) { perror("marcfile write"); } } } /* this command takes 3 arge {name class oid} */ static int cmd_register_oid(const char* args) { static struct { char* className; oid_class oclass; } oid_classes[] = { {"appctx",CLASS_APPCTX}, {"absyn",CLASS_ABSYN}, {"attset",CLASS_ATTSET}, {"transyn",CLASS_TRANSYN}, {"diagset",CLASS_DIAGSET}, {"recsyn",CLASS_RECSYN}, {"resform",CLASS_RESFORM}, {"accform",CLASS_ACCFORM}, {"extserv",CLASS_EXTSERV}, {"userinfo",CLASS_USERINFO}, {"elemspec",CLASS_ELEMSPEC}, {"varset",CLASS_VARSET}, {"schema",CLASS_SCHEMA}, {"tagset",CLASS_TAGSET}, {"general",CLASS_GENERAL}, {0,(enum oid_class) 0} }; char oname_str[101], oclass_str[101], oid_str[101]; int i; oid_class oidclass = CLASS_GENERAL; Odr_oid oid[OID_SIZE]; if (sscanf(args, "%100[^ ] %100[^ ] %100s", oname_str,oclass_str, oid_str) < 1) { printf("Error in register command \n"); return 0; } for (i = 0; oid_classes[i].className; i++) { if (!strcmp(oid_classes[i].className, oclass_str)) { oidclass=oid_classes[i].oclass; break; } } if (!(oid_classes[i].className)) { printf("Unknown oid class %s\n",oclass_str); return 0; } oid_dotstring_to_oid(oid_str, oid); if (yaz_oid_add(yaz_oid_std(), oidclass, oname_str, oid)) { printf("oid %s already exists, registration failed\n", oname_str); } return 1; } static int cmd_push_command(const char* arg) { #if HAVE_READLINE_HISTORY_H if (strlen(arg) > 1) add_history(arg); #else fprintf(stderr,"Not compiled with the readline/history module\n"); #endif return 1; } void source_rc_file(const char *rc_file) { /* If rc_file != NULL, source that. Else Look for .yazclientrc and read it if it exists. If it does not exist, read $HOME/.yazclientrc instead */ struct stat statbuf; if (rc_file) { if (stat(rc_file, &statbuf) == 0) cmd_source(rc_file, 0); else { fprintf(stderr, "yaz_client: cannot source '%s'\n", rc_file); exit(1); } } else { char fname[1000]; strcpy(fname, ".yazclientrc"); if (stat(fname, &statbuf)==0) { cmd_source(fname, 0); } else { const char* homedir = getenv("HOME"); if (homedir) { sprintf(fname, "%.800s/%s", homedir, ".yazclientrc"); if (stat(fname, &statbuf)==0) cmd_source(fname, 0); } } } } static void add_to_readline_history(void *client_data, const char *line) { #if HAVE_READLINE_HISTORY_H if (strlen(line)) add_history(line); #endif } static void initialize(const char *rc_file) { FILE *inf; int i; if (!(out = odr_createmem(ODR_ENCODE)) || !(in = odr_createmem(ODR_DECODE)) || !(print = odr_createmem(ODR_PRINT))) { fprintf(stderr, "failed to allocate ODR streams\n"); exit(1); } strcpy(scan_position, "1"); setvbuf(stdout, 0, _IONBF, 0); if (apdu_file) odr_setprint(print, apdu_file); bibset = ccl_qual_mk(); inf = fopen(ccl_fields, "r"); if (inf) { ccl_qual_file(bibset, inf); fclose(inf); } cqltrans = cql_transform_open_fname(cql_fields); /* If this fails, no problem: we detect cqltrans == 0 later */ #if HAVE_READLINE_READLINE_H rl_attempted_completion_function = (char **(*)(const char *, int, int)) readline_completer; #endif for (i = 0; i < maxOtherInfosSupported; ++i) { extraOtherInfos[i].oid[0] = -1; extraOtherInfos[i].value = 0; } cmd_format("usmarc"); file_history = file_history_new(); source_rc_file(rc_file); file_history_load(file_history); file_history_trav(file_history, 0, add_to_readline_history); } #if HAVE_GETTIMEOFDAY struct timeval tv_start; #endif #if YAZ_HAVE_XML2 static void handle_srw_record(Z_SRW_record *rec) { if (rec->recordPosition) { printf("pos=" ODR_INT_PRINTF, *rec->recordPosition); setno = *rec->recordPosition + 1; } if (rec->recordSchema) printf(" schema=%s", rec->recordSchema); printf("\n"); if (rec->recordData_buf && rec->recordData_len) { print_xml_record(rec->recordData_buf, rec->recordData_len); marc_file_write(rec->recordData_buf, rec->recordData_len); } else printf("No data!"); printf("\n"); } static void handle_srw_explain_response(Z_SRW_explainResponse *res) { handle_srw_record(&res->record); } static void handle_srw_response(Z_SRW_searchRetrieveResponse *res) { int i; printf("Received SRW SearchRetrieve Response\n"); for (i = 0; inum_diagnostics; i++) { if (res->diagnostics[i].uri) printf("SRW diagnostic %s\n", res->diagnostics[i].uri); else printf("SRW diagnostic missing or could not be decoded\n"); if (res->diagnostics[i].message) printf("Message: %s\n", res->diagnostics[i].message); if (res->diagnostics[i].details) printf("Details: %s\n", res->diagnostics[i].details); } if (res->numberOfRecords) printf("Number of hits: " ODR_INT_PRINTF "\n", *res->numberOfRecords); if (res->facetList) display_facets(res->facetList); if (res->suggestions) printf("Suggestions:\n%s\n", res->suggestions); for (i = 0; inum_records; i++) handle_srw_record(res->records + i); } static void handle_srw_scan_term(Z_SRW_scanTerm *term) { if (term->displayTerm) printf("%s:", term->displayTerm); else if (term->value) printf("%s:", term->value); else printf("No value:"); if (term->numberOfRecords) printf(" " ODR_INT_PRINTF, *term->numberOfRecords); if (term->whereInList) printf(" %s", term->whereInList); if (term->value && term->displayTerm) printf(" %s", term->value); strcpy(last_scan_line, term->value); printf("\n"); } static void handle_srw_scan_response(Z_SRW_scanResponse *res) { int i; printf("Received SRW Scan Response\n"); for (i = 0; inum_diagnostics; i++) { if (res->diagnostics[i].uri) printf("SRW diagnostic %s\n", res->diagnostics[i].uri); else printf("SRW diagnostic missing or could not be decoded\n"); if (res->diagnostics[i].message) printf("Message: %s\n", res->diagnostics[i].message); if (res->diagnostics[i].details) printf("Details: %s\n", res->diagnostics[i].details); } if (res->terms) for (i = 0; inum_terms; i++) handle_srw_scan_term(res->terms + i); } static void http_response(Z_HTTP_Response *hres) { int ret = -1; const char *connection_head = z_HTTP_header_lookup(hres->headers, "Connection"); if (hres->code != 200) { printf("HTTP Error Status=%d\n", hres->code); } if (!yaz_srw_check_content_type(hres)) printf("Content type does not appear to be XML\n"); else { if (!yaz_matchstr(sru_method, "solr")) { Z_SRW_PDU *sr = 0; ODR o = odr_createmem(ODR_DECODE); ret = yaz_solr_decode_response(o, hres, &sr); if (ret == 0 && sr->which == Z_SRW_searchRetrieve_response) handle_srw_response(sr->u.response); else { printf("Decoding of SOLR package failed\n"); ret = -1; } odr_destroy(o); } else { Z_SOAP *soap_package = 0; ODR o = odr_createmem(ODR_DECODE); Z_SOAP_Handler soap_handlers[3] = { {YAZ_XMLNS_SRU_v1_1, 0, (Z_SOAP_fun) yaz_srw_codec}, {YAZ_XMLNS_UPDATE_v0_9, 0, (Z_SOAP_fun) yaz_ucp_codec}, {0, 0, 0} }; ret = z_soap_codec(o, &soap_package, &hres->content_buf, &hres->content_len, soap_handlers); if (!ret && soap_package->which == Z_SOAP_generic) { Z_SRW_PDU *sr = (Z_SRW_PDU *) soap_package->u.generic->p; if (sr->which == Z_SRW_searchRetrieve_response) handle_srw_response(sr->u.response); else if (sr->which == Z_SRW_explain_response) handle_srw_explain_response(sr->u.explain_response); else if (sr->which == Z_SRW_scan_response) handle_srw_scan_response(sr->u.scan_response); else if (sr->which == Z_SRW_update_response) printf("Got update response. Status: %s\n", sr->u.update_response->operationStatus); else { printf("Decoding of SRW package failed\n"); ret = -1; } } else if (soap_package && (soap_package->which == Z_SOAP_fault || soap_package->which == Z_SOAP_error)) { printf("SOAP Fault code %s\n", soap_package->u.fault->fault_code); printf("SOAP Fault string %s\n", soap_package->u.fault->fault_string); if (soap_package->u.fault->details) printf("SOAP Details %s\n", soap_package->u.fault->details); } else { printf("z_soap_codec failed. (no SOAP error)\n"); ret = -1; } odr_destroy(o); } } if (ret) close_session(); /* close session on error */ else { if (!strcmp(hres->version, "1.0")) { /* HTTP 1.0: only if Keep-Alive we stay alive.. */ if (!connection_head || strcmp(connection_head, "Keep-Alive")) close_session(); } else { /* HTTP 1.1: only if no close we stay alive .. */ if (connection_head && !strcmp(connection_head, "close")) close_session(); } } } #endif #define max_HTTP_redirects 2 static void wait_and_handle_response(int one_response_only) { int reconnect_ok = 1; int no_redirects = 0; int res; char *netbuffer= 0; int netbufferlen = 0; #if HAVE_GETTIMEOFDAY int got_tv_end = 0; struct timeval tv_end; #endif Z_GDU *gdu; while(conn) { res = cs_get(conn, &netbuffer, &netbufferlen); if (reconnect_ok && res <= 0 && protocol == PROTO_HTTP) { cs_close(conn); conn = 0; session_connect(cur_host); reconnect_ok = 0; if (conn) { char *buf_out; int len_out; buf_out = odr_getbuf(out, &len_out, 0); do_hex_dump(buf_out, len_out); cs_put(conn, buf_out, len_out); odr_reset(out); continue; } } else if (res <= 0) { printf("Target closed connection\n"); close_session(); break; } #if HAVE_GETTIMEOFDAY if (got_tv_end == 0) gettimeofday(&tv_end, 0); /* count first one only */ got_tv_end++; #endif odr_reset(out); odr_reset(in); /* release APDU from last round */ record_last = 0; do_hex_dump(netbuffer, res); odr_setbuf(in, netbuffer, res, 0); if (!z_GDU(in, &gdu, 0, 0)) { FILE *f = ber_file ? ber_file : stdout; odr_perror(in, "Decoding incoming APDU"); fprintf(f, "[Near %ld]\n", (long) odr_offset(in)); fprintf(f, "Packet dump:\n---------\n"); odr_dumpBER(f, netbuffer, res); fprintf(f, "---------\n"); if (apdu_file) { z_GDU(print, &gdu, 0, 0); odr_reset(print); } if (conn && cs_more(conn)) continue; break; } if (ber_file) odr_dumpBER(ber_file, netbuffer, res); if (apdu_file && !z_GDU(print, &gdu, 0, 0)) { odr_perror(print, "Failed to print incoming APDU"); odr_reset(print); continue; } if (gdu->which == Z_GDU_Z3950) { Z_APDU *apdu = gdu->u.z3950; switch (apdu->which) { case Z_APDU_initResponse: process_Z3950_initResponse(apdu->u.initResponse); break; case Z_APDU_searchResponse: process_Z3950_searchResponse(apdu->u.searchResponse); break; case Z_APDU_scanResponse: process_Z3950_scanResponse(apdu->u.scanResponse); break; case Z_APDU_presentResponse: print_refid(apdu->u.presentResponse->referenceId); setno += *apdu->u.presentResponse->numberOfRecordsReturned; if (apdu->u.presentResponse->records) display_records(apdu->u.presentResponse->records); else printf("No records.\n"); printf("nextResultSetPosition = " ODR_INT_PRINTF "\n", *apdu->u.presentResponse->nextResultSetPosition); break; case Z_APDU_sortResponse: process_Z3950_sortResponse(apdu->u.sortResponse); break; case Z_APDU_extendedServicesResponse: printf("Got extended services response\n"); process_Z3950_ESResponse(apdu->u.extendedServicesResponse); break; case Z_APDU_close: printf("Target has closed the association.\n"); process_Z3950_close(apdu->u.close); break; case Z_APDU_resourceControlRequest: process_Z3950_resourceControlRequest( apdu->u.resourceControlRequest); break; case Z_APDU_deleteResultSetResponse: process_Z3950_deleteResultSetResponse( apdu->u.deleteResultSetResponse); break; default: printf("Received unknown APDU type (%d).\n", apdu->which); close_session(); } } #if YAZ_HAVE_XML2 else if (gdu->which == Z_GDU_HTTP_Response) { Z_HTTP_Response *hres = gdu->u.HTTP_Response; int code = hres->code; const char *location = 0; if ((code == 301 || code == 302) && no_redirects < max_HTTP_redirects && !yaz_matchstr(sru_method, "get") && (location = z_HTTP_header_lookup(hres->headers, "Location"))) { const char *base_tmp; session_connect_base(location, &base_tmp); no_redirects++; if (conn) { if (send_SRW_redirect(location, hres) == 2) continue; } printf("Redirect failed\n"); } else http_response(gdu->u.HTTP_Response); } #endif if (one_response_only) break; if (conn && !cs_more(conn)) break; } #if HAVE_GETTIMEOFDAY if (got_tv_end) { #if 0 printf("S/U S/U=%ld/%ld %ld/%ld", (long) tv_start.tv_sec, (long) tv_start.tv_usec, (long) tv_end.tv_sec, (long) tv_end.tv_usec); #endif printf("Elapsed: %.6f\n", (double) tv_end.tv_usec / 1e6 + tv_end.tv_sec - ((double) tv_start.tv_usec / 1e6 + tv_start.tv_sec)); } #endif xfree(netbuffer); } static int cmd_cclparse(const char* arg) { int error, pos; struct ccl_rpn_node *rpn=NULL; rpn = ccl_find_str(bibset, arg, &error, &pos); if (error) { int ioff = 3+strlen(last_cmd)+1+pos; printf("%*s^ - ", ioff, " "); printf("%s\n", ccl_err_msg(error)); } else { if (rpn) { ccl_pr_tree(rpn, stdout); } } if (rpn) ccl_rpn_delete(rpn); printf("\n"); return 0; } static int cmd_set_otherinfo(const char* args) { char oidstr[101], otherinfoString[101]; int otherinfoNo; int sscan_res; sscan_res = sscanf(args, "%d %100[^ ] %100s", &otherinfoNo, oidstr, otherinfoString); if (sscan_res > 0 && otherinfoNo >= maxOtherInfosSupported) { printf("Error otherinfo index too large (%d>=%d)\n", otherinfoNo,maxOtherInfosSupported); return 0; } if (sscan_res==1) { /* reset this otherinfo */ extraOtherInfos[otherinfoNo].oid[0] = -1; xfree(extraOtherInfos[otherinfoNo].value); extraOtherInfos[otherinfoNo].value = 0; return 0; } if (sscan_res != 3) { printf("Error in set_otherinfo command \n"); return 0; } else { NMEM oid_tmp = nmem_create(); const Odr_oid *oid = yaz_string_to_oid_nmem(yaz_oid_std(), CLASS_GENERAL, oidstr, oid_tmp); oid_oidcpy(extraOtherInfos[otherinfoNo].oid, oid); xfree(extraOtherInfos[otherinfoNo].value); extraOtherInfos[otherinfoNo].value = xstrdup(otherinfoString); nmem_destroy(oid_tmp); } return 0; } static int cmd_sleep(const char* args ) { int sec = atoi(args); if (sec > 0) { #ifdef WIN32 Sleep(sec*1000); #else sleep(sec); #endif printf("Done sleeping %d seconds\n", sec); } return 1; } static int cmd_list_otherinfo(const char* args) { int i; if (strlen(args)>0) { i = atoi(args); if (i >= maxOtherInfosSupported) { printf("Error otherinfo index to large (%d>%d)\n",i,maxOtherInfosSupported); return 0; } if (extraOtherInfos[i].value) { char name_oid[OID_STR_MAX]; oid_class oclass; const char *name = yaz_oid_to_string_buf(extraOtherInfos[i].oid, &oclass, name_oid); printf(" otherinfo %d %s %s\n", i, name ? name : "null", extraOtherInfos[i].value); } } else { for (i = 0; i < maxOtherInfosSupported; ++i) { if (extraOtherInfos[i].value) { char name_oid[OID_STR_MAX]; oid_class oclass; const char *name = yaz_oid_to_string_buf(extraOtherInfos[i].oid, &oclass, name_oid); printf(" otherinfo %d %s %s\n", i, name ? name : "null", extraOtherInfos[i].value); } } } return 0; } static int cmd_list_all(const char* args) { int i; /* connection options */ if (conn) printf("Connected to : %s\n", cur_host); else if (*cur_host) printf("Not connected to : %s\n", cur_host); else printf("Not connected : \n"); if (yazProxy) printf("using proxy : %s\n",yazProxy); printf("auto_reconnect : %s\n",auto_reconnect?"on":"off"); printf("auto_wait : %s\n",auto_wait?"on":"off"); if (!auth) printf("Authentication : none\n"); else { switch (auth->which) { case Z_IdAuthentication_idPass: printf("Authentication : IdPass\n"); printf(" Login User : %s\n",auth->u.idPass->userId?auth->u.idPass->userId:""); printf(" Login Group : %s\n",auth->u.idPass->groupId?auth->u.idPass->groupId:""); printf(" Password : %s\n",auth->u.idPass->password?auth->u.idPass->password:""); break; case Z_IdAuthentication_open: printf("Authentication : psOpen\n"); printf(" Open string : %s\n",auth->u.open); break; default: printf("Authentication : Unknown\n"); } } if (negotiationCharset) printf("Neg. Character set : `%s'\n", negotiationCharset); /* bases */ printf("Bases : "); for (i = 0; i 0) { printf("Format : %s\n", recordsyntax_list[0]); } printf("Schema : %s\n",record_schema ? record_schema : "not set"); printf("Elements : %s\n",elementSetNames?elementSetNames->u.generic:""); /* loging options */ printf("APDU log : %s\n",apdu_file?"on":"off"); printf("Record log : %s\n",marc_file?"on":"off"); /* other infos */ printf("Other Info: \n"); cmd_list_otherinfo(""); return 0; } static int cmd_clear_otherinfo(const char* args) { if (strlen(args) > 0) { int otherinfoNo = atoi(args); if (otherinfoNo >= maxOtherInfosSupported) { printf("Error otherinfo index too large (%d>=%d)\n", otherinfoNo, maxOtherInfosSupported); return 0; } if (extraOtherInfos[otherinfoNo].value) { /* only clear if set. */ extraOtherInfos[otherinfoNo].oid[0] = -1; xfree(extraOtherInfos[otherinfoNo].value); extraOtherInfos[otherinfoNo].value = 0; } } else { int i; for (i = 0; i < maxOtherInfosSupported; ++i) { if (extraOtherInfos[i].value) { extraOtherInfos[i].oid[0] = -1; xfree(extraOtherInfos[i].value); extraOtherInfos[i].value = 0; } } } return 0; } static int cmd_wait_response(const char *arg) { int i; int wait_for = atoi(arg); if (wait_for < 1) wait_for = 1; for (i = 0 ; i < wait_for; ++i ) wait_and_handle_response(1); return 0; } static int cmd_help(const char *line); typedef char *(*completerFunctionType)(const char *text, int state); static struct { char *cmd; int (*fun)(const char *arg); char *ad; completerFunctionType rl_completerfunction; int complete_filenames; const char **local_tabcompletes; } cmd_array[] = { {"open", cmd_open, "('tcp'|'ssl')':[':'][/]",NULL,0,NULL}, {"quit", cmd_quit, "",NULL,0,NULL}, {"find", cmd_find, "",NULL,0,NULL}, {"facets", cmd_facets, "",NULL,0,NULL}, {"delete", cmd_delete, "",NULL,0,NULL}, {"base", cmd_base, "",NULL,0,NULL}, {"show", cmd_show, "['+'<#recs>['+']]",NULL,0,NULL}, {"setscan", cmd_setscan, "",NULL,0,NULL}, {"scan", cmd_scan, "",NULL,0,NULL}, {"scanstep", cmd_scanstep, "",NULL,0,NULL}, {"scanpos", cmd_scanpos, "",NULL,0,NULL}, {"scansize", cmd_scansize, "",NULL,0,NULL}, {"sort", cmd_sort, " ...",NULL,0,NULL}, {"sort+", cmd_sort_newset, " ...",NULL,0,NULL}, {"authentication", cmd_authentication, "",NULL,0,NULL}, {"lslb", cmd_lslb, "",NULL,0,NULL}, {"ssub", cmd_ssub, "",NULL,0,NULL}, {"mspn", cmd_mspn, "",NULL,0,NULL}, {"status", cmd_status, "",NULL,0,NULL}, {"setnames", cmd_setnames, "",NULL,0,NULL}, {"cancel", cmd_cancel, "",NULL,0,NULL}, {"cancel_find", cmd_cancel_find, "",NULL,0,NULL}, {"format", cmd_format, "",complete_format,0,NULL}, {"schema", cmd_schema, "",complete_schema,0,NULL}, {"elements", cmd_elements, "",NULL,0,NULL}, {"close", cmd_close, "",NULL,0,NULL}, {"querytype", cmd_querytype, "",complete_querytype,0,NULL}, {"refid", cmd_refid, "",NULL,0,NULL}, {"itemorder", cmd_itemorder, "ill|item|xml ",NULL,0,NULL}, {"update", cmd_update, " []",NULL,0,NULL}, {"update0", cmd_update0, " []",NULL,0,NULL}, {"xmles", cmd_xmles, " ",NULL,0,NULL}, {"packagename", cmd_packagename, "",NULL,0,NULL}, {"proxy", cmd_proxy, "[('tcp'|'ssl')][':']",NULL,0,NULL}, {"charset", cmd_charset, " ",NULL,0,NULL}, {"negcharset", cmd_negcharset, "",NULL,0,NULL}, {"displaycharset", cmd_displaycharset, "",NULL,0,NULL}, {"marccharset", cmd_marccharset, "",NULL,0,NULL}, {"querycharset", cmd_querycharset, "",NULL,0,NULL}, {"lang", cmd_lang, "",NULL,0,NULL}, {"source", cmd_source_echo, "",NULL,1,NULL}, {".", cmd_source_echo, "",NULL,1,NULL}, {"!", cmd_subshell, "Subshell command",NULL,1,NULL}, {"set_apdufile", cmd_set_apdufile, "",NULL,1,NULL}, {"set_berfile", cmd_set_berfile, "",NULL,1,NULL}, {"set_marcdump", cmd_set_marcdump," ",NULL,1,NULL}, {"set_cclfile", cmd_set_cclfile," ",NULL,1,NULL}, {"set_cqlfile", cmd_set_cqlfile," ",NULL,1,NULL}, {"set_auto_reconnect", cmd_set_auto_reconnect," on|off",complete_auto_reconnect,1,NULL}, {"set_auto_wait", cmd_set_auto_wait," on|off",complete_auto_reconnect,1,NULL}, {"set_otherinfo", cmd_set_otherinfo," ",NULL,0,NULL}, {"sleep", cmd_sleep,"",NULL,0,NULL}, {"register_oid", cmd_register_oid," ",NULL,0,NULL}, {"push_command", cmd_push_command,"",command_generator,0,NULL}, {"register_tab", cmd_register_tab," ",command_generator,0,NULL}, {"cclparse", cmd_cclparse,"",NULL,0,NULL}, {"list_otherinfo",cmd_list_otherinfo,"[otherinfoinddex]",NULL,0,NULL}, {"list_all",cmd_list_all,"",NULL,0,NULL}, {"clear_otherinfo",cmd_clear_otherinfo,"",NULL,0,NULL}, {"wait_response",cmd_wait_response,"",NULL,0,NULL}, /* Server Admin Functions */ {"adm-reindex", cmd_adm_reindex, "",NULL,0,NULL}, {"adm-truncate", cmd_adm_truncate, "('database'|'index')",NULL,0,NULL}, {"adm-create", cmd_adm_create, "",NULL,0,NULL}, {"adm-drop", cmd_adm_drop, "('database'|'index')",NULL,0,NULL}, {"adm-import", cmd_adm_import, " ",NULL,0,NULL}, {"adm-refresh", cmd_adm_refresh, "",NULL,0,NULL}, {"adm-commit", cmd_adm_commit, "",NULL,0,NULL}, {"adm-shutdown", cmd_adm_shutdown, "",NULL,0,NULL}, {"adm-startup", cmd_adm_startup, "",NULL,0,NULL}, {"explain", cmd_explain, "", NULL, 0, NULL}, {"options", cmd_options, "", NULL, 0, NULL}, {"zversion", cmd_zversion, "", NULL, 0, NULL}, {"help", cmd_help, "", NULL,0,NULL}, {"init", cmd_init, "", NULL,0,NULL}, {"sru", cmd_sru, " ", NULL,0,NULL}, {"url", cmd_url, "", NULL,0,NULL}, {"exit", cmd_quit, "",NULL,0,NULL}, {0,0,0,0,0,0} }; static int cmd_help(const char *line) { int i; char topic[21]; *topic = 0; sscanf(line, "%20s", topic); if (*topic == 0) printf("Commands:\n"); for (i = 0; cmd_array[i].cmd; i++) if (*topic == 0 || strcmp(topic, cmd_array[i].cmd) == 0) printf(" %s %s\n", cmd_array[i].cmd, cmd_array[i].ad); if (!strcmp(topic, "find")) { printf("RPN:\n"); printf(" \"term\" Simple Term\n"); printf(" @attr [attset] type=value op Attribute\n"); printf(" @and opl opr And\n"); printf(" @or opl opr Or\n"); printf(" @not opl opr And-Not\n"); printf(" @set set Result set\n"); printf(" @prox exl dist ord rel uc ut Proximity. Use help prox\n"); printf("\n"); printf("Bib-1 attribute types\n"); printf("1=Use: "); printf("4=Title 7=ISBN 8=ISSN 30=Date 62=Abstract 1003=Author 1016=Any\n"); printf("2=Relation: "); printf("1< 2<= 3= 4>= 5> 6!= 102=Relevance\n"); printf("3=Position: "); printf("1=First in Field 2=First in subfield 3=Any position\n"); printf("4=Structure: "); printf("1=Phrase 2=Word 3=Key 4=Year 5=Date 6=WordList\n"); printf("5=Truncation: "); printf("1=Right 2=Left 3=L&R 100=No 101=# 102=Re-1 103=Re-2\n"); printf("6=Completeness:"); printf("1=Incomplete subfield 2=Complete subfield 3=Complete field\n"); } if (!strcmp(topic, "prox")) { printf("Proximity:\n"); printf(" @prox exl dist ord rel uc ut\n"); printf(" exl: exclude flag . 0=include, 1=exclude.\n"); printf(" dist: distance integer.\n"); printf(" ord: order flag. 0=unordered, 1=ordered.\n"); printf(" rel: relation integer. 1< 2<= 3= 4>= 5> 6!= .\n"); printf(" uc: unit class. k=known, p=private.\n"); printf(" ut: unit type. 1=character, 2=word, 3=sentence,\n"); printf(" 4=paragraph, 5=section, 6=chapter, 7=document,\n"); printf(" 8=element, 9=subelement, 10=elementType, 11=byte.\n"); printf("\nExamples:\n"); printf(" Search for a and b in-order at most 3 words apart:\n"); printf(" @prox 0 3 1 2 k 2 a b\n"); printf(" Search for any order of a and b next to each other:\n"); printf(" @prox 0 1 0 3 k 2 a b\n"); } return 1; } static int cmd_register_tab(const char* arg) { #if HAVE_READLINE_READLINE_H char command[101], tabargument[101]; int i; int num_of_tabs; const char** tabslist; if (sscanf(arg, "%100s %100s", command, tabargument) < 1) { return 0; } /* locate the amdn in the list */ for (i = 0; cmd_array[i].cmd; i++) { if (!strncmp(cmd_array[i].cmd, command, strlen(command))) break; } if (!cmd_array[i].cmd) { fprintf(stderr,"Unknown command %s\n",command); return 1; } if (!cmd_array[i].local_tabcompletes) cmd_array[i].local_tabcompletes = (const char **) calloc(1,sizeof(char**)); num_of_tabs=0; tabslist = cmd_array[i].local_tabcompletes; for (; tabslist && *tabslist; tabslist++) num_of_tabs++; cmd_array[i].local_tabcompletes = (const char **) realloc(cmd_array[i].local_tabcompletes, (num_of_tabs+2)*sizeof(char**)); tabslist = cmd_array[i].local_tabcompletes; tabslist[num_of_tabs] = strdup(tabargument); tabslist[num_of_tabs+1] = NULL; #endif return 1; } static void process_cmd_line(char* line) { int i, res; char word[32], arg[10240]; #if HAVE_GETTIMEOFDAY gettimeofday(&tv_start, 0); #endif if ((res = sscanf(line, "%31s %10239[^;]", word, arg)) <= 0) { strcpy(word, last_cmd); *arg = '\0'; } else if (res == 1) *arg = 0; strcpy(last_cmd, word); /* removed tailing spaces from the arg command */ { char* p = arg; char* lastnonspace=NULL; for (; *p; ++p) { if (!yaz_isspace(*p)) lastnonspace = p; } if (lastnonspace) *(++lastnonspace) = 0; } for (i = 0; cmd_array[i].cmd; i++) if (!strncmp(cmd_array[i].cmd, word, strlen(word))) { res = (*cmd_array[i].fun)(arg); break; } if (!cmd_array[i].cmd) /* dump our help-screen */ { printf("Unknown command: %s.\n", word); printf("Type 'help' for list of commands\n"); res = 1; } if (apdu_file) fflush(apdu_file); if (res >= 2 && auto_wait) wait_and_handle_response(0); if (apdu_file) fflush(apdu_file); if (marc_file) fflush(marc_file); } static char *command_generator(const char *text, int state) { #if HAVE_READLINE_READLINE_H static int idx; if (state == 0) idx = 0; for (; cmd_array[idx].cmd; ++idx) { if (!strncmp(cmd_array[idx].cmd, text, strlen(text))) { ++idx; /* skip this entry on the next run */ return strdup(cmd_array[idx-1].cmd); } } #endif return NULL; } #if HAVE_READLINE_READLINE_H static const char** default_completer_list = NULL; static char* default_completer(const char* text, int state) { return complete_from_list(default_completer_list, text, state); } #endif #if HAVE_READLINE_READLINE_H /* This function only known how to complete on the first word */ static char **readline_completer(char *text, int start, int end) { completerFunctionType completerToUse; if (start == 0) { #if HAVE_READLINE_RL_COMPLETION_MATCHES char** res = rl_completion_matches(text, command_generator); #else char** res = completion_matches(text, (CPFunction*)command_generator); #endif rl_attempted_completion_over = 1; return res; } else { char arg[10240],word[32]; int i ,res; if ((res = sscanf(rl_line_buffer, "%31s %10239[^;]", word, arg)) <= 0) { rl_attempted_completion_over = 1; return NULL; } for (i = 0; cmd_array[i].cmd; i++) if (!strncmp(cmd_array[i].cmd, word, strlen(word))) break; if (!cmd_array[i].cmd) return NULL; default_completer_list = cmd_array[i].local_tabcompletes; completerToUse = cmd_array[i].rl_completerfunction; if (!completerToUse) { /* if command completer is not defined use the default completer */ completerToUse = default_completer; } if (completerToUse) { #ifdef HAVE_READLINE_RL_COMPLETION_MATCHES char** res= rl_completion_matches(text, completerToUse); #else char** res= completion_matches(text, (CPFunction*)completerToUse); #endif if (!cmd_array[i].complete_filenames) rl_attempted_completion_over = 1; return res; } else { if (!cmd_array[i].complete_filenames) rl_attempted_completion_over = 1; return 0; } } } #endif #ifndef WIN32 static void ctrl_c_handler(int x) { exit_client(0); } #endif static void client(void) { char line[10240]; line[10239] = '\0'; #ifndef WIN32 signal(SIGINT, ctrl_c_handler); #endif #if HAVE_GETTIMEOFDAY gettimeofday(&tv_start, 0); #endif while (1) { char *line_in = NULL; #if HAVE_READLINE_READLINE_H if (isatty(0)) { line_in=readline(C_PROMPT); if (!line_in) { putchar('\n'); break; } #if HAVE_READLINE_HISTORY_H if (*line_in) add_history(line_in); #endif strncpy(line, line_in, sizeof(line)-1); free(line_in); } #endif if (!line_in) { char *end_p; printf(C_PROMPT); fflush(stdout); if (!fgets(line, sizeof(line)-1, stdin)) break; if ((end_p = strchr(line, '\n'))) *end_p = '\0'; } if (isatty(0)) file_history_add_line(file_history, line); process_cmd_line(line); } } static void show_version(void) { char vstr[20], sha1_str[41]; yaz_version(vstr, sha1_str); printf("YAZ version: %s %s\n", YAZ_VERSION, YAZ_VERSION_SHA1); if (strcmp(sha1_str, YAZ_VERSION_SHA1)) printf("YAZ DLL/SO: %s %s\n", vstr, sha1_str); exit(0); } int main(int argc, char **argv) { char *prog = *argv; char *open_command = 0; char *auth_command = 0; char *arg; const char *rc_file = 0; int ret; #if HAVE_LOCALE_H if (!setlocale(LC_CTYPE, "")) fprintf(stderr, "setlocale failed\n"); #endif #if HAVE_LANGINFO_H #ifdef CODESET codeset = nl_langinfo(CODESET); #endif #endif if (codeset) outputCharset = xstrdup(codeset); ODR_MASK_SET(&z3950_options, Z_Options_search); ODR_MASK_SET(&z3950_options, Z_Options_present); ODR_MASK_SET(&z3950_options, Z_Options_namedResultSets); ODR_MASK_SET(&z3950_options, Z_Options_triggerResourceCtrl); ODR_MASK_SET(&z3950_options, Z_Options_scan); ODR_MASK_SET(&z3950_options, Z_Options_sort); ODR_MASK_SET(&z3950_options, Z_Options_extendedServices); ODR_MASK_SET(&z3950_options, Z_Options_delSet); nmem_auth = nmem_create(); while ((ret = options("k:c:q:a:b:m:v:p:u:t:Vxd:f:", argv, argc, &arg)) != -2) { switch (ret) { case 0: if (!open_command) { open_command = (char *) xmalloc(strlen(arg)+6); strcpy(open_command, "open "); strcat(open_command, arg); } else { fprintf(stderr, "%s: Specify at most one server address\n", prog); exit(1); } break; case 'a': if (!strcmp(arg, "-")) apdu_file=stderr; else apdu_file=fopen(arg, "a"); break; case 'b': if (!strcmp(arg, "-")) ber_file=stderr; else ber_file=fopen(arg, "a"); break; case 'c': strncpy(ccl_fields, arg, sizeof(ccl_fields)-1); ccl_fields[sizeof(ccl_fields)-1] = '\0'; break; case 'd': dump_file_prefix = arg; break; case 'f': rc_file = arg; break; case 'k': kilobytes = atoi(arg); break; case 'm': if (!(marc_file = fopen(arg, "a"))) { perror(arg); exit(1); } break; case 'p': yazProxy = xstrdup(arg); break; case 'q': strncpy(cql_fields, arg, sizeof(cql_fields)-1); cql_fields[sizeof(cql_fields)-1] = '\0'; break; case 't': outputCharset = xstrdup(arg); break; case 'u': if (!auth_command) { auth_command = (char *) xmalloc(strlen(arg)+6); strcpy(auth_command, "auth "); strcat(auth_command, arg); } break; case 'v': yaz_log_init(yaz_log_mask_str(arg), "", 0); break; case 'V': show_version(); break; case 'x': hex_dump = 1; break; default: fprintf(stderr, "Usage: %s " " [-a apdulog]" " [-b berdump]" " [-c cclfile]" " [-d dump]" " [-f cmdfile]" " [-k size]" " [-m marclog]" " [-p proxy-addr]" " [-q cqlfile]" " [-t dispcharset]" " [-u auth]" " [-v loglevel]" " [-V]" " [-x]" " [server-addr]\n", prog); exit(1); } } initialize(rc_file); if (auth_command) { #ifdef HAVE_GETTIMEOFDAY gettimeofday(&tv_start, 0); #endif process_cmd_line(auth_command); #if HAVE_READLINE_HISTORY_H add_history(auth_command); #endif xfree(auth_command); } if (open_command) { #ifdef HAVE_GETTIMEOFDAY gettimeofday(&tv_start, 0); #endif process_cmd_line(open_command); #if HAVE_READLINE_HISTORY_H add_history(open_command); #endif xfree(open_command); } client(); exit_client(0); return 0; } /* * Local variables: * c-basic-offset: 4 * c-file-style: "Stroustrup" * indent-tabs-mode: nil * End: * vim: shiftwidth=4 tabstop=8 expandtab */ yaz-4.2.30/test/0000755000175000017500000000000011741237740010371 500000000000000yaz-4.2.30/test/xml2marc4.xml.marc0000644000175000017500000000003211741237740013560 00000000000000000260091a2200025003370 yaz-4.2.30/test/test_rpn2cql.c0000644000175000017500000001332011733047144013072 00000000000000/* This file is part of the YAZ toolkit. * Copyright (C) 1995-2012 Index Data * See the file LICENSE for details. */ #if HAVE_CONFIG_H #include #endif #include #include #include #include #include #include #include static int compare(cql_transform_t ct, const char *pqf, const char *cql) { int ret = 0; ODR odr = odr_createmem(ODR_ENCODE); WRBUF w = wrbuf_alloc(); Z_RPNQuery *q = p_query_rpn(odr, pqf); if (q) { int r = cql_transform_rpn2cql_wrbuf(ct, w, q); if (r != 0) { /* transform error */ yaz_log(YLOG_LOG, "%s -> Error %d", pqf, r); if (!cql) /* also expected error? */ ret = 1; } else if (r == 0) { yaz_log(YLOG_LOG, "%s -> %s", pqf, wrbuf_cstr(w)); if (cql && !strcmp(wrbuf_cstr(w), cql)) { ret = 1; } else { yaz_log(YLOG_WARN, " expected: %s", cql ? cql : "null"); yaz_log(YLOG_WARN, " got: %s", wrbuf_cstr(w)); } } } wrbuf_destroy(w); odr_destroy(odr); return ret; } static void tst1(void) { cql_transform_t ct = cql_transform_create(); YAZ_CHECK(compare(ct, "abc", "\"abc\"")); YAZ_CHECK(compare(ct, "\"a b c\"", "\"a b c\"")); YAZ_CHECK(compare(ct, "@and a b", "\"a\" and \"b\"")); YAZ_CHECK(compare(ct, "@attr 1=field abc", "field=\"abc\"")); YAZ_CHECK(compare(ct, "@attr 1=4 abc", 0)); /* should fail */ cql_transform_define_pattern(ct, "index.title", "1=4"); YAZ_CHECK(compare(ct, "@attr 1=4 abc", "title=\"abc\"")); cql_transform_define_pattern(ct, "index.foo", "1=bar"); YAZ_CHECK(compare(ct, "@attr 1=bar abc", "foo=\"abc\"")); cql_transform_close(ct); } static void tst2(void) { WRBUF w = wrbuf_alloc(); cql_transform_t ct = 0; const char *srcdir = getenv("srcdir"); if (srcdir) { wrbuf_puts(w, srcdir); wrbuf_puts(w, "/"); } wrbuf_puts(w, "../etc/pqf.properties"); ct = cql_transform_open_fname(wrbuf_cstr(w)); YAZ_CHECK(compare(ct, "@attr 1=4 abc", "dc.title=\"abc\"")); YAZ_CHECK(compare(ct, "@attr 1=4 @attr 4=108 abc", "dc.title=/exact \"abc\"")); YAZ_CHECK(compare(ct, "@attr 1=4 @attr 3=1 @attr 6=1 abc", "dc.title=\"abc\"")); YAZ_CHECK(compare(ct, "@attr 1=4 @attr 4=1 @attr 6=1 abc", "dc.title=\"abc\"")); YAZ_CHECK(compare(ct, "@attr 1=1016 abc", "\"abc\"")); /* Date tests */ YAZ_CHECK(compare(ct, "@attr 2=1 @attr 1=30 1980", "dc.date<\"1980\"")); YAZ_CHECK(compare(ct, "@attr 1=30 @attr 2=3 1980", "dc.date=\"1980\"")); YAZ_CHECK(compare(ct, "@attr 1=30 @attr 2=5 1980", "dc.date>\"1980\"")); YAZ_CHECK(compare(ct, "@attr 1=30 @attr 2=2 1980", "dc.date<=\"1980\"")); YAZ_CHECK(compare(ct, "@attr 1=30 @attr 2=4 1980", "dc.date>=\"1980\"")); /* Truncation */ YAZ_CHECK(compare(ct, "@attr 5=1 water", "\"water*\"")); YAZ_CHECK(compare(ct, "@attr 5=2 water", "\"*water\"")); YAZ_CHECK(compare(ct, "@attr 5=3 water", "\"*water*\"")); YAZ_CHECK(compare(ct, "@attr 5=100 water", "\"water\"")); YAZ_CHECK(compare(ct, "@attr 5=102 water", "\"water\"")); YAZ_CHECK(compare(ct, "@attr 5=104 water", "\"water\"")); YAZ_CHECK(compare(ct, "@attr 5=102 wat.*er", "\"wat*er\"")); YAZ_CHECK(compare(ct, "@attr 5=104 wat?er", "\"wat*er\"")); YAZ_CHECK(compare(ct, "@attr 5=102 wat.er", "\"wat?er\"")); YAZ_CHECK(compare(ct, "@attr 5=104 wat#er", "\"wat?er\"")); YAZ_CHECK(compare(ct, "@attr 5=102 wat?er", "\"wat\\?er\"")); YAZ_CHECK(compare(ct, "@attr 5=104 wat*er", "\"wat\\*er\"")); YAZ_CHECK(compare(ct, "@attr 5=102 wat#er", "\"wat#er\"")); /* \. is 'eaten' by PQF parser */ YAZ_CHECK(compare(ct, "@attr 5=102 wat\\.er", "\"wat?er\"")); /* Escape sequences */ /* note: escape sequences that survive after PQF parse below */ YAZ_CHECK(compare(ct, "@attr 5=102 wat\\\\?er", "\"wat\\?er\"")); YAZ_CHECK(compare(ct, "@attr 5=104 wat\\\\?er", "\"wat\\?er\"")); YAZ_CHECK(compare(ct, "@attr 5=102 wat\\\\*er", "\"wat\\*er\"")); YAZ_CHECK(compare(ct, "@attr 5=104 wat\\\\*er", "\"wat\\*er\"")); YAZ_CHECK(compare(ct, "wat\\\\#er", "\"wat#er\"")); YAZ_CHECK(compare(ct, "@attr 5=100 wat\\\\#er", "\"wat#er\"")); YAZ_CHECK(compare(ct, "@attr 5=102 wat\\\\#er", "\"wat#er\"")); YAZ_CHECK(compare(ct, "@attr 5=104 wat\\\\#er", "\"wat#er\"")); YAZ_CHECK(compare(ct, "@attr 5=102 wat\\\\.er", "\"wat.er\"")); YAZ_CHECK(compare(ct, "@attr 5=104 wat\\\\.er", "\"wat.er\"")); /* Quoting */ YAZ_CHECK(compare(ct, "@attr 5=100 \"\"", "\"\"")); YAZ_CHECK(compare(ct, "@attr 5=1 \"\"", "\"*\"")); YAZ_CHECK(compare(ct, "@attr 5=2 \"\"", "\"*\"")); YAZ_CHECK(compare(ct, "@attr 5=3 \"\"", "\"**\"")); YAZ_CHECK(compare(ct, "@attr 5=102 \"\"", "\"\"")); YAZ_CHECK(compare(ct, "@attr 5=104 \"\"", "\"\"")); YAZ_CHECK(compare(ct, "@attr 5=1 \"water basket\"", "\"water basket*\"")); YAZ_CHECK(compare(ct, "@attr 5=2 \"water basket\"", "\"*water basket\"")); YAZ_CHECK(compare(ct, "@attr 5=3 \"water basket\"", "\"*water basket*\"")); /* Other */ YAZ_CHECK(compare(ct, "@attr 2=103 @attr 1=_ALLRECORDS 1", "cql.allRecords=\"1\"")); YAZ_CHECK(compare(ct, "@attr 1=500 abc", 0)); cql_transform_close(ct); wrbuf_destroy(w); } int main (int argc, char **argv) { YAZ_CHECK_INIT(argc, argv); YAZ_CHECK_LOG(); tst1(); tst2(); YAZ_CHECK_TERM; } /* * Local variables: * c-basic-offset: 4 * c-file-style: "Stroustrup" * indent-tabs-mode: nil * End: * vim: shiftwidth=4 tabstop=8 expandtab */ yaz-4.2.30/test/marc8.marc0000644000175000017500000000512711741237740012174 0000000000000002647nam^^2200469^^^4500001001400000005001700014006001900031007001500050008004100065035001500106037009000121040004500211100002300256245028100279246006300560246006300623260014400686300001100830500001300841500005700854500009300911500002901004500005701033510002401090530004201114533008901156655002901245650004301274700003601317700002801353793003101381852001501412852001401427856015401441856015401595852003001749852002801779856015401807856014901961830004702110901002002157UCD-00259230120061209034435.0m d cr bn |||a|bb|920330s1583 enk s 000 0 eng d a99851339eo aCL0036000039bProQuest Information and Learning. 300 N. Zeeb Rd., Ann Arbor, MI 48106 aCu-RivEScCu-RivESdCStRLINedcrbdWaOLN1 aClinton, Atkinson.00aClinton, Purser & Arnold, to their countreymen wheresoeuerh[electronic resource] :bWherein is described by their own hands their vnfeigned penitence for their offences past: their patience in welcoming their death, & their duetiful minds towardes her most excellent Maiestie2 aClinton, Purser & Arnold, to their countreymen wheresoever2 aClinton, Purser & Arnold, to their countreymen wheresoever aLondon :bImprinted by Iohn Wolfe and are to be sold [by W. Wright] at the middle shop in the Poultry, ioyning S. Mildreds Church,c[1583?] a[12] p aIn verse aThe first poem is signed: Thomas Walton alias Purser aClinton's full name and bookseller's name from, and publication date conjectured by, STC aSignatures: Ap4(B Bp2 aReproduction of the original in the Bodleian Library4 aSTC (2nd ed.)c5431 aAlso issued in print and on microform aElectronic reproduction.nMode of access: World Wide Web.nRestricted to UC campuses 7aElectronic texts.2local 0aPirateszEnglandvEarly works to 1800.1 aWalton, Thomas,dfl. 1583.4aut1 aArnold,dfl. 1583.4aut0 aEarly English books online aMERbkmain aSCBbnnet40zRestricted to UC campusesxSCP UCSDuhttp://gateway.proquest.com/openurl?ctx_ver=Z39.88-2003&res_id=xri:eebo&rft_val_fmt=&rft_id=xri:eebo:image:1661040zRestricted to UC campusesxSCP UCSDuhttp://gateway.proquest.com/openurl?ctx_ver=Z39.88-2003&res_id=xri:eebo&rft_val_fmt=&rft_id=xri:eebo:image:16610 aDVXLbELECT-GENhInternet aLAGEbin3Online access40zRestricted to UC campusesxSCP UCSDuhttp://gateway.proquest.com/openurl?ctx_ver=Z39.88-2003&res_id=xri:eebo&rft_val_fmt=&rft_id=xri:eebo:image:1661040zRestricted to UC campusesuhttp://gateway.proquest.com/openurl?ctx_ver=Z39.88-2003&res_id=xri:eebo&rft_val_fmt=&rft_id=xri:eebo:image:16610xCDL 0aEarly English books, 1475-1640 ;v1406:13. aDVXLb002592301yaz-4.2.30/test/tmarc1.xml.marc0000644000175000017500000000173511741237740013151 0000000000000000989nam0a32003011 450 001002800000004001000028008002800038009001100066021002700077032001500104100002100119245005400140250004100194260004000235300002700275504012300302512006100425520005000486652002400536652001600560666001600576666001900592666001500611666001800626666001900644666000900663666001500672000a9 181 423 4b710100fa000rnae000tmuua2002buslengv0000aagxx000a1-4000-4596-7d$14,00000&DBC2004390000aSlomanhLarry000aOn the road with Bob DylaneLarry "Ratso" Sloman000aRevised editionbThree Rivers Press000aNew YorkbThree Rivers Pressc2002000axv, 464 sider, tavler000aLarry "Ratso" Slomans meget personlige beretning om Bob Dylans koncertturne i USA i 1975: "The Rolling Thunder revue"000aPÃ¥ omslaget: With a new introduction by Kinky Friedman000aTidligere: 1. udgave. New York, Bantam, 19780000m99.4aDylanhBob000p78.9064v5000ffolkemusik000ffolkemusikere000frockmusik000frockmusikere000frockkoncerter000eUSA000i1970-1979yaz-4.2.30/test/test_log.c0000644000175000017500000000420011733047144012267 00000000000000/* This file is part of the YAZ toolkit. * Copyright (C) 1995-2012 Index Data * See the file LICENSE for details. */ #if HAVE_CONFIG_H #include #endif #include #include #include #include #include #if HAVE_UNISTD_H #include #endif void hook_func(int level, const char *msg, void *vp) { fprintf(stderr, "[HOOK level=%d msg=%s]\n", level, msg); } int main(int argc, char **argv) { char *arg; int i, ret; int level = YLOG_LOG; int number = 1; unsigned int wait_between_log = 0; while ((ret = options("f:p:v:l:m:n:r:w:Hh", argv, argc, &arg)) != -2) { switch (ret) { case 'r': yaz_log_init_max_size(atoi(arg)); break; case 'f': yaz_log_time_format(arg); break; case 'p': yaz_log_init_prefix(arg); break; case 'v': yaz_log_init_level(yaz_log_mask_str(arg)); break; case 'l': if (!strcmp(arg, "@")) yaz_log_init_file(0); else yaz_log_init_file(arg); break; case 'n': number = atoi(arg); break; case 'm': level = yaz_log_module_level(arg); break; case 'w': wait_between_log = atoi(arg); break; case 'H': yaz_log_set_handler(hook_func, 0); break; case 0: for (i = 0; i #include #include #include #if HAVE_CONFIG_H #include #endif static void tst_tpath(void) { char fullpath[FILENAME_MAX]; YAZ_CHECK(!yaz_filepath_resolve("etc", 0, 0, fullpath)); YAZ_CHECK(!yaz_filepath_resolve("etc", "", 0, fullpath)); /* bug #606 */ YAZ_CHECK(!yaz_filepath_resolve("etc", ".", 0, fullpath)); YAZ_CHECK(!yaz_filepath_resolve("does_not_exist", "", 0, fullpath)); YAZ_CHECK(!yaz_filepath_resolve("does_not_exist", ".", 0, fullpath)); YAZ_CHECK(yaz_filepath_resolve("test_tpath", 0, 0, fullpath)); YAZ_CHECK(yaz_filepath_resolve("test_tpath", "", 0, fullpath)); YAZ_CHECK(yaz_filepath_resolve("test_tpath", ".", 0, fullpath)); YAZ_CHECK(!yaz_filepath_resolve("test_tpath", "unknown_dir", 0, fullpath)); YAZ_CHECK(yaz_filepath_resolve("test_tpath", "unknown_dir:.", 0, fullpath)); YAZ_CHECK(!yaz_filepath_resolve("test_tpath", "unknown_dir:", 0, fullpath)); YAZ_CHECK(!yaz_filepath_resolve("test_tpath", "unknown_dir:c:", 0, fullpath)); YAZ_CHECK(!yaz_filepath_resolve("test_tpath", "unknown_dir:c:\\other", 0, fullpath)); } int main(int argc, char **argv) { YAZ_CHECK_INIT(argc, argv); tst_tpath(); YAZ_CHECK_TERM; } /* * Local variables: * c-basic-offset: 4 * c-file-style: "Stroustrup" * indent-tabs-mode: nil * End: * vim: shiftwidth=4 tabstop=8 expandtab */ yaz-4.2.30/test/marccol3.u8.1.lst0000644000175000017500000000227311654451754013244 0000000000000001313cam a2200349ua 4500 001 82129893 003 DLC 005 20070808062021.0 008 841102s1980 cc a 000 0 chi 035 $a (DLC)5011703 010 $a 82129893 035 $a (CStRLIN)DCLP84-B3561 040 $a DLC-R $c DLC-R $d CStRLIN $d DLC 050 00 $a TL546.7 $b .S48 1980 066 $c $1 082 00 $a 629.4 $2 19 100 1 $6 880-01 $a Shen, Guoliang. 245 10 $6 880-02 $a Yu zhou hang xing he shu li hua / $c Shen Guoliang wen ; Chen Genxiang tu. 250 $6 880-03 $a Di 1 ban. 260 $6 880-04 $a [Canton] : $b Guangdong ren min chu ban she : $b Guangdong sheng xin hua shu dian fa xing, $c 1980. 300 $a 199 p. : $b ill. ; $c 19 cm. 440 0 $6 880-05 $a Ke xue zhi shi pu ji cong shu 650 0 $a Astronautics $x Popular works. 700 1 $6 880-06 $a Chen, Genxiang. 880 1 $6 100-01/1 $a 沈 国良. 880 10 $6 245-02/1 $a 宇宙 航行 和 数ç†åŒ– / $c 沈 国良 文 ; 陈 根祥 图. 880 $6 250-03/1 $a 第1版. 880 $6 260-04/1 $a [Canton] : $b 广东 人民 出版社 : $b 广东çœã€€æ–°è¯ã€€æ›¸åº— å‘行, $c 1980. 880 0 $6 440-05/1 $a 科学 知识 普åŠã€€ä¸›ä¹¦ 880 1 $6 700-06/1 $a 陈 根祥. 906 $a 0 $b cbc $c orignew $d u $e ncip $f 19 $g y-rlinjack 985 $a spacingreload yaz-4.2.30/test/cql2pqf-order.txt0000644000175000017500000000111411654451754013536 00000000000000# cql2pqf spec which tests evaluation order of rules # Identifiers for prefixes used in this file. (index.*) set.cql = info:srw/cql-context-set/1/cql-v1.1 set.rec = info:srw/cql-context-set/2/rec-1.0 set.dc = info:srw/cql-context-set/1/dc-v1.1 # default set (in query) set = info:srw/cql-context-set/1/dc-v1.1 # The default access point and result-set references index.dc.title = 1=index relation.eq = 2=relation relationModifier.relevant = 3=modifier position.any = 4=position structure.* = 5=structure truncation.none = 6=truncation always = 7=always yaz-4.2.30/test/marc7.chr0000644000175000017500000000000711741237740012015 00000000000000marc-8 yaz-4.2.30/test/marc7.xml0000644000175000017500000001243311741237740012047 00000000000000 03114cam a2200349 i 4500 77123332 DLC 20051218154744.0 981008b2001 ilu 000 0 eng 57779 90490 93202 DLC DLC 0 und orignew u ncip 19 y-gencatlg 77123332 Voyager Diacritic test -- New input 001 (SBIE). ny : ny, 2001. 100 p. ; 12 cm. New copy imported from file (8/12/99). VOYAGER COLUMN 0 (NEW): Degree sign (°); Phono Copyright mark (â„—); Copyright mark (©); Sharp (♯); Inverted Question mark (¿); Inverted Exclamation mark (¡). VOYAGER COLUMN 1: Script L (â„“); Polish L (Å); Scandanavian O (Ø); D with Crossbar (Ä); Icelandic Thorn (Þ); AE Digraph (Æ); OE Digraph (Å’); Miagkii Znak (ʹ); Dot at Midline (·). VOYAGER COLUMN 2: Musical Flat (â™­); Patent Mark (®); Plus or Minus (±); O Hook (Æ ); U Hook (Ư); Alif (ʼ); alpha α; Ayn (Ê»); Polish l (Å‚). VOYAGER COLUMN 3: Scandanavian o (ø); d with crossbar (Ä‘); Icelandic Thorn (þ); ae Digraph (æ); oe Digraph (Å“); Tverdii Znak (ʺ); Turkish i (ı); British Pound (£); eth (ð). VOYAGER COLUMN 4: Dagger (DO NOT USE); o Hook (Æ¡); u Hook (ư); Beta β; Gamma γ; Superscript 0 (â°); Superscript 1 (¹); Superscript 2 (²); Superscript 3 (³). VOYAGER COLUMN 5: Superscript 4 (â´); Superscript 5 (âµ); Superscript 6 (â¶); Superscript 7 (â·); Superscript 8 (â¸); Superscript 9 (â¹); Superscript + (âº); Superscript - (â»); Superscript ( (â½). VOYAGER COLUMN 6: Superscript ) (â¾); Subscript 0 (â‚€); Subscript 1 (â‚); Subscript 2 (â‚‚); Subscript 3 (₃); Subscript 4 (â‚„); Subscript 5 (â‚…); Subscript 6 (₆); Subscript 7 (₇). VOYAGER COLUMN 7: Subscript 8 (₈); Subscript 9 (₉); Subscript + (₊); Subscript - (â‚‹); Subscript ( (â‚); Subscript ) (₎); Pseudo Question Mark (ỏ); Grave (oÌ€); Acute (oÌ). VOYAGER COLUMN 8: Circumflex (oÌ‚); Tilde (õ); Macron (oÌ„); Breve (ŏ); Superior Dot (ȯ); Umlaut (ö); Hacek (oÌŒ); Circle Above (oÌŠ); Ligature left (oÍ¡). VOYAGER COLUMN 9: Ligature right (o) ; High Comma off center (oÌ•); Double Acute (oÌ‹); Candrabindu (oÌ); Cedilla (o̧); Right Hook (ǫ); Dot Below (oÌ£); Double Dot Below (o̤); Circle Below (oÌ¥). VOYAGER COLUMN 10: Double Underscore (o̳); Underscore (o̲); Left Hook (o̦); Right Cedilla (oÌœ); Upadhmaniya (oÌ®); Double Tilde 1st half (oÍ ); Double Tilde 2nd half (o) ; High Comma centered (oÌ“). VOYAGER PC Keyboard: Spacing Circumflex (^); Spacing Underscore (_); Spacing Grave (`); Open Curly Bracket ({); Close Curly Bracket (}); Spacing Tilde (~). Standard PC Keyboard: 1234567890-= !@#$%^&*()_+ qwertyuiop[]\ QWERTYUIOP{}| asdfghjkl;' ASDFGHJKL:" zxcvbnm,./ ZXCVBNM<>? yaz-4.2.30/test/xml2tmarc9.xml0000644000175000017500000001057111741237740013041 00000000000000 02075cas a22005055a 4500 2005336282DLC20070911033614.0070910c20059999mr uu p f0 0ara 2005336282-3-7-0709110002-p----- (OCoLC)1704901647undserialsuncip19n-oclcsercDLCDLCDLCarafrelcf-mr---IN PROCESS(3880-01Qaḍāʼ al-usrah :majallah mutakhaṣṣiṣah /Wizārat al-ʻAdl.Justice de la famille880-02Majallat Qaḍāʼ al-usrah<2006>880-03al-Rabāṭ :Jamʻīyat Nashr al-Maʻlūmah al-Qānūnīyah wa-al-Qaḍāʼīyah,2005-v. :ill. ;24 cm.Irregular (semiannual)880-04al-ʻAdad 1. (Yūlyūz 2005)-880-05Manshūrāt Jamʻīyat Nashr al-Maʻlūmah al-Qānūnīyah wa-al-QaḍāʼīyahSome issues have also a distinctive title.Latest issue consulted: al-ʻAdad 3. (Dujanbir 2006).Chiefly in Arabic; some French.Domestic relations (Islamic law)Morocco.Divorce (Islamic law)Marriage lawMorocco.Law reports, digests, etc.Morocco.880-06Jamʻīyat Nashr al-Maʻlūmah al-Qānūnīyah wa-al-Qaḍāʼīyah.880-07Morocco.Wizārat al-ʻAdl.DLC245-01/(3/rقضاء الأسرة :مجلة متخصصة /وزارة العدل.246-02/(3/rمجلة قضاء الأسرة<2006>260-03/(3/rالرباط :جمعية نشر المعلومة القانونية والقضائية،2005-362-04/(3/rالعدد 1. (يوليوز 2005)-490-05/(3/rمنشورات جمعية نشر المعلومة القانونية والقضائية710-06/(3/rجمعية نشر المعلومة القانونية والقضائية.710-07/(3/rMorocco.وزارة العدل.LC Cairo Office [we 45] yaz-4.2.30/test/marc6.xml0000644000175000017500000000230211741237740012040 00000000000000 00366nam a22001698a 4500 11224466 DLC 00000000000000.0 910710c19910701nju 00010 eng 11224466 DLC DLC 123-xyz Jack Collins How to program a computer Penguin 8710 p. cm. yaz-4.2.30/test/xml2tmarc5.xml.marc0000644000175000017500000000075411741237740013760 0000000000000000492nam a22001455a 450000100100000000500170001000800410002710000520006824501040012025000140022426000230023830000160026165000510027765000180032800027748520051026111436.0050413s1894 gr 000 0 gre d1 aΜαÏοÏδης, Κωνσταντίνος Ιω10aΕλληνικόν κÏυπτογÏαφικόν λεξικόν /cΚωνστ. Ι. ΜαÏοÏδης. η εκδ. aΑθήνα,c1894. a248 σελ. 0aGreek language, ModernxDialectsvDictionaries 0aCryptography.yaz-4.2.30/test/marc8.xml.marc0000644000175000017500000000512311741237740012767 0000000000000002643nam^a2200469^^^4500001001400000005001700014006001900031007001500050008004100065035001500106037009000121040004500211100002300256245028100279246006300560246006300623260014400686300001100830500001300841500005700854500009300911500002501004500005701029510002401086530004201110533008901152655002901241650004301270700003601313700002801349793003101377852001501408852001401423856015401437856015401591852003001745852002801775856015401803856014901957830004702106901002002153UCD-00259230120061209034435.0m d cr bn |||a|bb|920330s1583 enk s 000 0 eng d a99851339eo aCL0036000039bProQuest Information and Learning. 300 N. Zeeb Rd., Ann Arbor, MI 48106 aCu-RivEScCu-RivESdCStRLINedcrbdWaOLN1 aClinton, Atkinson.00aClinton, Purser & Arnold, to their countreymen wheresoeuerh[electronic resource] :bWherein is described by their own hands their vnfeigned penitence for their offences past: their patience in welcoming their death, & their duetiful minds towardes her most excellent Maiestie2 aClinton, Purser & Arnold, to their countreymen wheresoever2 aClinton, Purser & Arnold, to their countreymen wheresoever aLondon :bImprinted by Iohn Wolfe and are to be sold [by W. Wright] at the middle shop in the Poultry, ioyning S. Mildreds Church,c[1583?] a[12] p aIn verse aThe first poem is signed: Thomas Walton alias Purser aClinton's full name and bookseller's name from, and publication date conjectured by, STC aSignatures: Aâ´ B² aReproduction of the original in the Bodleian Library4 aSTC (2nd ed.)c5431 aAlso issued in print and on microform aElectronic reproduction.nMode of access: World Wide Web.nRestricted to UC campuses 7aElectronic texts.2local 0aPirateszEnglandvEarly works to 1800.1 aWalton, Thomas,dfl. 1583.4aut1 aArnold,dfl. 1583.4aut0 aEarly English books online aMERbkmain aSCBbnnet40zRestricted to UC campusesxSCP UCSDuhttp://gateway.proquest.com/openurl?ctx_ver=Z39.88-2003&res_id=xri:eebo&rft_val_fmt=&rft_id=xri:eebo:image:1661040zRestricted to UC campusesxSCP UCSDuhttp://gateway.proquest.com/openurl?ctx_ver=Z39.88-2003&res_id=xri:eebo&rft_val_fmt=&rft_id=xri:eebo:image:16610 aDVXLbELECT-GENhInternet aLAGEbin3Online access40zRestricted to UC campusesxSCP UCSDuhttp://gateway.proquest.com/openurl?ctx_ver=Z39.88-2003&res_id=xri:eebo&rft_val_fmt=&rft_id=xri:eebo:image:1661040zRestricted to UC campusesuhttp://gateway.proquest.com/openurl?ctx_ver=Z39.88-2003&res_id=xri:eebo&rft_val_fmt=&rft_id=xri:eebo:image:16610xCDL 0aEarly English books, 1475-1640 ;v1406:13. aDVXLb002592301yaz-4.2.30/test/xml2tmarc2.xml0000644000175000017500000000377611741237740013043 00000000000000 01116nam0a32002171 450 9 182 502 3710100acesf1995gbeng0sxcbefMimmsGarnetCry babyWarm and soulfulGarnet Mimms ... [et al.]Bury St. EdmundsBGO19951 cdIndspilninger publiceret 1963 (Cry baby) og 1965 (Warm and soulful)Indhold:BGOBGOCD26878.7944soulrhythm & bluesvokal1960-1969USA11Cry babyNobody but youUntil you were goneAnytime you want meSo closeFor your precious loveBaby don't you weepA ¤quiet placeCry to meDon't change your heartWanting youThe ¤truth hurtsI'll take good care of youLooking for youIt won't hurt (half as much)It was easier to hurt herThinkin'Prove it to meMore than a miracleAs long as I have youOne girlThere goes my babyIt's just a matter of timeA ¤little bit of soapLook awayI'll make it up to you4001 girl yaz-4.2.30/test/test_icu.1.input0000644000175000017500000000004411733047144013344 00000000000000Børn Le Carré Le Carre Le CarreÌ yaz-4.2.30/test/xml2marc7.xml0000644000175000017500000001260711741237740012655 00000000000000 03114cam a2200349 i 4500 77123332 DLC20051218154744.0981008b2001 ilu 000 0 eng 577799049093202DLCDLC0undorignewuncip19y-gencatlg 77123332 Voyager Diacritic test -- New input 001 (SBIE).ny :ny,2001.100 p. ;12 cm.New copy imported from file (8/12/99).VOYAGER COLUMN 0 (NEW): Degree sign (°); Phono Copyright mark (℗); Copyright mark (©); Sharp (♯); Inverted Question mark (¿); Inverted Exclamation mark (¡).VOYAGER COLUMN 1: Script L (ℓ); Polish L (Ł); Scandanavian O (Ø); D with Crossbar (Đ); Icelandic Thorn (Þ); AE Digraph (Æ); OE Digraph (Œ); Miagkii Znak (ʹ); Dot at Midline (·).VOYAGER COLUMN 2: Musical Flat (♭); Patent Mark (®); Plus or Minus (±); O Hook (Ơ); U Hook (Ư); Alif (ʼ); alpha α; Ayn (ʻ); Polish l (ł).VOYAGER COLUMN 3: Scandanavian o (ø); d with crossbar (đ); Icelandic Thorn (þ); ae Digraph (æ); oe Digraph (œ); Tverdii Znak (ʺ); Turkish i (ı); British Pound (£); eth (ð).VOYAGER COLUMN 4: Dagger (DO NOT USE); o Hook (ơ); u Hook (ư); Beta β; Gamma γ; Superscript 0 (⁰); Superscript 1 (¹); Superscript 2 (²); Superscript 3 (³).VOYAGER COLUMN 5: Superscript 4 (⁴); Superscript 5 (⁵); Superscript 6 (⁶); Superscript 7 (⁷); Superscript 8 (⁸); Superscript 9 (⁹); Superscript + (⁺); Superscript - (⁻); Superscript ( (⁽).VOYAGER COLUMN 6: Superscript ) (⁾); Subscript 0 (₀); Subscript 1 (₁); Subscript 2 (₂); Subscript 3 (₃); Subscript 4 (₄); Subscript 5 (₅); Subscript 6 (₆); Subscript 7 (₇).VOYAGER COLUMN 7: Subscript 8 (₈); Subscript 9 (₉); Subscript + (₊); Subscript - (₋); Subscript ( (₍); Subscript ) (₎); Pseudo Question Mark (ỏ); Grave (ò); Acute (ó).VOYAGER COLUMN 8: Circumflex (ô); Tilde (õ); Macron (ō); Breve (ŏ); Superior Dot (ȯ); Umlaut (ö); Hacek (ǒ); Circle Above (o̊); Ligature left (o͡).VOYAGER COLUMN 9: Ligature right (o) ; High Comma off center (o̕); Double Acute (ő); Candrabindu (o̐); Cedilla (o̧); Right Hook (ǫ); Dot Below (ọ); Double Dot Below (o̤); Circle Below (o̥).VOYAGER COLUMN 10: Double Underscore (o̳); Underscore (o̲); Left Hook (o̦); Right Cedilla (o̜); Upadhmaniya (o̮); Double Tilde 1st half (o͠); Double Tilde 2nd half (o) ; High Comma centered (o̓).VOYAGER PC Keyboard: Spacing Circumflex (^); Spacing Underscore (_); Spacing Grave (`); Open Curly Bracket ({); Close Curly Bracket (}); Spacing Tilde (~).Standard PC Keyboard: 1234567890-= !@#$%^&*()_+ qwertyuiop[]\ QWERTYUIOP{}| asdfghjkl;' ASDFGHJKL:" zxcvbnm,./ ZXCVBNM<>? yaz-4.2.30/test/test_xml_include.c0000644000175000017500000000354711733047144014026 00000000000000/* This file is part of the YAZ toolkit. * Copyright (C) 1995-2012 Index Data * See the file LICENSE for details. */ #if HAVE_CONFIG_H #include #endif #include #include #include #include #include static void tst_xml_include(void) { #if YAZ_HAVE_XML2 const char *srcdir = getenv("srcdir"); xmlDocPtr doc; xmlNodePtr node; const char *xml_in = ""; if (srcdir == 0) srcdir = "."; doc = xmlParseMemory(xml_in, strlen(xml_in)); YAZ_CHECK(doc); if (!doc) return; node = xmlDocGetRootElement(doc); YAZ_CHECK(node); if (node) { const char *expect = "\n" "" "some" "\n"; xmlChar *xml_out; int len_out; int ret = yaz_xml_include_simple(node, srcdir); YAZ_CHECK(ret == 0); xmlDocDumpMemory(doc, &xml_out, &len_out); YAZ_CHECK(xml_out && len_out > 0); if (xml_out && len_out > 0) { YAZ_CHECK(strlen(expect) == len_out); if (strlen(expect) == len_out) { YAZ_CHECK(memcmp(expect, xml_out, len_out) == 0); } else { fwrite(xml_out, 1, len_out, stdout); fflush(stdout); } xmlFree(xml_out); } } xmlFreeDoc(doc); #endif } int main (int argc, char **argv) { YAZ_CHECK_INIT(argc, argv); YAZ_CHECK_LOG(); tst_xml_include(); YAZ_CHECK_TERM; } /* * Local variables: * c-basic-offset: 4 * c-file-style: "Stroustrup" * indent-tabs-mode: nil * End: * vim: shiftwidth=4 tabstop=8 expandtab */ yaz-4.2.30/test/marccol4.u8.2.lst0000644000175000017500000000234111654451754013242 0000000000000001390nas a2200313 a 4500 001 2007210635 003 DLC 005 20071005153240.0 008 071005c200u9999ja | | d0jpn 010 $a 2007210635 035 $a (OCoLC)173684089 040 $a DLC $c DLC $d DLC 042 $a lc 043 $a a-ja--- 050 00 $a T27.J32 $b S83a 066 $c $1 110 2 $6 880-01 $a SangyoÌ„ Gijutsu SoÌ„goÌ„ KenkyuÌ„jo. $b Shikoku Sangakukan Renkei SentaÌ„. 245 10 $6 880-02 $a Shikoku Sangakukan Renkei Sentā̄ katsudo hokoku. 246 11 $a Activity report 260 $6 880-03 $a Kagawa-ken Takamatsu-shi : $b SangyoÌ„ Gijutsu SoÌ„goÌ„ KenkyuÌ„jo Shikoku Sangakukan Renkei SentaÌ„ 500 $a Description based on: 2005; title from cover. 610 20 $a SangyoÌ„ Gijutsu SoÌ„goÌ„ KenkyuÌ„jo. $b Shikoku Sangakukan Renkei SentaÌ„ $v Periodicals. 650 0 $a Technology $z Japan $v Periodicals. 650 0 $a Technological innovations $z Japan $v Periodicals. 850 $a DLC 880 2 $6 110-01/$1 $a 産業技術ç·åˆç ”究所. $b 四国産学官連æºã‚»ãƒ³ã‚¿ãƒ¼. 880 10 $6 245-02/$1 $a 四国産学官連æºã‚»ãƒ³ã‚¿Ì„̄ー活動報告. 880 $6 260-03/$1 $a 香å·çœŒé«˜æ¾å¸‚ : $b 産業技術ç·åˆç ”究所研究所四国産学官連æºã‚»ãƒ³ã‚¿ãƒ¼. 880 24 $6 610-00/$1 $a 産業技術ç·åˆç ”究所. $b 四国産学官連æºã‚»ãƒ³ã‚¿Ì„̄ー $v Periodicals. yaz-4.2.30/test/test_iconv.c0000644000175000017500000005175611733047144012646 00000000000000/* This file is part of the YAZ toolkit. * Copyright (C) 1995-2012 Index Data * See the file LICENSE for details. */ #if HAVE_CONFIG_H #include #endif #include #include #include #include #include #define ESC "\x1b" static int compare_buffers(char *msg, int no, int expect_len, const char *expect_buf, int got_len, const char *got_buf) { if (expect_len == got_len && !memcmp(expect_buf, got_buf, expect_len)) return 1; if (0) /* use 1 see how the buffers differ (for debug purposes) */ { int i; printf("tsticonv test=%s i=%d failed\n", msg, no); printf("off got exp\n"); for (i = 0; i 0 ? in_len : strlen(in_buf); char outbuf0[64]; char *outbuf = outbuf0; while (inbytesleft) { size_t outbytesleft = outbuf0 + sizeof(outbuf0) - outbuf; if (outbytesleft > 12) outbytesleft = 12; r = yaz_iconv(cd, &inbuf, &inbytesleft, &outbuf, &outbytesleft); if (r == (size_t) (-1)) { int e = yaz_iconv_error(cd); if (e != YAZ_ICONV_E2BIG) return 0; } else { yaz_iconv(cd, 0, 0, &outbuf, &outbytesleft); break; } } return compare_buffers("tsticonv 22", 0, expect_len, expect_buf, outbuf - outbuf0, outbuf0); } static int tst_convert_x(yaz_iconv_t cd, const char *buf, const char *cmpbuf, int expect_error) { int ret = 1; WRBUF b = wrbuf_alloc(); char outbuf[16]; size_t inbytesleft = strlen(buf); const char *inp = buf; int rounds = 0; for (rounds = 0; inbytesleft && rounds < (int) sizeof(outbuf); rounds++) { size_t outbytesleft = sizeof(outbuf); char *outp = outbuf; size_t r = yaz_iconv(cd, (char**) &inp, &inbytesleft, &outp, &outbytesleft); wrbuf_write(b, outbuf, outp - outbuf); if (r == (size_t) (-1)) { int e = yaz_iconv_error(cd); if (e != YAZ_ICONV_E2BIG) { if (expect_error != -1) if (e != expect_error) ret = 0; break; } } else { size_t outbytesleft = sizeof(outbuf); char *outp = outbuf; r = yaz_iconv(cd, 0, 0, &outp, &outbytesleft); wrbuf_write(b, outbuf, outp - outbuf); if (expect_error != -1) if (expect_error) ret = 0; break; } } if (wrbuf_len(b) == strlen(cmpbuf) && !memcmp(cmpbuf, wrbuf_buf(b), wrbuf_len(b))) ; else { WRBUF w = wrbuf_alloc(); ret = 0; wrbuf_rewind(w); wrbuf_puts_escaped(w, buf); yaz_log(YLOG_LOG, "input %s", wrbuf_cstr(w)); wrbuf_rewind(w); wrbuf_write_escaped(w, wrbuf_buf(b), wrbuf_len(b)); yaz_log(YLOG_LOG, "got %s", wrbuf_cstr(w)); wrbuf_rewind(w); wrbuf_puts_escaped(w, cmpbuf); yaz_log(YLOG_LOG, "exp %s", wrbuf_cstr(w)); wrbuf_destroy(w); } wrbuf_destroy(b); return ret; } static int tst_convert(yaz_iconv_t cd, const char *buf, const char *cmpbuf) { return tst_convert_x(cd, buf, cmpbuf, 0); } /* some test strings in ISO-8859-1 format */ static const char *iso_8859_1_a[] = { "ax" , "\xd8", "eneb\346r", "\xe5" "\xd8", "\xe5" "\xd8" "b", "\xe5" "\xe5", 0 }; static void tst_marc8_to_ucs4b(void) { yaz_iconv_t cd = yaz_iconv_open("UCS4", "MARC8"); YAZ_CHECK(cd); if (!cd) return; YAZ_CHECK(tst_convert_l( cd, 0, "\033$1" "\x21\x2B\x3B" /* FF1F */ "\033(B" "o", 8, "\x00\x00\xFF\x1F" "\x00\x00\x00o")); YAZ_CHECK(tst_convert_l( cd, 0, "\033$1" "\x6F\x77\x29" /* AE0E */ "\x6F\x52\x7C" /* c0F4 */ "\033(B", 8, "\x00\x00\xAE\x0E" "\x00\x00\xC0\xF4")); YAZ_CHECK(tst_convert_l( cd, 0, "\033$1" "\x21\x50\x6E" /* UCS 7CFB */ "\x21\x51\x31" /* UCS 7D71 */ "\x21\x3A\x67" /* UCS 5B89 */ "\x21\x33\x22" /* UCS 5168 */ "\x21\x33\x53" /* UCS 5206 */ "\x21\x44\x2B" /* UCS 6790 */ "\033(B", 24, "\x00\x00\x7C\xFB" "\x00\x00\x7D\x71" "\x00\x00\x5B\x89" "\x00\x00\x51\x68" "\x00\x00\x52\x06" "\x00\x00\x67\x90")); YAZ_CHECK(tst_convert_l( cd, 0, "\xB0\xB2", /* AYN and oSLASH */ 8, "\x00\x00\x02\xBB" "\x00\x00\x00\xF8")); YAZ_CHECK(tst_convert_l( cd, 0, "\xF6\x61", /* a underscore */ 8, "\x00\x00\x00\x61" "\x00\x00\x03\x32")); YAZ_CHECK(tst_convert_l( cd, 0, "\x61\xC2", /* a, phonorecord mark */ 8, "\x00\x00\x00\x61" "\x00\x00\x21\x17")); /* bug #258 */ YAZ_CHECK(tst_convert_l( cd, 0, "el" "\xe8" "am\xe8" "an", /* elaman where a is a" */ 32, "\x00\x00\x00" "e" "\x00\x00\x00" "l" "\x00\x00\x00" "a" "\x00\x00\x03\x08" "\x00\x00\x00" "m" "\x00\x00\x00" "a" "\x00\x00\x03\x08" "\x00\x00\x00" "n")); /* bug #260 */ YAZ_CHECK(tst_convert_l( cd, 0, "\xe5\xe8\x41", 12, "\x00\x00\x00\x41" "\x00\x00\x03\x04" "\x00\x00\x03\x08")); /* bug #416 */ YAZ_CHECK(tst_convert_l( cd, 0, "\xEB\x74\xEC\x73", 12, "\x00\x00\x00\x74" "\x00\x00\x03\x61" "\x00\x00\x00\x73")); /* bug #416 */ YAZ_CHECK(tst_convert_l( cd, 0, "\xFA\x74\xFB\x73", 12, "\x00\x00\x00\x74" "\x00\x00\x03\x60" "\x00\x00\x00\x73")); yaz_iconv_close(cd); } static void tst_ucs4b_to_utf8(void) { yaz_iconv_t cd = yaz_iconv_open("UTF8", "UCS4"); YAZ_CHECK(cd); if (!cd) return; YAZ_CHECK(tst_convert_l( cd, 8, "\x00\x00\xFF\x1F\x00\x00\x00o", 4, "\xEF\xBC\x9F\x6F")); YAZ_CHECK(tst_convert_l( cd, 8, "\x00\x00\xAE\x0E\x00\x00\xC0\xF4", 6, "\xEA\xB8\x8E\xEC\x83\xB4")); yaz_iconv_close(cd); } static void dconvert(int mandatory, const char *tmpcode) { int i; int ret; yaz_iconv_t cd; for (i = 0; iso_8859_1_a[i]; i++) { size_t r; char *inbuf = (char*) iso_8859_1_a[i]; size_t inbytesleft = strlen(inbuf); char outbuf0[24]; char outbuf1[10]; char *outbuf = outbuf0; size_t outbytesleft = sizeof(outbuf0); cd = yaz_iconv_open(tmpcode, "ISO-8859-1"); YAZ_CHECK(cd || !mandatory); if (!cd) return; r = yaz_iconv(cd, &inbuf, &inbytesleft, &outbuf, &outbytesleft); YAZ_CHECK(r != (size_t) (-1)); r = yaz_iconv(cd, 0, 0, &outbuf, &outbytesleft); YAZ_CHECK(r != (size_t) (-1)); yaz_iconv_close(cd); if (r == (size_t) (-1)) return; cd = yaz_iconv_open("ISO-8859-1", tmpcode); YAZ_CHECK(cd || !mandatory); if (!cd) return; inbuf = outbuf0; inbytesleft = sizeof(outbuf0) - outbytesleft; outbuf = outbuf1; outbytesleft = sizeof(outbuf1); r = yaz_iconv(cd, &inbuf, &inbytesleft, &outbuf, &outbytesleft); YAZ_CHECK(r != (size_t) (-1)); r = yaz_iconv(cd, 0, 0, &outbuf, &outbytesleft); if (r == (size_t)(-1)) { fprintf(stderr, "failed\n"); } YAZ_CHECK(r != (size_t) (-1)); if (r != (size_t)(-1)) { ret = compare_buffers("dconvert", i, strlen(iso_8859_1_a[i]), iso_8859_1_a[i], sizeof(outbuf1) - outbytesleft, outbuf1); YAZ_CHECK(ret); } yaz_iconv_close(cd); } } int utf8_check(unsigned c) { if (sizeof(c) >= 4) { size_t r; char src[4]; char dst[4]; char utf8buf[6]; char *inbuf = src; size_t inbytesleft = 4; char *outbuf = utf8buf; size_t outbytesleft = sizeof(utf8buf); int i; yaz_iconv_t cd = yaz_iconv_open("UTF-8", "UCS4LE"); if (!cd) return 0; for (i = 0; i<4; i++) src[i] = c >> (i*8); r = yaz_iconv(cd, &inbuf, &inbytesleft, &outbuf, &outbytesleft); yaz_iconv_close(cd); if (r == (size_t)(-1)) return 0; cd = yaz_iconv_open("UCS4LE", "UTF-8"); if (!cd) return 0; inbytesleft = sizeof(utf8buf) - outbytesleft; inbuf = utf8buf; outbuf = dst; outbytesleft = 4; r = yaz_iconv(cd, &inbuf, &inbytesleft, &outbuf, &outbytesleft); if (r == (size_t)(-1)) return 0; yaz_iconv_close(cd); if (memcmp(src, dst, 4)) return 0; } return 1; } static void tst_marc8_to_utf8(void) { yaz_iconv_t cd = yaz_iconv_open("UTF-8", "MARC8"); YAZ_CHECK(cd); if (!cd) return; YAZ_CHECK(tst_convert(cd, "Cours de math", "Cours de math")); /* COMBINING ACUTE ACCENT */ YAZ_CHECK(tst_convert(cd, "Cours de mathâe", "Cours de mathe\xcc\x81")); YAZ_CHECK(tst_convert(cd, "\xea" "a", "a\xcc\x8a")); YAZ_CHECK(tst_convert(cd, "a" "\xea" "\x1e", "a" "\x1e\xcc\x8a")); YAZ_CHECK(tst_convert(cd, "a" "\xea" "p", "a" "p\xcc\x8a")); YAZ_CHECK(tst_convert_x(cd, "a\xea", "a", YAZ_ICONV_EINVAL)); YAZ_CHECK(tst_convert(cd, "p", "\xcc\x8a")); /* note: missing p */ yaz_iconv(cd, 0, 0, 0, 0); /* incomplete. so we have to reset */ /* bug #2115 */ YAZ_CHECK(tst_convert(cd, ESC "(N" ESC ")Qp" ESC "(B", "\xd0\x9f")); YAZ_CHECK(tst_convert_x(cd, ESC , "", YAZ_ICONV_EINVAL)); YAZ_CHECK(tst_convert_x(cd, ESC "(", "", YAZ_ICONV_EINVAL)); YAZ_CHECK(tst_convert_x(cd, ESC "(B", "", 0)); YAZ_CHECK(tst_convert(cd, ESC "(B" "\x31", "1")); /* ASCII in G0 */ YAZ_CHECK(tst_convert(cd, ESC ")B" "\xB1", "1")); /* ASCII in G1 */ yaz_iconv_close(cd); } static void tst_marc8s_to_utf8(void) { yaz_iconv_t cd = yaz_iconv_open("UTF-8", "MARC8s"); YAZ_CHECK(cd); if (!cd) return; YAZ_CHECK(tst_convert(cd, "Cours de math", "Cours de math")); /* E9: LATIN SMALL LETTER E WITH ACUTE */ YAZ_CHECK(tst_convert(cd, "Cours de mathâe", "Cours de math\xc3\xa9")); yaz_iconv_close(cd); } static void tst_marc8_to_latin1(void) { yaz_iconv_t cd = yaz_iconv_open("ISO-8859-1", "MARC8"); YAZ_CHECK(cd); if (!cd) return; YAZ_CHECK(tst_convert(cd, "ax", "ax")); /* latin capital letter o with stroke */ YAZ_CHECK(tst_convert(cd, "\xa2", "\xd8")); /* with latin small letter ae */ YAZ_CHECK(tst_convert(cd, "eneb\xb5r", "eneb\346r")); YAZ_CHECK(tst_convert(cd, "\xea" "a\xa2", "\xe5" "\xd8")); YAZ_CHECK(tst_convert(cd, "\xea" "a\xa2" "b", "\xe5" "\xd8" "b")); YAZ_CHECK(tst_convert(cd, "\xea" "a" "\xea" "a", "\xe5" "\xe5")); YAZ_CHECK(tst_convert(cd, "Cours de math", "Cours de math")); YAZ_CHECK(tst_convert(cd, "Cours de mathâe", "Cours de mathé")); YAZ_CHECK(tst_convert(cd, "12345678âe", "12345678é")); YAZ_CHECK(tst_convert(cd, "123456789âe", "123456789é")); YAZ_CHECK(tst_convert(cd, "1234567890âe", "1234567890é")); YAZ_CHECK(tst_convert(cd, "12345678901âe", "12345678901é")); YAZ_CHECK(tst_convert(cd, "Cours de mathâem", "Cours de mathém")); YAZ_CHECK(tst_convert(cd, "Cours de mathâematiques", "Cours de mathématiques")); yaz_iconv_close(cd); } static void tst_utf8_to_marc8(const char *marc8_type) { yaz_iconv_t cd = yaz_iconv_open(marc8_type, "UTF-8"); YAZ_CHECK(cd); if (!cd) return; YAZ_CHECK(tst_convert(cd, "Cours ", "Cours ")); /** Pure ASCII. 11 characters (sizeof(outbuf)-1) */ YAZ_CHECK(tst_convert(cd, "Cours de mat", "Cours de mat")); /** Pure ASCII. 12 characters (sizeof(outbuf)) */ YAZ_CHECK(tst_convert(cd, "Cours de math", "Cours de math")); /** Pure ASCII. 13 characters (sizeof(outbuf)+1) */ YAZ_CHECK(tst_convert(cd, "Cours de math.", "Cours de math.")); /** UPPERCASE SCANDINAVIAN O */ YAZ_CHECK(tst_convert(cd, "S\xc3\x98", "S\xa2")); /** ARING */ YAZ_CHECK(tst_convert(cd, "A" "\xCC\x8A", "\xEA" "A")); /** A MACRON + UMLAUT, DIAERESIS */ YAZ_CHECK(tst_convert(cd, "A" "\xCC\x84" "\xCC\x88", "\xE5\xE8\x41")); /* Ligature spanning two characters */ YAZ_CHECK(tst_convert(cd, "\x74" "\xCD\xA1" "\x73", /* UTF-8 */ "\xEB\x74\xEC\x73")); /* MARC-8 */ /* Double title spanning two characters */ YAZ_CHECK(tst_convert(cd, "\x74" "\xCD\xA0" "\x73", /* UTF-8 */ "\xFA\x74\xFB\x73")); /* MARC-8 */ /** Ideographic question mark (Unicode FF1F) */ YAZ_CHECK(tst_convert(cd, "\xEF\xBC\x9F" "o", /* UTF-8 */ "\033$1" "\x21\x2B\x3B" "\033(B" "o" )); /** Ideographic space per ANSI Z39.64 */ YAZ_CHECK(tst_convert(cd, "\xe3\x80\x80" "o", /* UTF-8 */ "\033$1" "\x21\x23\x21" "\033(B" "o" )); /** Superscript 0 . bug #642 */ YAZ_CHECK(tst_convert(cd, "(\xe2\x81\xb0)", /* UTF-8 */ "(\033p0\x1bs)")); /** bug #1778 */ YAZ_CHECK(tst_convert(cd, /* offset 0x530 in UTF-8 rec marccol4.u8.marc */ "\xE3\x83\xB3" "\xE3\x82\xBF" "\xCC\x84" "\xCC\x84" "\xE3\x83\xBC" /* UTF-8 */, "\x1B\x24\x31" "\x69\x25\x73" "\x1B\x28\x42" "\xE5\xE5" "\x1B\x24\x31" "\x69\x25\x3F" "\x69\x21\x3C" "\x1B\x28\x42")); /** bug #2120 */ YAZ_CHECK(tst_convert(cd, "\xCE\x94\xCE\xB5\xCF\x84" "\xCE\xBF\xCF\x81\xCE\xB1" "\xCE\xBA\xCE\xB7\xCF\x82\x2C", "\x1B\x28\x53\x45\x66\x78\x72\x75" "\x61\x6D\x6A\x77" "\x1B\x28\x42\x2C" )); { char *inbuf0 = "\xe2\x81\xb0"; char *inbuf = inbuf0; size_t inbytesleft = strlen(inbuf); char outbuf0[64]; char *outbuf = outbuf0; size_t outbytesleft = sizeof(outbuf0)-1; size_t r; #if 0 int i; #endif r = yaz_iconv(cd, &inbuf, &inbytesleft, &outbuf, &outbytesleft); YAZ_CHECK(r != (size_t) (-1)); #if 0 *outbuf = '\0'; /* so we know when to stop printing */ for (i = 0; outbuf0[i]; i++) { int ch = outbuf0[i] & 0xff; yaz_log(YLOG_LOG, "ch%d %02X %c", i, ch, ch >= ' ' ? ch : '?'); } #endif r = yaz_iconv(cd, 0, 0, &outbuf, &outbytesleft); YAZ_CHECK(r != (size_t) (-1)); *outbuf = '\0'; /* for strcmp test below and printing */ #if 0 for (i = 0; outbuf0[i]; i++) { int ch = outbuf0[i] & 0xff; yaz_log(YLOG_LOG, "ch%d %02X %c", i, ch, ch >= ' ' ? ch : '?'); } #endif YAZ_CHECK(strcmp("\033p0\x1bs", outbuf0) == 0); } yaz_iconv(cd, 0, 0, 0, 0); yaz_iconv_close(cd); } static void tst_advance_to_utf8(void) { yaz_iconv_t cd = yaz_iconv_open("utf-8", "advancegreek"); YAZ_CHECK(cd); if (!cd) return; YAZ_CHECK(tst_convert(cd, "Cours ", "Cours ")); yaz_iconv_close(cd); } static void tst_utf8_to_advance(void) { yaz_iconv_t cd = yaz_iconv_open("advancegreek", "utf-8"); YAZ_CHECK(cd); if (!cd) return; YAZ_CHECK(tst_convert(cd, "Cours ", "Cours ")); yaz_iconv_close(cd); } static void tst_latin1_to_marc8(void) { yaz_iconv_t cd = yaz_iconv_open("MARC8", "ISO-8859-1"); YAZ_CHECK(cd); if (!cd) return; YAZ_CHECK(tst_convert(cd, "Cours ", "Cours ")); /** Pure ASCII. 11 characters (sizeof(outbuf)-1) */ YAZ_CHECK(tst_convert(cd, "Cours de mat", "Cours de mat")); /** Pure ASCII. 12 characters (sizeof(outbuf)) */ YAZ_CHECK(tst_convert(cd, "Cours de math", "Cours de math")); /** Pure ASCII. 13 characters (sizeof(outbuf)) */ YAZ_CHECK(tst_convert(cd, "Cours de math.", "Cours de math.")); /** D8: UPPERCASE SCANDINAVIAN O */ YAZ_CHECK(tst_convert(cd, "S\xd8", "S\xa2")); /** E9: LATIN SMALL LETTER E WITH ACUTE */ YAZ_CHECK(tst_convert(cd, "Cours de math\xe9", "Cours de mathâe")); YAZ_CHECK(tst_convert(cd, "Cours de math", "Cours de math" )); YAZ_CHECK(tst_convert(cd, "Cours de mathé", "Cours de mathâe" )); YAZ_CHECK(tst_convert(cd, "12345678é","12345678âe")); YAZ_CHECK(tst_convert(cd, "123456789é", "123456789âe")); YAZ_CHECK(tst_convert(cd, "1234567890é","1234567890âe")); YAZ_CHECK(tst_convert(cd, "12345678901é", "12345678901âe")); YAZ_CHECK(tst_convert(cd, "Cours de mathém", "Cours de mathâem")); YAZ_CHECK(tst_convert(cd, "Cours de mathématiques", "Cours de mathâematiques")); yaz_iconv_close(cd); } static void tst_utf8_codes(void) { YAZ_CHECK(utf8_check(3)); YAZ_CHECK(utf8_check(127)); YAZ_CHECK(utf8_check(128)); YAZ_CHECK(utf8_check(255)); YAZ_CHECK(utf8_check(256)); YAZ_CHECK(utf8_check(900)); YAZ_CHECK(utf8_check(1000)); YAZ_CHECK(utf8_check(10000)); YAZ_CHECK(utf8_check(100000)); YAZ_CHECK(utf8_check(1000000)); YAZ_CHECK(utf8_check(10000000)); YAZ_CHECK(utf8_check(100000000)); } static void tst_danmarc_to_latin1(void) { yaz_iconv_t cd = yaz_iconv_open("iso-8859-1", "danmarc"); YAZ_CHECK(cd); if (!cd) return; YAZ_CHECK(tst_convert(cd, "ax", "ax")); YAZ_CHECK(tst_convert(cd, "a@@b", "a@b")); YAZ_CHECK(tst_convert(cd, "a@@@@b", "a@@b")); YAZ_CHECK(tst_convert(cd, "@000ab", "\nb")); YAZ_CHECK(tst_convert(cd, "@\xe5", "aa")); YAZ_CHECK(tst_convert(cd, "@\xc5.", "Aa.")); yaz_iconv_close(cd); } int main (int argc, char **argv) { YAZ_CHECK_INIT(argc, argv); tst_utf8_codes(); tst_marc8_to_utf8(); tst_marc8s_to_utf8(); tst_marc8_to_latin1(); tst_advance_to_utf8(); tst_utf8_to_advance(); tst_utf8_to_marc8("marc8"); tst_utf8_to_marc8("marc8lossy"); tst_utf8_to_marc8("marc8lossless"); tst_danmarc_to_latin1(); tst_latin1_to_marc8(); tst_marc8_to_ucs4b(); tst_ucs4b_to_utf8(); dconvert(1, "UTF-8"); dconvert(1, "ISO-8859-1"); dconvert(1, "UCS4"); dconvert(1, "UCS4LE"); dconvert(0, "CP865"); YAZ_CHECK_TERM; } /* * Local variables: * c-basic-offset: 4 * c-file-style: "Stroustrup" * indent-tabs-mode: nil * End: * vim: shiftwidth=4 tabstop=8 expandtab */ yaz-4.2.30/test/marccol5.u8.1.lst0000644000175000017500000004705111654451754013251 0000000000000001385cam a2200301Ka 4500 001 ocm57665435 003 OCoLC 005 20080328102918.0 008 050215s2004 ii d 000 0 eng d 040 $a ACN $c ACN $d OCLCQ $d IXA $d OCL 020 $a 8176500623 020 $a 9788176500623 035 $a (OCoLC)57665435 041 0 $a beneng 092 $a 491.44321 090 $a PK1687 $b .E65 2004 049 $a LNNA 245 00 $6 880-01 $a English-Bengali Bengali-English combined dictionary = $b ImÌ£raÌ„jiÌ„ - BaÌ„mÌ£laÌ„ BaÌ„mÌ£laÌ„ - ImÌ£raÌ„jiÌ„ samshukuta diksaÌnariÌ„ / $c compiled by Debasis Adhikary. 260 $a New Delhi : $b World of Learning : $b Distributed by Star Publications, $c 2004. 300 $a 1518 p. ; $c 23 cm. 500 $a "More than 90,000 total words from English to Bengali and Bengali to English." 546 $a Bengali and English. 650 0 $a English language $v Dictionaries $x Bengali. 650 0 $a Bengali language $v Dictionaries $x English. 700 1 $a Adhikary, Debasis. 880 00 $6 245-01 $a English-Bengali Bengali-English combined dictionary = $b ইংরাজী - বাংলা বাংলা - ইংরাজী সংযà§à¦•à§à¦¤ ডিকà§à¦¶à¦¨à¦°à§€ / $c compiled by Debasis Adhikary. 880 31 $6 246-00 $a ইংরাজী - বাংলা বাংলা - ইংরাজী সংযà§à¦•à§à¦¤ ডিকà§à¦¶à¦¨à¦°à§€ 994 $a C0 $b LNN 02873nam a22005053i 4500 001 ocm86174229 003 OCoLC 005 20080328102918.0 008 070326s1977 ii b 000 0 san d 040 $a STF $c STF 035 $a (OCoLC)86174229 041 0 $a san $a hin 050 04 $a PK511 $b 1977 049 $a LNNA 100 0 $6 880-01 $a PaÌ„nÌ£ini. 240 10 $a AsÌ£tÌ£aÌ„dhyaÌ„yiÌ„ 245 10 $6 880-02 $a AsÌ£tÌ£aÌ„dhyaÌ„yiÌ„suÌ„trapaÌ„tÌ£hahÌ£ : $b PaÌ„nÌ£iniÌ„yasÌiksÌ£aÌ„-liṅgaÌ„nusÌaÌ„sanasahitasÌca / $c MaharsÌ£ipaÌ„nÌ£inipranÌ£iÌ„tahÌ£ ; upoddhaÌ„talekhakahÌ£ SÌriÌ„naÌ„raÌ„yanÌ£a MisÌrahÌ£. 246 15 $a AsÌ£tÌ£aÌ„dhyaÌ„yiÌ„suÌ„trapaÌ„tÌ£ha : $b with PaÌ„nÌ£iniÌ„yasÌiksÌ£aÌ„ and LiṅgaÌ„nusÌaÌ„sana 250 $6 880-03 $a 1. samÌ£skaranÌ£a. 260 $6 880-04 $a VaÌ„raÌ„nÌ£asiÌ„ ; $a DilliÌ„ : $b CaukhambhaÌ„ OriyantÌ£aÌ„liyaÌ„ ; $a VaÌ„raÌ„nÌ£asiÌ„ : $b anya praÌ„ptisthaÌ„na, CaukhambhaÌ„ VisÌvabhaÌ„ratiÌ„, $c 1977. 300 $a 100 p. 440 0 $6 880-05 $a GokuladaÌ„sa SamÌ£skrÌ¥ta granthamaÌ„laÌ„ ; $v 29 546 $a In Sanskrit; introd. in Hindi. 500 $a "SampaÌ„dakahÌ£ SÌriÌ„naÌ„raÌ„yanÌ£a MisÌrahÌ£"--Cover. 500 $a Added title page in English. 504 $a Includes bibliographical references. 650 0 $a Sanskrit language $x Grammar. 650 0 $a Sanskrit language $x Accents and accentuation. 700 02 $6 880-06 $a PaÌ„nÌ£ini. $t PaÌ„nÌ£iniÌ„yasÌiksÌ£aÌ„. 700 02 $6 880-07 $a PaÌ„nÌ£ini. $t LiṅgaÌ„nusÌaÌ„sana. 700 1 $6 880-08 $a MisÌra, SÌriÌ„naÌ„raÌ„yanÌ£a. 740 02 $6 880-09 $a PaÌ„nÌ£iniÌ„yasÌiksÌ£aÌ„. 740 02 $6 880-10 $a LiṅgaÌ„nusÌaÌ„sana. 880 0 $6 100-01 $a पाणिनी. 880 10 $6 240-00 $a अषà¥à¤Ÿà¤¾à¤§à¥à¤¯à¤¾à¤¯à¥€ 880 10 $6 245-02 $a अषà¥à¤Ÿà¤¾à¤§à¥à¤¯à¤¾à¤¯à¥€à¤¸à¥‚तà¥à¤°à¤ªà¤¾à¤ à¤ƒ : $b पाणिणीयशिकà¥à¤·à¤¾-लिङà¥à¤—ानà¥à¤¶à¤¾à¤¸à¤¨à¤¸à¤¹à¤¿à¤¤à¤¶à¥à¤°à¥à¤š / $c महरà¥à¤·à¤¿à¤ªà¤¾à¤£à¤¿à¤¨à¤¿à¤ªà¥à¤°à¤£à¥€à¤¤à¤ƒ ; उपोदà¥à¤˜à¤¾à¤¤à¤²à¥‡à¤–कः शà¥à¤°à¥€à¤¨à¤¾à¤°à¤¾à¤¯à¤£ मिशà¥à¤°à¤ƒ. 880 $6 250-03 $a 1. संसà¥à¤•रण. 880 $6 260-04 $a वाराणसी ; $a दिलà¥à¤²à¥€ : $b चौखमà¥à¤­à¤¾ ओरियनà¥à¤Ÿà¤¾à¤²à¤¿à¤¯à¤¾ ; $a वाराणसी : $b अनà¥à¤¯ पà¥à¤°à¤¾à¤ªà¥à¤¤à¤¿à¤¸à¥à¤¥à¤¾à¤¨, चौखमà¥à¤­à¤¾ विशà¥à¤µà¤­à¤¾à¤°à¤¤à¥€, $c 1977. 880 0 $6 440-05 $a गोकà¥à¤²à¤¦à¤¾à¤¸ संसà¥à¤•ृत गà¥à¤°à¤¨à¥à¤¥à¤®à¤¾à¤²à¤¾ ; $v 29 880 02 $6 700-06 $a पाणिनी. $t पाणिणीयशिकà¥à¤·à¤¾ 880 02 $6 700-07 $a पाणिनी. $t लिङà¥à¤—ानà¥à¤¶à¤¾à¤¸à¤¨. 880 1 $6 700-08 $a मिशà¥à¤°, शà¥à¤°à¥€à¤¨à¤¾à¤°à¤¾à¤¯à¤£. 880 02 $6 740-09 $a पाणिणीयशिकà¥à¤·à¤¾. 880 02 $6 740-10 $a लिङà¥à¤—ानà¥à¤¶à¤¾à¤¸à¤¨. 994 $a C0 $b LNN 02242cam a2200433Ia 4500 001 ocm44944167 003 OCoLC 005 20080328102918.0 008 000906s2000 ilua 000 0 tam d 040 $a OCO $c OCO $d OCL $d OCLCQ $d TEF 020 $a 0967621208 : $c $24.95 020 $a 9780967621203 035 $a (OCoLC)44944167 041 1 $a tameng $h tam 050 4 $a PL4758.9.T5 $b T5 082 04 $a 894.811 $b T597t 049 $a LNNA 100 0 $a TiruvalÌ£lÌ£uvar. 240 10 $6 880-01 $a Thirukku ral. $l Tamil & English 245 10 $6 880-02 $a Thirukkural : $b Thamizh Marai = Tirukkural : the Holy Scripture / $c [by Tiruvalluvar ; English translation by P.S. Sundaram.]. 250 $a 1st ed. 260 $a Woodridge, Ill. : $b International Tamil Language Foundation, $c c2000. 300 $a 1813 p. : $b ill. (some col.) ; $c 20 cm. 500 $a Tamil text, with English translation. 500 $a "An edition of this translation was published by Penguin Books in 1991." 500 $a Section 2 and section 3, English translation from Tamil by R. Natarajan. 546 $a Text in Tamil and English. 500 $a Non-Latin script record. 600 00 $a TiruvalÌ£lÌ£uvar. 650 0 $a Tamil literature $v Translations into English. 650 0 $a Tamil language materials $x Bilingual. 740 02 $a Handbook of Tamil culture and heritage. 740 02 $a Tamils guide to future. 880 10 $6 240-01 $a திரூகà¯à®•௠றளà¯. $l Tamil & English 880 10 $6 245-02 $a திரூகà¯à®•à¯à®±à®³à¯ : $b தமிழ௠மறை = Tirukkural : the Holy Scripture / $c [by Tiruvalluvar ; English translation by P.S. Sundaram.] 880 0 $6 505-00 $a Section 1: திரூகà¯à®•à¯à®±à®³à¯ : Tirukkural -- Section 2: தறிழà¯à®ªà¯ பணà¯à®ªà®¾à®Ÿà¯à®Ÿà¯‚க௠கையேடூ : The handbook of Tamil culture and heritage -- Section 3: தமிழின எதிரà¯à®•ால வழிகாடà¯à®Ÿà®¿ : Tamils guide to future. 880 02 $6 740-00 $a தமிழà¯à®ªà¯ பணà¯à®ªà®¾à®Ÿà¯à®Ÿà¯‚க௠கையேடூ : The handbook of Tamil culture and heritage. 880 02 $6 740-00 $a தமிழின எதிரà¯à®•ால வழிகாடà¯à®Ÿà®¿ : Tamils guide to future. 994 $a C0 $b LNN 01025cam a2200301Ia 4500 001 ocm62425106 003 OCoLC 005 20080328102918.0 008 051203s2002 th 000 f thaod 040 $a TEF $c TEF $d LNQ $d OCL 020 $a 9749204808 020 $a 9789749204801 035 $a (OCoLC)62425106 090 $a PL4209.D837 $b P57 2002 049 $a LNNA 100 0 $6 880-01 $a DuÌ„angtawan. 245 10 $6 880-02 $a PhracÌŒhan sǣnkon / $c DuÌ„angtawan. 250 $6 880-03 $a Phim khrang thiÌ„ 3. 260 $6 880-04 $a Krung TheÌ„p : $b Phimkham Samnakphim, $c 2545 [2002] 300 $a 154 p. ; $c 21 cm. 500 $a Novel. 546 $a In Thai. 655 7 $a Humorous fiction. $2 gsafd 880 0 $6 100-01 $a ดวงตะวัน. 880 10 $6 245-02 $a พระจันทร์à¹à¸ªà¸™à¸à¸¥ / $c ดวงตะวัน. 880 $6 250-03 $a พิมพ์ครั้งที่ 3. 880 $6 260-04 $a à¸à¸£à¸¸à¸‡à¹€à¸—พฯ : $b พิมพ์คำ สานัà¸à¸žà¸´à¸¡à¸žà¹Œ, $c 2545. 994 $a C0 $b LNN 02684cam a2200409 a 4500 001 14876782 005 20071121181842.0 008 990326s1997 ai a b 001 0 armo 035 $a (Uk)006855813 906 $a p $b cbc $c undeter $d u $e ncip $f 20 $g y-nonroman 010 $a 99189840 040 $a DLC $b eng $c DLC $d DLC-R $d Uk 043 $a a-ai--- $a a-tu--- 050 00 $a BX121 $b .S63 1997 100 1 $6 880-01 $a SmbatyantsÊ¿, Artak, $c Episkopos, $d 1876-1937 245 10 $6 880-02 $a Artak Episkopos SmbatyantsÊ¿ (TaushetsÊ¿i) : hogevor, grakan, patma-banasirakan gortsuneutÊ¿yuneÌŒ ev gndakaharutÊ¿yuneÌŒ, 1876-1937 tÊ¿tÊ¿. / $c kazmetsÊ¿ Sandro Behbudyan. 260 $6 880-03 $a Erevan : $b "Anahit", $c 1997. 300 $a 691 p. : $b ill. ; $c 27 cm. 440 0 $6 880-04 $a Vaveragrer Hay EkeghetsÊ¿u patmutÊ¿yan ; $v girkÊ¿ 3 500 $6 880-05 $a At head of title: Hayastani HanrapetutÊ¿yan KarÌ£avarutÊ¿yann arÌ£eÌŒntÊ¿er. Arkhivayin Gortsi VarchÊ¿utÊ¿yun. Arvesti, GrakanutÊ¿yan ev Mamuli PÊ¿astatÊ¿ghtÊ¿eri Petakan Kentronakan Arkhiv. 504 $a Includes bibliographical references and indexes. 600 10 $6 880-06 $a SmbatyantsÊ¿, Artak, $c Episkopos, $d 1876-1937 610 20 $6 880-07 $a Armenian Church $x History $v Sources. 650 0 $a Armenians $z Turkey. 651 0 $a Armenia $x History $y 1801-1900 $v Sources. 651 0 $a Armenia $x History $y 1901- $v Sources. 700 1 $6 880-08 $a Behbudyan, Sandro $q (Sandro Artashesi), $d 1934- 852 41 $a British Library $b OC $j HEC.1994.a.294/3 880 1 $6 100-01 / $a ÕÕ´Õ¢Õ¡Õ¿ÕµÕ¡Õ¶Ö, Ô±Ö€Õ¿Õ¡Õ¯, $c ÔµÕ¢Õ«Õ½Õ¯Õ¸ÕºÕ¸Õ½, $d 1876-1937. 880 10 $6 245-02 / $a Ô±Ö€Õ¿Õ¡Õ¯ ÔµÕ¢Õ«Õ½Õ¯Õ¸ÕºÕ¸Õ½ ÕÕ´Õ¢Õ¡Õ¿ÕµÕ¡Õ¶Ö (ÕÕ¡Õ¸Ö‚Õ·Õ¥ÖÕ«) : Õ°Õ¸Õ£Õ¥Õ¾Õ¸Ö€, Õ£Ö€Õ¡Õ¯Õ¡Õ¶ ÕºÕ¡Õ¿Õ´Õ¡-Õ¢Õ¡Õ¶Õ¡Õ½Õ«Ö€Õ¡Õ¯Õ¡Õ¶ Õ£Õ¸Ö€Õ®Õ¸Ö‚Õ¶Õ¥Õ¸Ö‚Õ©ÕµÕ¸Ö‚Õ¶Õ¨ Õ¥Õ¾ Õ£Õ¶Õ¤Õ¡Õ¯Õ¡Õ°Õ¡Ö€Õ¸Ö‚Õ©ÕµÕ¸Ö‚Õ¶Õ¨, 1876-1937 Õ©Õ©. / $c Õ¯Õ¡Õ¦Õ´Õ¥Ö ÕÕ¡Õ¶Õ¤Ö€Õ¸ Ô²Õ¥Õ°Õ¢Õ¸Ö‚Õ©ÕµÕ¡Õ¶. 880 $6 260-03 / $a ÔµÖ€Õ¥Õ¾Õ¡Õ¶ : $b «Անահիտ», $c 1997. 880 0 $6 440-04 / $a ÕŽÕ¡Õ¾Õ¥Ö€Õ¡Õ£Ö€Õ¥Ö€ Õ€Õ¡Õµ ÔµÕ¯Õ¥Õ²Õ¥ÖÕ¸Ö‚ ÕºÕ¡Õ¿Õ´Õ¸Ö‚Õ©ÕµÕ¡Õ¶ ; $v Õ£Õ«Ö€Ö„ 3 880 $6 500-05 / $a ÕÕ«Õ¿Õ²Õ¸Õ½Õ« Õ£Õ¬Õ¸Ö‚Õ­: Õ€Õ¡ÕµÕ¡Õ½Õ¿Õ¡Õ¶Õ« Õ€Õ¡Õ¶Ö€Õ¡ÕºÕ¥Õ¿Õ¸Ö‚Õ©ÕµÕ¡Õ¶ Ô¿Õ¡Õ¼Õ¡Õ¾Õ¡Ö€Õ¸Ö‚Õ©ÕµÕ¡Õ¶ Õ¡Õ¼Õ¨Õ¶Õ©Õ¥Ö€. Ô±Ö€Õ­Õ«Õ¾Õ¡ÕµÕ«Õ¶ Ô³Õ¸Ö€Õ®Õ« ÕŽÕ¡Ö€Õ¹Õ¸Ö‚Õ©ÕµÕ¸Ö‚Õ¶. Ô±Ö€Õ¾Õ¥Õ½Õ¿Õ«, Ô³Ö€Õ¡Õ¯Õ¡Õ¶Õ¸Ö‚Õ©ÕµÕ¡Õ¶ Õ¥Õ¾ Õ„Õ¡Õ´Õ¸Ö‚Õ¬Õ« Ô²Õ¡Õ½Õ¿Õ¡Õ©Õ²Õ©Õ¥Ö€Õ« ÕŠÕ¥Õ¿Õ¡Õ¯Õ¡Õ¶ Ô¿Õ¥Õ¶Õ¿Ö€Õ¸Õ¶Õ¡Õ¯Õ¡Õ¶ Ô±Ö€Õ­Õ«Õ¾. 880 10 $6 600-06 / $a ÕÕ´Õ¢Õ¡Õ¿ÕµÕ¡Õ¶Ö, Ô±Ö€Õ¿Õ¡Õ¯, $c ÔµÕ¢Õ«Õ½Õ¯Õ¸ÕºÕ¸Õ½, $d 1876-1937. 880 20 $6 610-07 / $a Õ€Õ¡ÕµÕ¡Õ½Õ¿Õ¡Õ¶Õ¥Õ¡ÕµÖ Õ. ÔµÕ¯Õ¥Õ²Õ¥ÖÕ« $x ÕŠÕ¡Õ¿Õ´Õ¸Ö‚Õ©Õ«Ö‚Õ¶ $v Ô±Õ²Õ¢Õ«Ö‚Ö€Õ¶Õ¥Ö€. 880 1 $6 700-08 / $a Ô²Õ¥Õ°Õ¢Õ¸Ö‚Õ©ÕµÕ¡Õ¶, ÕÕ¡Õ¶Õ¤Ö€Õ¸, $q (ÕÕ¡Õ¶Õ¤Ö€Õ¸ Ô±Ö€Õ¿Õ¡Õ·Õ¥Õ½Õ«), $d 1934- 985 $a armenian LC 01466 am a2200349 a 4500 001 14876783 005 20071121181846.0 008 040502m19461951sy ac 000 0 arm 035 $a (Uk)006881105 906 $a p $b cbc $c undeter $d u $e ncip $f 20 $g y-nonroman 010 $a 2003207810 035 $a (OCoLC)ocm51506679 040 $a DLC $b eng $c DLC $d OCoLC $d Uk 043 $a a-sy--- 050 00 $a BV4539.A75 $b M36 245 00 $6 880-01 $a Mananay : $b taregrkÊ¿oyk. 260 $6 880-02 $a HaleÌ„p : $b HratarakutÊ¿iwn Hogewor EghbarutÊ¿ean EritasardatsÊ¿, $c 1946-1951 300 $a 2 v. : $b ill., ports. ; $c 23 cm. 505 0 $a [1]. 1946, 5-6. 1950-1951. 610 20 $6 880-03 $a Hogewor EghbayrutÊ¿iwn EritasardatsÊ¿. 650 0 $a Armenians $x Religious life $z Syria. 650 0 $a Almanacs, Armenian $z Syria. 650 0 $a Youth $x Religious life $z Syria. 650 0 $a Armenians $z Syria $x Social life and customs. 650 0 $a Armenians $z Lebanon $x Social life and customs. 710 2 $6 880-04 $a Hogewor EghbayrutÊ¿iwn EritasardatsÊ¿. 852 41 $a British Library $b OC $j HEC.2002.a.492 880 00 $6 245-01 / $a Õ„Õ¡Õ¶Õ¡Õ¶Õ¡Õµ : $b Õ¿Õ¡Ö€Õ¥Õ£Ö€Ö„Õ¸ÕµÕ¯. 880 $6 260-02 / $a Õ€Õ¡Õ¬Õ§Õº : $b Õ€Ö€Õ¡Õ¿Õ¡Ö€Õ¡Õ¯Õ¸Ö‚Õ©Õ«Ö‚Õ¶ Õ€Õ¸Õ£Õ¥Ö‚Õ¸Ö€ ÔµÕ²Õ¢Õ¡ÕµÖ€Õ¸Ö‚Õ©Õ¥Õ¡Õ¶ ÔµÖ€Õ«Õ¿Õ¡Õ½Ö€Õ¤Õ¡Ö, $c 1946-1951. 880 20 $6 610-03 / $a Õ€Õ¸Õ£Õ¥Ö‚Õ¸Ö€ ÔµÕ²Õ¢Õ¡ÕµÖ€Õ¸Ö‚Õ©Õ«Ö‚Õ¶ ÔµÖ€Õ«Õ¿Õ¡Õ½Ö€Õ¤Õ¡Ö. 880 2 $6 710-04 / $a Õ€Õ¸Õ£Õ¥Ö‚Õ¸Ö€ ÔµÕ²Õ¢Õ¡ÕµÖ€Õ¸Ö‚Õ©Õ«Ö‚Õ¶ ÔµÖ€Õ«Õ¿Õ¡Õ½Ö€Õ¤Õ¡Ö. 985 $a armenian LC 01818cab a2200385 a 4500 001 14877410 005 20071121185010.0 008 040502m18971900enkmr|p 0 z0arm 035 $a (Uk)002848266 906 $a p $b cbc $c undeter $d u $e ncip $f 20 $g y-nonroman 010 $a 2007970004 019 x $a 2532250240 040 $a Uk $b eng $c Uk 245 00 $6 880-01 $a Mart : $b [amsatÊ¿ertÊ¿, oÌ„rgan HnchÊ¿akean KusaktsÊ¿utÊ¿ean]. 246 3 $a Mard 260 $6 880-02 $a London : $b [SotsÊ¿ial Demokrat HnchÊ¿akean KusaktsÊ¿utÊ¿iwn], $c 1897-1900. 300 $a v. ; $c 44 cm. 500 $a "Battle": an Armenian political newspaper. 500 $a "Mart" published after 1897, as "HnchÊ¿ak" could not be due to legal proceedings. 505 0 $a I year, no. 1 (15 Apr., 1897)-10 (10 Apr., 1898); II year, no. 11 (7 May, 1898)-16 (Mar., 1899); III year, no. 17 (Aug., 1899)-27 (Oct., 1900) 610 20 $6 880-03 $a SotsÊ¿ial Demokrat HnchÊ¿akean KusaktsÊ¿utÊ¿iwn 650 0 $a Armenian periodicals. 650 0 $a Armenians $x Politics and government. 651 0 $a Armenia $x Politics and government. 651 0 $a Armenia $x History $y 1801-1900. 655 4 $a Periodical publications.- London 710 2 $6 880-04 $a SotsÊ¿ial Demokrat HnchÊ¿akean KusaktsÊ¿utÊ¿iwn 740 0 $6 880-05 $a HnchÊ¿ak. 852 41 $a British Library $b HMNTS $j OP.411 880 00 $6 245-01 / $a Õ„Õ¡Ö€Õ¿ : $b [Õ¡Õ´Õ½Õ¡Õ©Õ¥Ö€Õ©, Ö…Ö€Õ£Õ¡Õ¶ Õ€Õ¶Õ¹Õ¡Õ¯Õ¥Õ¡Õ¶ Ô¿Õ¸Ö‚Õ½Õ¡Õ¯ÖÕ¸Ö‚Õ©Õ¥Õ¡Õ¶]. 880 $6 260-02 / $a Ô¼Õ¸Õ¶Õ¤Õ¸Õ¶ : $b [ÕÕ¸ÖÕ«Õ¡Õ¬ Ô´Õ¥Õ´Õ¸Õ¯Ö€Õ¡Õ¿ Õ€Õ¶Õ¹Õ¡Õ¯Õ¥Õ¡Õ¶ Ô¿Õ¸Ö‚Õ½Õ¡Õ¯ÖÕ¸Ö‚Õ©Õ«Ö‚Õ¶], $c 1897-1900. 880 20 $6 610-03 / $a ÕÕ¸ÖÕ«Õ¡Õ¬ Ô´Õ¥Õ´Õ¸Õ¯Ö€Õ¡Õ¿ Õ€Õ¶Õ¹Õ¡Õ¯Õ¥Õ¡Õ¶ Ô¿Õ¸Ö‚Õ½Õ¡Õ¯ÖÕ¸Ö‚Õ©Õ«Ö‚Õ¶. 880 2 $6 710-04 / $a ÕÕ¸ÖÕ«Õ¡Õ¬ Ô´Õ¥Õ´Õ¸Õ¯Ö€Õ¡Õ¿ Õ€Õ¶Õ¹Õ¡Õ¯Õ¥Õ¡Õ¶ Ô¿Õ¸Ö‚Õ½Õ¡Õ¯ÖÕ¸Ö‚Õ©Õ«Ö‚Õ¶. 880 0 $6 740-05 / $a Õ€Õ¶Õ¹Õ¡Õ¯. 985 $a armenian 03105cab a2200601 a 4500 001 14877413 005 20071121185021.0 008 000316d18551865fr er p 0 z0armod 035 $a (Uk)002863571 906 $a p $b cbc $c undeter $d u $e ncip $f 20 $g y-nonroman 010 $a 2007970007 019 x $a 2541830122 035 $a (OCoLC)43646516 040 $a Uk $b eng $c Uk 041 1 $a arm $a fre $a rus $h arm 043 $a a-ai--- $a e------ 245 00 $6 880-01 $a MaseatsÊ¿ aghawni : $b awetaber HayastaneaytsÊ¿ / $c [khmb. GabrieÌ„l AyvazeantsÊ¿]. 246 15 $a Colombe du Massis 246 15 $a Messager de l'ArmeÌnie 246 13 $6 880-02 $a MaseatsÊ¿ aghawni awetaber HayastaneaytsÊ¿ 246 14 $6 880-03 $a MaseatsÊ¿ aghawni ew Tsiatsan HayastaneaytsÊ¿ $f 246 30 $6 880-04 $a Tsiatsan HayastaneaytsÊ¿ $f 246 30 $6 880-05 $a Awetaber HayastaneaytsÊ¿ 260 $6 880-06 $a PÊ¿ariz : $b [Khmbagir ew hratarakichÊ¿ GabrieÌ„l AyvazeantsÊ¿], $c 1855- $e (Paris : $f Imp. W. Remquet) 300 $a v. : $b ill., ports. ; $c 32 cm. 310 $a Biweekly, $b <1 Sept. 1861-> 321 $a Monthly, $b Jan. 1855-> 362 0 $6 880-07 $a 1. tari, tÊ¿iw 1 (Hunuar 1855)- 362 1 $a Ceased in 1865. 500 $6 880-08 $a Imprint varies: Paris : i GranotsÊ¿i Chaniki Aramean, Jan. 1856-> ; Theodosia : Khalipean Usumnaran, 500 $6 880-09 $a Latest issue consulted: 6. tari, tÊ¿iw 17 (15 Sept. 1861) 505 0 $a Vol. I (1855); vol. II (1856); vol. III (1857); vol. VI, 1-8 (1861) 515 $a Not published in 1859. 546 $a In Armenian and French. 650 0 $a Armenians $v Periodicals. 650 0 $a Armenians $z Foreign countries $v Periodicals. 650 0 $a Armenians $v Biography $v Periodicals. 651 0 $a Armenia $v Periodicals. 651 0 $a Europe $v 19th century $v Periodicals. 655 4 $a Periodical publications.- Paris 700 1 $6 880-10 $a AyvazovskÊ¿i, GabrieÌ„l, $d 1812-1880. 852 41 $a British Library $b OC $j 17070.g.5. 880 00 $6 245-01 / $a Õ„Õ¡Õ½Õ¥Õ¡Ö Õ¡Õ²Õ¡Ö‚Õ¶Õ« : $b Õ¡Ö‚Õ¥Õ¿Õ¡Õ¢Õ¥Ö€ Õ€Õ¡ÕµÕ¡Õ½Õ¿Õ¡Õ¶Õ¥Õ¡ÕµÖ / $c [Õ­Õ´Õ¢. Ô³Õ¡Õ¢Ö€Õ«Õ§Õ¬ Ô±ÕµÕ¾Õ¡Õ¦Õ¥Õ¡Õ¶Ö]. 880 13 $6 246-02 / $a Õ„Õ¡Õ½Õ¥Õ¡Ö Õ¡Õ²Õ¡Ö‚Õ¶Õ« Õ¡Ö‚Õ¥Õ¿Õ¡Õ¢Õ¥Ö€ Õ€Õ¡ÕµÕ¡Õ½Õ¿Õ¡Õ¶Õ¥Õ¡ÕµÖ 880 14 $6 246-03 / $a Õ„Õ¡Õ½Õ¥Õ¡Ö Õ¡Õ²Õ¡Ö‚Õ¶Õ« Õ¥Ö‚ Ô¾Õ«Õ¡Õ®Õ¡Õ¶ Õ€Õ¡ÕµÕ¡Õ½Õ¿Õ¡Õ¶Õ¥Õ¡ÕµÖ $f <ÕÕ¥ÕºÕ¿. 1861-> 880 30 $6 246-04 / $a Ô¾Õ«Õ¡Õ®Õ¡Õ¶ Õ€Õ¡ÕµÕ¡Õ½Õ¿Õ¡Õ¶Õ¥Õ¡ÕµÖ $f <ÕÕ¥ÕºÕ¿. 1861-> 880 30 $6 246-05 / $a Ô±Ö‚Õ¥Õ¿Õ¡Õ¢Õ¥Ö€ Õ€Õ¡ÕµÕ¡Õ½Õ¿Õ¡Õ¶Õ¥Õ¡ÕµÖ 880 $6 260-06 / $a Õ“Õ¡Ö€Õ«Õ¦ : $b [Ô½Õ´Õ¢Õ¡Õ£Õ«Ö€ Ö‡ Õ°Ö€Õ¡Õ¿Õ¡Ö€Õ¡Õ¯Õ«Õ¹ Ô³Õ¡Õ¢Ö€Õ«Õ§Õ¬ Ô±ÕµÕ¾Õ¡Õ¦Õ¥Õ¡Õ¶Ö], $c 1855- $e (Paris : $f Imp. W. Remquet) 880 0 $6 362-07 / $a 1. Õ¿Õ¡Ö€Õ«, Õ©Õ«Ö‚ 1 (Õ…Õ¸Ö‚Õ¶Õ¸Ö‚Õ¡Ö€ 1855)- 880 $6 500-08 / $a ÕÕ¡Ö€Õ¢Õ¥Ö€ Õ°Ö€Õ¡Õ¿.: Õ“Õ¡Ö€Õ«Õ¦ : Õ« Ô³Ö€Õ¡Õ¶Õ¸ÖÕ« ÕƒÕ¡Õ¶Õ«Õ¯Õ« Ô±Ö€Õ¡Õ´Õ¥Õ¡Õ¶, Õ…Õ¸Ö‚Õ¶Õ¸Ö‚Õ¡Ö€ 1856-> ; Ô¹Õ¥Õ¸Õ¤Õ¸Õ½Õ«Õ¡ : Ô½Õ¡Õ¬Õ«ÕºÕ¥Õ¡Õ¶ ÕˆÖ‚Õ½Õ¸Ö‚Õ´Õ¶Õ¡Ö€Õ¡Õ¶, <ÕÕ¥ÕºÕ¿. 1861-> 880 $6 500-09 / $a Õ”Õ¶Õ¶Õ¸Ö‚Õ¡Õ® Õ¾Õ¥Ö€Õ»Õ«Õ¶ Õ©Õ«Ö‚: 6. Õ¿Õ¡Ö€Õ«, Õ©Õ«Ö‚ 17 (15 ÕÕ¥ÕºÕ¿. 1861) 880 1 $6 700-10 / $a Ô±ÕµÕ¾Õ¡Õ¦Õ¥Õ¡Õ¶Ö, Ô³Õ¡Õ¢Ö€Õ«Õ§Õ¬ $d 1812-1880. 985 $a armenian 01794 ab a2200349 a 4500 001 14877417 005 20071121185036.0 008 040502m18121816it wu|p 0 a0arm 035 $a (Uk)002870975 906 $a p $b cbc $c undeter $d u $e ncip $f 20 $g y-nonroman 010 $a 2007970012 019 x $a 2543960295 040 $a Uk $b eng $c Uk 245 00 $6 880-01 $a Ditak Biwzandean : $b shabatÊ¿atÊ¿ertÊ¿ apa erkshapatÊ¿atÊ¿ertÊ¿, patmutÊ¿iwn kÊ¿aghakÊ¿agan u paterazmakan, banasirakan, ekeghetsakan / $c khmb. Grigor Gaparachean, M. PÊ¿iwskiwlean, M. Jakhjakhean. 246 3 $a Tidag Piwzantean 260 $6 880-02 $a i Venetik : $b i Vans Srboyn Ghazaru, $c 1812-1816. 300 $a v. ; $c 23 cm. 500 $a Began 1808; ceased 1816. 650 0 $a Armenians $v Periodicals. 651 0 $a Europe $x History $y 1789-1815 $v Periodicals. 651 0 $a Europe $x Politics and government $y 1789-1915 $v Periodicals. 651 0 $a France $x History $y Consulate and First Empire, 1799-1815 $v Periodicals. 700 1 $6 880-03 $a Karapetean, Grigor KhaparÌ£achi 700 1 $6 880-04 $a PÊ¿iwskiwlean, M. 700 1 $6 880-05 $a Jakhjakhean, ManueÌ„l. 852 41 $a British Library $b OC $j 17070.d.3. 880 00 $6 245-01 / $a Ô´Õ«Õ¿Õ¡Õ¯ Ô²Õ«Ö‚Õ¦Õ¡Õ¶Õ¤Õ¥Õ¡Õ¶ : $b Õ·Õ¡Õ¢Õ¡Õ©Õ¡Õ©Õ¥Ö€Õ© Õ¡ÕºÕ¡ Õ¥Ö€Õ¯Õ·Õ¡Õ¢Õ¡Õ©Õ¡Õ©Õ¥Ö€Õ©, ÕºÕ¡Õ¿Õ´Õ¸Ö‚Õ©Õ«Ö‚Õ¶ Ö„Õ¡Õ²Õ¡Ö„Õ¡Õ¯Õ¡Õ¶ Õ¸Ö‚ ÕºÕ¡Õ¿Õ¥Ö€Õ¡Õ¦Õ´Õ¡Õ¯Õ¡Õ¶, Õ¢Õ¡Õ¶Õ¡Õ½Õ«Ö€Õ¡Õ¯Õ¡Õ¶, Õ¥Õ¯Õ¥Õ²Õ¥ÖÕ¡Õ¯Õ¡Õ¶ / $c Õ­Õ´Õ¢. Ô³Ö€Õ«Õ£Õ¸Ö€ Ô³Õ¡ÕºÕ¡Ö€Õ¡Õ³Õ¥Õ¡Õ¶, Õ„. Õ“Õ«Ö‚Õ½Õ¯Õ«Ö‚Õ¬Õ¥Õ¡Õ¶, Õ„. Õ‹Õ¡Õ­Õ»Õ¡Õ­Õ¥Õ¡Õ¶. 880 $6 260-02 / $a Õ« ÕŽÕ¥Õ¶Õ¥Õ¿Õ«Õ¯ : $b Õ« ÕŽÕ¡Õ¶Õ½ ÕÖ€Õ¢Õ¸ÕµÕ¶ Õ‚Õ¡Õ¦Õ¡Ö€Õ¸Ö‚, $c 1812-1816. 880 1 $6 700-03 / $a Ô¿Õ¡Ö€Õ¡ÕºÕ¥Õ¿Õ¥Õ¡Õ¶, Ô³Ö€Õ«Õ£Õ¸Ö€ Ô½Õ¡ÕºÕ¡Õ¼Õ¡Õ³Õ«. 880 1 $6 700-04 / $a Õ“Õ«Ö‚Õ½Õ¯Õ«Ö‚Õ¬Õ¥Õ¡Õ¶, Õ„. 880 1 $6 700-05 / $a Õ‹Õ¡Õ­Õ»Õ¡Õ­Õ¥Õ¡Õ¶, Õ„Õ¡Õ¶Õ¸Ö‚Õ§Õ¬. 985 $a armenian 01672cam a2200325 a 4500 001 14877418 005 20071121185039.0 008 040502m19481961ai acf b 000 0darm 035 $a (Uk)006842308 906 $a p $b cbc $c undeter $d u $e ncip $f 20 $g y-nonroman 010 $a 2007970013 040 $a Uk $b eng $c Uk 100 1 $6 880-01 $a Abovyan, KhachÊ¿atur, $d 1805-1848 240 10 $a Works. $f 1948 245 10 $6 880-02 $a Erkeri liakatar zhoghovatsu utÊ¿ hatorov / $c Kh. Abovyan ; [khmb. kolegia, Av. Isahakyan ... [et al.]]. 246 15 $6 880-03 $a Polnoe sobranie sochineniiÌŒ v vosʹmi tomakh 260 $6 880-04 $a Erevan : $b HSSRÌ£ GitutÊ¿yunneri Akademiai HratarakchÊ¿utÊ¿yun, $c 1948-1961. 300 $a 8 v. in 10 books : $b ill., port. ; $c 26 cm. 500 $a Illustrated end-papers. 650 0 $a Armenian literature. 700 1 $6 880-05 $a Isahakyan, AvetikÊ¿, $d 1875-1957 710 2 $6 880-06 $a M. Abeghyani Anvan GrakanutÊ»yan Institut. 852 41 $a British Library $b OC $j 17046.h.1 880 1 $6 100-01 / $a Ô±Õ¢Õ¸Õ¾ÕµÕ¡Õ¶, Ô½Õ¡Õ¹Õ¡Õ¿Õ¸Ö‚Ö€, $d 1805-1848. 880 10 $6 245-02 / $a ÔµÖ€Õ¯Õ¥Ö€Õ« Õ¬Õ«Õ¡Õ¯Õ¡Õ¿Õ¡Ö€ ÕªÕ¸Õ²Õ¸Õ¾Õ¡Õ®Õ¸Ö‚ Õ¸Ö‚Õ© Õ°Õ¡Õ¿Õ¸Ö€Õ¸Õ¾ / $c Ô½. Ô±Õ¢Õ¸Õ¾ÕµÕ¡Õ¶ ; [Õ­Õ´Õ¢. Õ¯Õ¸Õ¬Õ¥Õ£Õ«Õ¡ Ô±Õ¾. Ô»Õ½Õ¡Õ°Õ¡Õ¯ÕµÕ¡Õ¶ ... [Ö‡ Õ¸Ö‚Ö€Õ·Õ¶.]]. 880 15 $6 246-03 / $a Полное Ñобрание Ñочинений в воÑьми томах 880 $6 260-04 / $a ÔµÖ€Õ¥Õ¾Õ¡Õ¶ : $b Õ€ÕÕÕŒ Ô³Õ«Õ¿Õ¸Ö‚Õ©ÕµÕ¸Ö‚Õ¶Õ¶Õ¥Ö€Õ« Ô±Õ¯Õ¡Õ¤Õ¥Õ´Õ«Õ¡Õ« Õ€Ö€Õ¡Õ¿Õ¡Ö€Õ¡Õ¯Õ¹Õ¸Ö‚Õ©ÕµÕ¸Ö‚Õ¶, $c 1948-1961. 880 1 $6 700-05 / $a Ô»Õ½Õ¡Õ°Õ¡Õ¯ÕµÕ¡Õ¶, Ô±Õ¾Õ¥Õ¿Õ«Ö„, $d 1875-1957. 880 2 $6 710-06 / $a Õ„. Ô±Õ¢Õ¥Õ²ÕµÕ¡Õ¶Õ« Ô±Õ¶Õ¾Õ¡Õ¶ Ô³Ö€Õ¡Õ¯Õ¡Õ¶Õ¸Ö‚Õ©ÕµÕ¡Õ¶ Ô»Õ¶Õ½Õ¿Õ«Õ¿Õ¸Ö‚Õ¿. 985 $a armenian 01187cab a2200301 a 4500 001 14879015 005 20071203081856.0 008 040502m18641877tu mr|p 0 z0arm 035 $a (Uk)002824493 906 $a p $b cbc $c undeter $d u $e ncip $f 20 $g y-nonroman 010 $a 2007970001 019 x $a 2520240032 040 $a Uk $b eng $c Uk 245 00 $6 880-01 $a Hoys : $b [droÌ„shak hayreneats, amsagir banasirakan]. 246 3 $a Huys 246 3 $a Yuys 260 $6 880-02 $a Armash : $b [Armashi VankÊ¿], $c 1864-1877. 300 $a v. ; $c 23 cm. 500 $a Hoys. “Hope,†a monthly magazine of literature in modern Armenian, Western dialect, printed at the Convent of the Mother of God at Armash. 505 0 $a Vol. I, 1-12 (1864-1865), II, 13-24 (1865-1866) 650 0 $a Armenian literature $v Periodicals. 650 0 $a Armenian language $v Periodicals. 650 0 $a Armenians $x Religious life. 655 4 $a Periodical publications.- Armash 852 41 $a British Library $b OC $j 17070.g.3. 880 00 $6 245-01 / $a Õ…Õ¸ÕµÕ½ : $b Õ¤Ö€Ö…Õ·Õ¡Õ¯ Õ°Õ¡ÕµÖ€Õ¥Õ¶Õ¥Õ¡Ö, Õ¡Õ´Õ½Õ¡Õ£Õ«Ö€ Õ¢Õ¡Õ¶Õ¡Õ½Õ«Ö€Õ¡Õ¯Õ¡Õ¶]. 880 $6 260-02 / $a Ô±Ö€Õ´Õ¡Õ· : $b [Ô±Ö€Õ´Õ¡Õ·Õ« ÕŽÕ¡Õ¶Ö„], $c 1864-1877. 985 $a armenian2 yaz-4.2.30/test/cql2xcqlsample0000644000175000017500000000420111733047144013162 00000000000000# CQL queries for testing. # from http://www.loc.gov/z3950/agency/zing/cql/sample-queries.html # Simple Term cat "cat" comp.os.linux ml:element "" "=" "prox/distance<3/unit=word" ("cat") ((dog)) all prox # Index Relation Term title = "fish" title == fish title any fish title all fish title > 9 title >= 23 dc.title any "fish chips" dc.title any/stem fish dc.fish all/stem/fuzzy "fish chips" (title any frog) ((dc.title any/stem "frog pond")) dc.title = "fish frog chicken" dc.title =/rel.algorithm=CORI squid creator any/f.foo/b.bar>1 "sanderson taylor" # Simple Boolean cat or dog cat and fish cat not frog (cat not frog) "cat" not "fish food" xml and "prox///" fred and any ((fred or all)) a or b and c not d # Index Relation Term plus Boolean bath.uniformTitle any fish and dc.title any "cat dog" (title any/stem "fish dog" or and) # Proximity and Boolean Modifiers cat prox hat cat prox/distance=3/unit=word/ordered hat cat prox/distance<3 hat "fish food" prox/unit=sentence and title all "chips frog" prox/distance<=5 exact (dc.author == "jones" prox/distance>5/unit=element title >= "smith") a and/rel.SumOfScores b a and/rel.algorithm=CORI b # Special Characters (cat^) "cat" "^cat says \"fish\"" "cat*fish" cat?dog (("^cat*fishdog\"horse?")) # Nesting Parentheses (((cat or dog) or horse) and frog) (cat and dog) or (horse and frog) (cat and (horse or frog)) and chips # Prefix Maps > foo="info:srw/cql-context-set/1/dc-v1.1" dc.title="fish" > "info:srw/cql-context-set/1/dc-v1.1" title="fish" > foo="info:srw/cql-context-set/1/dc-v1.1" > ccg = "http://srw.cheshire3.org/contextSets/ccg/1.1/" foo.title="fish" and ccg.force=3 # Lame Searches any or all:stem and all == any prox prox=fuzzy (((((((((any))))))))) "" > any > any = exact any > any # Invalid searches [should error] < === missingClause or missingTerm any () (missingParen missingParen any fish) (emptyParens or ()) title = ("illegal parentheses") > illegal="urn:missingQuery" # free-form term OK) a b a b c a.b c and b c all a a any b dc.title a b c and d # free-form term (Syntax error) a b.c a and # sortby a sortby title a or b sortby title/ascending author yaz-4.2.30/test/marccol2.u8.1.lst0000644000175000017500000000562111654451754013243 0000000000000003103cam a2200337 i 4500 001 12683849 005 20051218154744.0 008 981008b2001 ilu 000 0 eng 035 $a 57779 035 $a 90490 035 $a 93202 040 $a DLC $c DLC 906 $a 0 $b und $c orignew $d u $e ncip $f 19 $g y-gencatlg 010 $a 77123332 245 00 $a Voyager Diacritic test -- New input 001 (SBIE) 260 $a ny $b ny, $c 2001. 300 $a p. $c cm. 500 $a New copy imported from file (8/12/99) 500 $a VOYAGER COLUMN 0 (NEW): Degree sign (°); Phono Copyright mark (â„—); Copyright mark (©); Sharp (♯); Inverted Question mark (¿); Inverted Exclamation mark (¡) 500 $a VOYAGER COLUMN 1: Script L (â„“); Polish L (Å); Scandanavian O (Ø); D with Crossbar (Ä); Icelandic Thorn (Þ); AE Digraph (Æ); OE Digraph (Å’); Miagkii Znak (ʹ); Dot at Midline (·) 500 $a VOYAGER COLUMN 2: Musical Flat (â™­); Patent Mark (®); Plus or Minus (±); O Hook (Æ ); U Hook (Ư); Alif (ʾ); alpha (DO NOT USE); Ayn (Ê»); Polish l (Å‚) 500 $a VOYAGER COLUMN 3: Scandanavian o (ø); d with crossbar (Ä‘); Icelandic Thorn (þ); ae Digraph (æ); oe Digraph (Å“); Tverdii Znak (ʺ); Turkish i (ı); British Pound (£); eth (ð) 500 $a VOYAGER COLUMN 4: Dagger (DO NOT USE); o Hook (Æ¡); u Hook (ư); Beta (DO NOT USE); Gamma (DO NOT USE); Superscript 0 (â°); Superscript 1 (¹); Superscript 2 (²); Superscript 3 (³) 500 $a VOYAGER COLUMN 5: Superscript 4 (â´); Superscript 5 (âµ); Superscript 6 (â¶); Superscript 7 (â·); Superscript 8 (â¸); Superscript 9 (â¹); Superscript + (âº); Superscript - (â»); Superscript ( (â½); 500 $a VOYAGER COLUMN 6: Superscript ) (â¾); Subscript 0 (â‚€); Subscript 1 (â‚); Subscript 2 (â‚‚); Subscript 3 (₃); Subscript 4 (â‚„); Subscript 5 (â‚…); Subscript 6 (₆); Subscript 7 (₇) 500 $a VOYAGER COLUMN 7: Subscript 8 (₈); Subscript 9 (₉); Subscript + (₊); Subscript - (â‚‹); Subscript ( (â‚); Subscript ) (₎); Pseudo Question Mark (ỏ); Grave (oÌ€); Acute (oÌ) 500 $a VOYAGER COLUMN 8: Circumflex (oÌ‚); Tilde (õ); Macron (oÌ„); Breve (ŏ); Superior Dot (ȯ); Umlaut (ö); Hacek (oÌŒ); Circle Above (oÌŠ); Ligature left (o︠) 500 $a VOYAGER COLUMN 9: Ligature right (o︡) ; High Comma off center (oÌ•); Double Acute (oÌ‹); Candrabindu (oÌ); Cedilla (o̧); Right Hook (ǫ); Dot Below (oÌ£); Double Dot Below (o̤); Circle Below (oÌ¥) 500 $a VOYAGER COLUMN 10: Double Underscore (o̳); Underscore (o̲); Left Hook (o̦); Right Cedilla (oÌœ); Upadhmaniya (oÌ®); Double Tilde 1st half (o︢); Double Tilde 2nd half (o︣) ; High Comma centered (oÌ“) 500 $a VOYAGER PC Keyboard: Spacing Circumflex (^); Spacing Underscore (_); Spacing Grave (`); Open Curly Bracket ({); Close Curly Bracket (}); Spacing Tilde (~) 500 $a Standard PC Keyboard: 1234567890-= !@#$%^&*()_+ qwertyuiop[]\ QWERTYUIOP{}| asdfghjkl;' ASDFGHJKL:" zxcvbnm,./ ZXCVBNM<>? yaz-4.2.30/test/test_rpn2solr.c0000644000175000017500000001076011733047144013277 00000000000000/* This file is part of the YAZ toolkit. * Copyright (C) 1995-2012 Index Data * See the file LICENSE for details. */ #if HAVE_CONFIG_H #include #endif #include #include #include #include #include #include #include static int compare(solr_transform_t ct, const char *pqf, const char *solr) { int ret = 0; ODR odr = odr_createmem(ODR_ENCODE); WRBUF w = wrbuf_alloc(); Z_RPNQuery *q = p_query_rpn(odr, pqf); if (q) { int r = solr_transform_rpn2solr_wrbuf(ct, w, q); if (r != 0) { /* transform error */ yaz_log(YLOG_LOG, "%s -> Error %d", pqf, r); if (!solr) /* also expected error? */ ret = 1; } else if (r == 0) { yaz_log(YLOG_LOG, "%s -> %s", pqf, wrbuf_cstr(w)); if (solr && !strcmp(wrbuf_cstr(w), solr)) { ret = 1; } } } wrbuf_destroy(w); odr_destroy(odr); return ret; } static void tst1(void) { solr_transform_t ct = solr_transform_create(); YAZ_CHECK(compare(ct, "abc", "abc")); YAZ_CHECK(compare(ct, "\"a b c\"", "\"a b c\"")); YAZ_CHECK(compare(ct, "@not a b", "a AND NOT b")); YAZ_CHECK(compare(ct, "@and @or a b c", "(a OR b) AND c")); YAZ_CHECK(compare(ct, "@and a b", "a AND b")); YAZ_CHECK(compare(ct, "@or a b", "a OR b")); YAZ_CHECK(compare(ct, "@attr 1=field abc", "field:abc")); YAZ_CHECK(compare(ct, "@attr 1=field \"a b c\"", "field:\"a b c\"")); YAZ_CHECK(compare(ct, "@attr 1=4 abc", 0)); /* should fail */ solr_transform_define_pattern(ct, "index.title", "1=4"); YAZ_CHECK(compare(ct, "@attr 1=4 abc", "title:abc")); solr_transform_define_pattern(ct, "index.foo", "1=bar"); YAZ_CHECK(compare(ct, "@attr 1=bar abc", "foo:abc")); /* Truncation */ YAZ_CHECK(compare(ct, "@attr 5=1 water", "water*")); YAZ_CHECK(compare(ct, "@attr 5=2 water", 0)); YAZ_CHECK(compare(ct, "@attr 5=3 water", 0)); YAZ_CHECK(compare(ct, "@attr 5=100 water", "water")); YAZ_CHECK(compare(ct, "@attr 5=101 water", 0)); YAZ_CHECK(compare(ct, "@attr 5=104 w#ter", "w?ter")); YAZ_CHECK(compare(ct, "@attr 5=104 w#t?r", "w?t*r")); YAZ_CHECK(compare(ct, "@attr 5=104 w#te?", "w?te*")); YAZ_CHECK(compare(ct, "@attr 5=104 w\\#te?", "w?te*")); /* PQF eats # */ YAZ_CHECK(compare(ct, "@attr 5=104 w\\\\#te?", "w#te*")); /* reserved characters */ YAZ_CHECK(compare(ct, "@attr 5=104 \\\"\\\\\\\\", "\\\"" "\\\\")); YAZ_CHECK(compare(ct, "@attr 5=104 \\\"\\\\\\\\\\\"", "\\\"" "\\\\" "\\\"")); YAZ_CHECK(compare(ct, "@attr 5=104 \\\"\\\\", "\\\"\\\\")); YAZ_CHECK(compare(ct, "@attr 5=104 \\{:\\}", "\\{\\:\\}")); YAZ_CHECK(compare(ct, "@attr 5=104 \\\"\\\\\\\\\\\"", "\\\"" "\\\\" "\\\"")); solr_transform_close(ct); } static void tst2(void) { WRBUF w = wrbuf_alloc(); solr_transform_t ct = 0; const char *srcdir = getenv("srcdir"); if (srcdir) { wrbuf_puts(w, srcdir); wrbuf_puts(w, "/"); } wrbuf_puts(w, "../etc/pqf.properties"); ct = solr_transform_open_fname(wrbuf_cstr(w)); YAZ_CHECK(compare(ct, "@attr 1=4 abc", "dc.title:abc")); #if 0 YAZ_CHECK(compare(ct, "@attr 1=4 @attr 4=108 abc", "dc.title:abc")); #endif YAZ_CHECK(compare(ct, "@attr 1=4 @attr 3=1 @attr 6=1 abc", "dc.title:abc")); YAZ_CHECK(compare(ct, "@attr 1=4 @attr 4=1 @attr 6=1 abc", "dc.title:abc")); #if 0 YAZ_CHECK(compare(ct, "@attr 1=1016 abc", "abc")); YAZ_CHECK(compare(ct, "@attr 2=1 @attr 1=30 1980", "dc.date:[* to 1980]")); YAZ_CHECK(compare(ct, "@attr 1=30 @attr 2=3 1980", "dc.date:1980")); YAZ_CHECK(compare(ct, "@attr 1=30 @attr 2=5 1980", "dc.date:[* to 1980]")); YAZ_CHECK(compare(ct, "@attr 1=30 @attr 2=2 1980", "dc.date:[* to 1980]")); YAZ_CHECK(compare(ct, "@attr 1=30 @attr 2=4 1980", "dc.date:[1980 to *]")); YAZ_CHECK(compare(ct, "@attr 2=103 @attr 1=_ALLRECORDS 1", "solr.allRecords=1")); #endif YAZ_CHECK(compare(ct, "@attr 1=500 abc", 0)); solr_transform_close(ct); wrbuf_destroy(w); } int main (int argc, char **argv) { YAZ_CHECK_INIT(argc, argv); YAZ_CHECK_LOG(); tst1(); tst2(); YAZ_CHECK_TERM; } /* * Local variables: * c-basic-offset: 4 * c-file-style: "Stroustrup" * indent-tabs-mode: nil * End: * vim: shiftwidth=4 tabstop=8 expandtab */ yaz-4.2.30/test/xml2tmarc3.xml0000644000175000017500000000344111741237740013031 00000000000000 00914naa a2200337 450 a00001508ain1991xxnora9axxnoreng06Byfornyelse ved Ibsen-RingenfarvefotoplansnitByggekunst19911/241-45byfornyelsesaneringNorgeOsloTelje Torp Aasen ArkitektkontorKristian Augustsgate 7BEng, Dagfinanlund, TomKristian AugustsgatePilestredet 19aITMARK50000014519911/241-4520020111ARK01200220020111ARK01211620021002ARK011000ICLLOAD0020021122ARK01194820030618ARK011330a00001508 yaz-4.2.30/test/tmarc3.xml0000644000175000017500000000441111741237740012224 00000000000000 00914naa a2200337 450 a00001508 a i n 1991 xx nor a 9 a xx nor eng 06 Byfornyelse ved Ibsen-Ringen farvefoto plan snit Byggekunst 1991 1/2 41-45 byfornyelse sanering Norge Oslo Telje Torp Aasen Arkitektkontor Kristian Augustsgate 7B Eng, Dagfin anlund, Tom Kristian Augustsgate Pilestredet 19 a ITM ARK50 0000145 1991 1/2 41-45 20020111 ARK01 2002 20020111 ARK01 2116 20021002 ARK01 1000 ICLLOAD 00 20021122 ARK01 1948 20030618 ARK01 1330 a00001508 yaz-4.2.30/test/test_options.c0000644000175000017500000000402611733047144013207 00000000000000/* This file is part of the YAZ toolkit. * Copyright (C) 1995-2012 Index Data * See the file LICENSE for details. */ #if HAVE_CONFIG_H #include #endif #include #include #include #include static void tst(void) { char *argv[16] = { "program", "-a", "-b", "-", "-cd", "--longa", "-n11", "-n", "12", "--marmelade", "13", "file", "--", "-a", "--b", "other"}; int argc = sizeof(argv) / sizeof(*argv); char *arg = 0; const char *desc = "a{longa}b{longb}cdn:m{marmelade}:"; YAZ_CHECK_EQ(options(desc, argv, argc, &arg), 'a'); YAZ_CHECK_EQ(options(desc, argv, argc, &arg), 'b'); YAZ_CHECK_EQ(options(desc, argv, argc, &arg), 0); YAZ_CHECK(arg && !strcmp(arg, "-")); YAZ_CHECK_EQ(options(desc, argv, argc, &arg), 'c'); YAZ_CHECK_EQ(options(desc, argv, argc, &arg), 'd'); YAZ_CHECK_EQ(options(desc, argv, argc, &arg), 'a'); YAZ_CHECK_EQ(options(desc, argv, argc, &arg), 'n'); YAZ_CHECK(arg && !strcmp(arg, "11")); YAZ_CHECK_EQ(options(desc, argv, argc, &arg), 'n'); YAZ_CHECK(arg && !strcmp(arg, "12")); YAZ_CHECK_EQ(options(desc, argv, argc, &arg), 'm'); YAZ_CHECK(arg && !strcmp(arg, "13")); YAZ_CHECK_EQ(options(desc, argv, argc, &arg), 0); YAZ_CHECK(arg && !strcmp(arg, "file")); YAZ_CHECK_EQ(options(desc, argv, argc, &arg), 0); YAZ_CHECK(arg && !strcmp(arg, "-a")); YAZ_CHECK_EQ(options(desc, argv, argc, &arg), 0); YAZ_CHECK(arg && !strcmp(arg, "--b")); YAZ_CHECK_EQ(options(desc, argv, argc, &arg), 0); YAZ_CHECK(arg && !strcmp(arg, "other")); YAZ_CHECK_EQ(options(desc, argv, argc, &arg), YAZ_OPTIONS_EOF); } int main(int argc, char **argv) { YAZ_CHECK_INIT(argc, argv); YAZ_CHECK_LOG(); tst(); YAZ_CHECK_TERM; } /* * Local variables: * c-basic-offset: 4 * c-file-style: "Stroustrup" * indent-tabs-mode: nil * End: * vim: shiftwidth=4 tabstop=8 expandtab */ yaz-4.2.30/test/xml2tmarc1.xml0000644000175000017500000000351611741237740013032 00000000000000 00988nam0a32003011 450 9 181 423 4710100anemu2002useng0axx1-4000-4596-7$14,00DBC200439SlomanLarryOn the road with Bob DylanLarry "Ratso" SlomanRevised editionThree Rivers PressNew YorkThree Rivers Press2002xv, 464 sider, tavlerLarry "Ratso" Slomans meget personlige beretning om Bob Dylans koncertturne i USA i 1975: "The Rolling Thunder revue"På omslaget: With a new introduction by Kinky FriedmanTidligere: 1. udgave. New York, Bantam, 197899.4DylanBob78.90645folkemusikfolkemusikererockmusikrockmusikererockkoncerterUSA1970-1979 yaz-4.2.30/test/test_cql2pqf.sh0000755000175000017500000000210611733047144013254 00000000000000#!/bin/sh srcdir=${srcdir:-.} oIFS="$IFS" IFS=' ' secno=0 testno=0 comment=0 ecode=0 test -f ${srcdir}/cql2pqfsample || exit 1 test -d cql2pqf || mkdir cql2pqf while read f; do if echo $f | grep '^#' >/dev/null; then comment=1 else if test "$comment" = "1"; then secno=`expr $secno + 1` testno=0 fi comment=0 testno=`expr $testno + 1` OUT1=${srcdir}/cql2pqf/$secno.$testno.out ERR1=${srcdir}/cql2pqf/$secno.$testno.err OUT2=cql2pqf/$secno.$testno.out.tmp ERR2=cql2pqf/$secno.$testno.err.tmp DIFF=cql2pqf/$secno.$testno.diff ../util/cql2pqf -v ${srcdir}/../etc/pqf.properties "$f" >$OUT2 2>$ERR2 if test -f $OUT1 -a -f $ERR1; then if diff $OUT1 $OUT2 >$DIFF; then rm $DIFF rm $OUT2 else echo "diff out $secno $testno $f" cat $DIFF ecode=1 fi if diff $ERR1 $ERR2 >$DIFF; then rm $DIFF rm $ERR2 else echo "diff err $secno $testno $f" cat $DIFF ecode=1 fi else echo "making test $secno $testno $f" mv $OUT2 $OUT1 mv $ERR2 $ERR1 ecode=1 fi fi done < cql2pqfsample IFS="$oIFS" exit $ecode yaz-4.2.30/test/Makefile.am0000644000175000017500000000723211733047144012347 00000000000000## This file is part of the YAZ toolkit. ## Copyright (C) 1995-2012 Index Data check_PROGRAMS = test_ccl test_comstack test_cql2ccl \ test_filepath test_file_glob \ test_iconv test_icu test_json \ test_libstemmer test_log test_log_thread \ test_match_glob test_matchstr test_mutex \ test_nmem test_odr test_odrstack test_oid test_options \ test_pquery test_query_charset \ test_record_conv test_rpn2cql test_rpn2solr test_retrieval \ test_shared_ptr test_soap1 test_soap2 test_solr test_sortspec \ test_timing test_tpath test_wrbuf \ test_xmalloc test_xml_include test_xmlquery check_SCRIPTS = test_marc.sh test_marccol.sh test_cql2xcql.sh \ test_cql2pqf.sh test_icu.sh TESTS = $(check_PROGRAMS) $(check_SCRIPTS) EXTRA_DIST = tstodr.asn test_odrcodec.c test_odrcodec.h cql2xcqlsample \ cql2pqf-order.txt cql2pqfsample \ $(check_SCRIPTS) \ marccol1.u8.marc marccol1.u8.1.lst marccol1.u8.2.lst \ marccol2.u8.marc marccol2.u8.1.lst marccol2.u8.2.lst \ marccol3.u8.marc marccol3.u8.1.lst marccol3.u8.2.lst \ marccol4.u8.marc marccol4.u8.1.lst marccol4.u8.2.lst \ marccol5.u8.marc marccol5.u8.1.lst marccol5.u8.2.lst \ test_icu.0.xml test_icu.0.input test_icu.0.output \ test_icu.1.xml test_icu.1.input test_icu.1.output \ test_icu.2.xml test_icu.2.input test_icu.2.output \ test_icu.3.xml test_icu.3.input test_icu.3.output \ test_record_conv.xsl test_xml_include.xml YAZCOMP = ../util/yaz-asncomp YAZCOMPLINE = $(YAZCOMP) -d z.tcl -i yaz -I../include $(YCFLAGS) AM_CPPFLAGS=-I$(top_srcdir)/include $(XML2_CFLAGS) $(ICU_CPPFLAGS) dist-hook: mkdir -p $(distdir)/cql cp $(srcdir)/cql/*.err $(srcdir)/cql/*.out $(distdir)/cql mkdir -p $(distdir)/cql2pqf cp $(srcdir)/cql2pqf/*.err $(srcdir)/cql2pqf/*.out $(distdir)/cql2pqf cp $(srcdir)/marc?.chr $(distdir) cp $(srcdir)/marc?.marc $(distdir) cp $(srcdir)/marc?.xml $(distdir) cp $(srcdir)/*.xml.marc $(distdir) cp $(srcdir)/xml2marc?.xml $(distdir) cp $(srcdir)/tmarc?.xml $(distdir) cp $(srcdir)/xml2tmarc?.xml $(distdir) # Rule for generating codecs for our small ASN.1 spec test_odrcodec.c test_odrcodec.h: tstodr.asn $(YAZCOMP) cd $(srcdir); $(YAZCOMP) tstodr.asn LDADD = ../src/libyaz.la test_icu_LDADD = ../src/libyaz_icu.la ../src/libyaz.la $(ICU_LIBS) test_libstemmer_LDADD = ../src/libyaz_icu.la ../src/libyaz.la $(ICU_LIBS) CONFIG_CLEAN_FILES=*.log test_cql2ccl_SOURCES = test_cql2ccl.c test_xmalloc_SOURCES = test_xmalloc.c test_iconv_SOURCES = test_iconv.c test_nmem_SOURCES = test_nmem.c test_matchstr_SOURCES = test_matchstr.c test_wrbuf_SOURCES = test_wrbuf.c test_odr_SOURCES = test_odrcodec.c test_odrcodec.h test_odr.c test_odrstack_SOURCES = test_odrstack.c test_ccl_SOURCES = test_ccl.c test_log_SOURCES = test_log.c test_mutex_SOURCES = test_mutex.c test_soap1_SOURCES = test_soap1.c test_soap2_SOURCES = test_soap2.c test_solr_SOURCES = test_solr.c test_sortspec_SOURCES = test_sortspec.c test_log_thread_SOURCES = test_log_thread.c test_xmlquery_SOURCES = test_xmlquery.c test_options_SOURCES = test_options.c test_pquery_SOURCES = test_pquery.c test_comstack_SOURCES = test_comstack.c test_filepath_SOURCES = test_filepath.c test_oid_SOURCES = test_oid.c test_record_conv_SOURCES = test_record_conv.c test_retrieval_SOURCES = test_retrieval.c test_tpath_SOURCES = test_tpath.c test_timing_SOURCES = test_timing.c test_query_charset_SOURCES = test_query_charset.c test_icu_SOURCES = test_icu.c test_match_glob_SOURCES = test_match_glob.c test_rpn2cql_SOURCES = test_rpn2cql.c test_rpn2solr_SOURCES = test_rpn2solr.c test_json_SOURCES = test_json.c test_xml_include_SOURCES = test_xml_include.c test_file_glob_SOURCES = test_file_glob.c test_shared_ptr_SOURCES = test_shared_ptr.c test_libstemmer_SOURCES = test_libstemmer.c yaz-4.2.30/test/marc2.xml0000644000175000017500000001023311741237740012036 00000000000000 01116nam0a32002171 450 9 182 502 3 710100 a c e s f 1995 gb eng 0 s xc bef Mimms Garnet Cry baby Warm and soulful Garnet Mimms ... [et al.] Bury St. Edmunds BGO 1995 1 cd Indspilninger publiceret 1963 (Cry baby) og 1965 (Warm and soulful) Indhold: BGO BGOCD268 78.794 4 soul rhythm & blues vokal 1960-1969 USA 11 Cry baby Nobody but you Until you were gone Anytime you want me So close For your precious love Baby don't you weep A ¤quiet place Cry to me Don't change your heart Wanting you The ¤truth hurts I'll take good care of you Looking for you It won't hurt (half as much) It was easier to hurt her Thinkin' Prove it to me More than a miracle As long as I have you One girl There goes my baby It's just a matter of time A ¤little bit of soap Look away I'll make it up to you 40 0 1 girl yaz-4.2.30/test/marc9.chr0000644000175000017500000000000711741237740012017 00000000000000marc-8 yaz-4.2.30/test/test_icu.0.xml0000644000175000017500000000031111733047144013001 00000000000000 yaz-4.2.30/test/test_icu.3.output0000644000175000017500000000006311733047144013550 000000000000001 1 'men' '' 2 1 'run' '' 3 2 'he' '' 4 2 'run' '' yaz-4.2.30/test/marc4.xml0000644000175000017500000000110211741237740012033 00000000000000 009140091a22a 22003370 yaz-4.2.30/test/tmarc2.xml.marc0000644000175000017500000000214111741237740013142 0000000000000001121nam0a32002171 450 001002800000004001000028008002800038009001100066039000900077100001900086245005900105260003300164300001000197512007300207531001400280538001900294652001500313666004900328795050600377795002000883000a9 182 502 3b710100fa000rcae000tsufa1995bgblengv0000asgxc000abef000aMimmshGarnet000aCry babyaWarm and soulfuleGarnet Mimms ... [et al.]000aBury St. EdmundsbBGOc1995000n1 cd000aIndspilninger publiceret 1963 (Cry baby) og 1965 (Warm and soulful)000aIndhold:000fBGOgBGOCD268000m78.794v4000msoulmrhythm & bluesnvokalp1960-1969lUSA000Ã¥11aCry babyaNobody but youaUntil you were goneaAnytime you want meaSo closeaFor your precious loveaBaby don't you weepaA ¤quiet placeaCry to meaDon't change your heartaWanting youaThe ¤truth hurtsaI'll take good care of youaLooking for youaIt won't hurt (half as much)aIt was easier to hurt heraThinkin'aProve it to meaMore than a miracleaAs long as I have youaOne girlaThere goes my babyaIt's just a matter of timeaA ¤little bit of soapaLook awayaI'll make it up to you000Ã¥40y0a1 girlyaz-4.2.30/test/tmarc9.xml.marc0000644000175000017500000000430411741237740013154 0000000000000002244cas a22005055a 4500001001300000003000400013005001700017008004100034010001700075012003100092035002100123906004500144040001800189041001300207042000700220043001200227050001500239066000700254245008700261246002600348246004900374260011100423300002500534310002700559362004400586490010100630500004700731500005800778546003600836650004700872650002600919650002700945650004100972710008801013710004201101850000801143880009001151880005601241880011501297880005201412880010501464880009101569880005001660936002801710 2005336282DLC20070911033614.0070910c20059999mr uu p f0 0ara  a 2005336282 a-3-7-0709110002-p-----  a(OCoLC)170490164 a7bundcserialsduencipf19gn-oclcserc aDLCcDLCdDLC0 aaraafre alc af-mr---00aIN PROCESS c(3006880-01aQadÌ£āʼ al-usrah :bmajallah mutakhasÌ£sÌ£isÌ£ah /cWizaÌ„rat al-Ê»Adl.13aJustice de la famille136880-02aMajallat QadÌ£āʼ al-usrahf<2006> 6880-03aal-RabaÌ„tÌ£ :bJamÊ»iÌ„yat Nashr al-MaÊ»luÌ„mah al-QaÌ„nuÌ„niÌ„yah wa-al-QadÌ£āʼiÌ„yah,c2005- av. :bill. ;c24 cm. aIrregular (semiannual)0 6880-04aal-Ê»Adad 1. (YuÌ„lyuÌ„z 2005)-0 6880-05aManshuÌ„raÌ„t JamÊ»iÌ„yat Nashr al-MaÊ»luÌ„mah al-QaÌ„nuÌ„niÌ„yah wa-al-QadÌ£āʼiÌ„yah aSome issues have also a distinctive title. aLatest issue consulted: al-Ê»Adad 3. (Dujanbir 2006). aChiefly in Arabic; some French. 0aDomestic relations (Islamic law)zMorocco. 0aDivorce (Islamic law) 0aMarriage lawzMorocco. 0aLaw reports, digests, etc.zMorocco.2 6880-06aJamÊ»iÌ„yat Nashr al-MaÊ»luÌ„mah al-QaÌ„nuÌ„niÌ„yah wa-al-QadÌ£āʼiÌ„yah.1 6880-07aMorocco.bWizaÌ„rat al-Ê»Adl. aDLC006245-01/(3/raقضاء الأسرة :bمجلة متخصصة /cوزارة العدل.136246-02/(3/raمجلة قضاء الأسرةf<2006> 6260-03/(3/raالرباط :bجمعية نشر المعلومة القانونية والقضائية،c2005-0 6362-04/(3/raالعدد 1. (يوليوز 2005)-0 6490-05/(3/raمنشورات جمعية نشر المعلومة القانونية والقضائية2 6710-06/(3/raجمعية نشر المعلومة القانونية والقضائية.1 6710-07/(3/raMorocco.bوزارة العدل. aLC Cairo Office [we 45]yaz-4.2.30/test/marc9.marc0000644000175000017500000000403311741237740012170 0000000000000002075cas 22005055a 4500001001300000003000400013005001700017008004100034010001700075012003100092035002100123906004500144040001800189041001300207042000700220043001200227050001500239066000700254245007900261246002600340246004600366260009800412300002500510310002700535362004100562490008800603500004700691500005700738546003600795650004700831650002600878650002700904650004100931710007700972710004001049850000801089880007801097880004801175880008601223880005301309880007001362880006301432880004601495936002801541 2005336282DLC20070911033614.0070910c20059999mr uu p f0 0ara  a 2005336282 a-3-7-0709110002-p-----  a(OCoLC)170490164 a7bundcserialsduencipf19gn-oclcserc aDLCcDLCdDLC0 aaraafre alc af-mr---00aIN PROCESS c(3006880-01aQaòdåa® al-usrah :bmajallah mutakhaòsòsiòsah /cWizåarat al-°Adl.13aJustice de la famille136880-02aMajallat Qaòdåa® al-usrahf<2006> 6880-03aal-Rabåaòt :bJam°åiyat Nashr al-Ma°låumah al-Qåanåunåiyah wa-al-Qaòdåa®åiyah,c2005- av. :bill. ;c24 cm. aIrregular (semiannual)0 6880-04aal-°Adad 1. (Yåulyåuz 2005)-0 6880-05aManshåuråat Jam°åiyat Nashr al-Ma°låumah al-Qåanåunåiyah wa-al-Qaòdåa®åiyah aSome issues have also a distinctive title. aLatest issue consulted: al-°Adad 3. (Dujanbir 2006). aChiefly in Arabic; some French. 0aDomestic relations (Islamic law)zMorocco. 0aDivorce (Islamic law) 0aMarriage lawzMorocco. 0aLaw reports, digests, etc.zMorocco.2 6880-06aJam°åiyat Nashr al-Ma°låumah al-Qåanåunåiyah wa-al-Qaòdåa®åiyah.1 6880-07aMorocco.bWizåarat al-°Adl. aDLC006245-01/(3/ra(3bVGA GdCSQI :(Bb(3eLdI eJNUUI /(Bc(3hRGQI GdYOd.(B136246-02/(3/ra(3eLdI bVGA GdCSQI(Bf<2006> 6260-03/(3/ra(3GdQHGW :(Bb(3LeYjI fTQ GdeYdheI GdbGfhfjI hGdbVGFjI,(Bc2005-0 6362-04/(3/ra(3GdYOO (B1. ((3jhdjhR (B2005)-0 6490-05/(3/ra(3efThQGJ LeYjI fTQ GdeYdheI GdbGfhfjI hGdbVGFjI(B2 6710-06/(3/ra(3LeYjI fTQ GdeYdheI GdbGfhfjI hGdbVGFjI.(B1 6710-07/(3/raMorocco.b(3hRGQI GdYOd.(B aLC Cairo Office [we 45]yaz-4.2.30/test/xml2marc8.xml.marc0000644000175000017500000000512311741237740013572 0000000000000002643nam^a2200469^^^4500001001400000005001700014006001900031007001500050008004100065035001500106037009000121040004500211100002300256245028100279246006300560246006300623260014400686300001100830500001300841500005700854500009300911500002501004500005701029510002401086530004201110533008901152655002901241650004301270700003601313700002801349793003101377852001501408852001401423856015401437856015401591852003001745852002801775856015401803856014901957830004702106901002002153UCD-00259230120061209034435.0m d cr bn |||a|bb|920330s1583 enk s 000 0 eng d a99851339eo aCL0036000039bProQuest Information and Learning. 300 N. Zeeb Rd., Ann Arbor, MI 48106 aCu-RivEScCu-RivESdCStRLINedcrbdWaOLN1 aClinton, Atkinson.00aClinton, Purser & Arnold, to their countreymen wheresoeuerh[electronic resource] :bWherein is described by their own hands their vnfeigned penitence for their offences past: their patience in welcoming their death, & their duetiful minds towardes her most excellent Maiestie2 aClinton, Purser & Arnold, to their countreymen wheresoever2 aClinton, Purser & Arnold, to their countreymen wheresoever aLondon :bImprinted by Iohn Wolfe and are to be sold [by W. Wright] at the middle shop in the Poultry, ioyning S. Mildreds Church,c[1583?] a[12] p aIn verse aThe first poem is signed: Thomas Walton alias Purser aClinton's full name and bookseller's name from, and publication date conjectured by, STC aSignatures: Aâ´ B² aReproduction of the original in the Bodleian Library4 aSTC (2nd ed.)c5431 aAlso issued in print and on microform aElectronic reproduction.nMode of access: World Wide Web.nRestricted to UC campuses 7aElectronic texts.2local 0aPirateszEnglandvEarly works to 1800.1 aWalton, Thomas,dfl. 1583.4aut1 aArnold,dfl. 1583.4aut0 aEarly English books online aMERbkmain aSCBbnnet40zRestricted to UC campusesxSCP UCSDuhttp://gateway.proquest.com/openurl?ctx_ver=Z39.88-2003&res_id=xri:eebo&rft_val_fmt=&rft_id=xri:eebo:image:1661040zRestricted to UC campusesxSCP UCSDuhttp://gateway.proquest.com/openurl?ctx_ver=Z39.88-2003&res_id=xri:eebo&rft_val_fmt=&rft_id=xri:eebo:image:16610 aDVXLbELECT-GENhInternet aLAGEbin3Online access40zRestricted to UC campusesxSCP UCSDuhttp://gateway.proquest.com/openurl?ctx_ver=Z39.88-2003&res_id=xri:eebo&rft_val_fmt=&rft_id=xri:eebo:image:1661040zRestricted to UC campusesuhttp://gateway.proquest.com/openurl?ctx_ver=Z39.88-2003&res_id=xri:eebo&rft_val_fmt=&rft_id=xri:eebo:image:16610xCDL 0aEarly English books, 1475-1640 ;v1406:13. aDVXLb002592301yaz-4.2.30/test/tmarc6.xml0000644000175000017500000000131511741237740012227 00000000000000 00366nam a22001698a 4500 11224466 DLC 00000000000000.0 910710c19910701nju 00010 eng 11224466 DLC DLC 123-xyz Jack Collins How to program a computer Penguin 8710 p. cm. yaz-4.2.30/test/xml2tmarc7.xml0000644000175000017500000001006211741237740013032 00000000000000 03114cam a2200349 i 4500 77123332 DLC20051218154744.0981008b2001 ilu 000 0 eng 577799049093202DLCDLC0undorignewuncip19y-gencatlg 77123332 Voyager Diacritic test -- New input 001 (SBIE).ny :ny,2001.100 p. ;12 cm.New copy imported from file (8/12/99).VOYAGER COLUMN 0 (NEW): Degree sign (°); Phono Copyright mark (℗); Copyright mark (©); Sharp (♯); Inverted Question mark (¿); Inverted Exclamation mark (¡).VOYAGER COLUMN 1: Script L (ℓ); Polish L (Ł); Scandanavian O (Ø); D with Crossbar (Đ); Icelandic Thorn (Þ); AE Digraph (Æ); OE Digraph (Œ); Miagkii Znak (ʹ); Dot at Midline (·).VOYAGER COLUMN 2: Musical Flat (♭); Patent Mark (®); Plus or Minus (±); O Hook (Ơ); U Hook (Ư); Alif (ʼ); alpha α; Ayn (ʻ); Polish l (ł).VOYAGER COLUMN 3: Scandanavian o (ø); d with crossbar (đ); Icelandic Thorn (þ); ae Digraph (æ); oe Digraph (œ); Tverdii Znak (ʺ); Turkish i (ı); British Pound (£); eth (ð).VOYAGER COLUMN 4: Dagger (DO NOT USE); o Hook (ơ); u Hook (ư); Beta β; Gamma γ; Superscript 0 (⁰); Superscript 1 (¹); Superscript 2 (²); Superscript 3 (³).VOYAGER COLUMN 5: Superscript 4 (⁴); Superscript 5 (⁵); Superscript 6 (⁶); Superscript 7 (⁷); Superscript 8 (⁸); Superscript 9 (⁹); Superscript + (⁺); Superscript - (⁻); Superscript ( (⁽).VOYAGER COLUMN 6: Superscript ) (⁾); Subscript 0 (₀); Subscript 1 (₁); Subscript 2 (₂); Subscript 3 (₃); Subscript 4 (₄); Subscript 5 (₅); Subscript 6 (₆); Subscript 7 (₇).VOYAGER COLUMN 7: Subscript 8 (₈); Subscript 9 (₉); Subscript + (₊); Subscript - (₋); Subscript ( (₍); Subscript ) (₎); Pseudo Question Mark (ỏ); Grave (ò); Acute (ó).VOYAGER COLUMN 8: Circumflex (ô); Tilde (õ); Macron (ō); Breve (ŏ); Superior Dot (ȯ); Umlaut (ö); Hacek (ǒ); Circle Above (o̊); Ligature left (o͡).VOYAGER COLUMN 9: Ligature right (o) ; High Comma off center (o̕); Double Acute (ő); Candrabindu (o̐); Cedilla (o̧); Right Hook (ǫ); Dot Below (ọ); Double Dot Below (o̤); Circle Below (o̥).VOYAGER COLUMN 10: Double Underscore (o̳); Underscore (o̲); Left Hook (o̦); Right Cedilla (o̜); Upadhmaniya (o̮); Double Tilde 1st half (o͠); Double Tilde 2nd half (o) ; High Comma centered (o̓).VOYAGER PC Keyboard: Spacing Circumflex (^); Spacing Underscore (_); Spacing Grave (`); Open Curly Bracket ({); Close Curly Bracket (}); Spacing Tilde (~).Standard PC Keyboard: 1234567890-= !@#$%^&*()_+ qwertyuiop[]\ QWERTYUIOP{}| asdfghjkl;' ASDFGHJKL:" zxcvbnm,./ ZXCVBNM<>? yaz-4.2.30/test/xml2tmarc6.xml.marc0000644000175000017500000000055611741237740013761 0000000000000000366nam a22001698a 4500001001300000003000400013005001700017008004100034010001700075040001300092050001200105100001700117245003000134260001200164263000900176300001100185 11224466 DLC00000000000000.0910710c19910701nju 00010 eng  a 11224466  aDLCcDLC00a123-xyz10aJack Collins10aHow to program a computer1 aPenguin a8710 ap. cm.yaz-4.2.30/test/xml2marc2.xml0000644000175000017500000000734011741237740012646 00000000000000 01116nam0a32002171 450 9 182 502 3710100acesf1995gbeng0sxcbefMimmsGarnetCry babyWarm and soulfulGarnet Mimms ... [et al.]Bury St. EdmundsBGO19951 cdIndspilninger publiceret 1963 (Cry baby) og 1965 (Warm and soulful)Indhold:BGOBGOCD26878.7944soulrhythm & bluesvokal1960-1969USA11Cry babyNobody but youUntil you were goneAnytime you want meSo closeFor your precious loveBaby don't you weepA ¤quiet placeCry to meDon't change your heartWanting youThe ¤truth hurtsI'll take good care of youLooking for youIt won't hurt (half as much)It was easier to hurt herThinkin'Prove it to meMore than a miracleAs long as I have youOne girlThere goes my babyIt's just a matter of timeA ¤little bit of soapLook awayI'll make it up to you4001 girl yaz-4.2.30/test/marccol3.u8.marc0000644000175000017500000000244111654451754013222 0000000000000001313cam a2200349ua 450000100090000000300040000900500170001300800410003003500170007101000170008803500260010504000310013105000230016206600070018508200140019210000280020624500850023425000220031926001060034130000290044744000420047665000330051870000280055188000280057988000920060788000230069988001020072288000480082488000280087290600450090098500180094582129893DLC20070808062021.0841102s1980 cc a 000 0 chi  a(DLC)5011703 a 82129893  a(CStRLIN)DCLP84-B3561 aDLC-RcDLC-RdCStRLINdDLC00aTL546.7b.S48 1980 c$100a629.42191 6880-01aShen, Guoliang.106880-02aYu zhou hang xing he shu li hua /cShen Guoliang wen ; Chen Genxiang tu. 6880-03aDi 1 ban. 6880-04a[Canton] :bGuangdong ren min chu ban she :bGuangdong sheng xin hua shu dian fa xing,c1980. a199 p. :bill. ;c19 cm. 06880-05aKe xue zhi shi pu ji cong shu 0aAstronauticsxPopular works.1 6880-06aChen, Genxiang.1 6100-01/1a沈 国良.106245-02/1a宇宙 航行 和 数ç†åŒ– /c沈 国良 文 ; 陈 根祥 图. 6250-03/1a第1版. 6260-04/1a[Canton] :b广东 人民 出版社 :b广东çœã€€æ–°è¯ã€€æ›¸åº— å‘行,c1980. 06440-05/1a科学 知识 普åŠã€€ä¸›ä¹¦1 6700-06/1a陈 根祥. a0bcbccorignewduencipf19gy-rlinjack aspacingreloadyaz-4.2.30/test/marc1.marc0000644000175000017500000000173411741237740012165 0000000000000000988nam0 32003011 45 001002800000004001000028008002800038009001100066021002700077032001500104100002100119245005400140250004100194260004000235300002700275504012300302512006000425520005000485652002400535652001600559666001600575666001900591666001500610666001800625666001900643666000900662666001500671000a9 181 423 4b710100fa000rnae000tmuua2002buslengv0000aagxx000a1-4000-4596-7d$14,00000&DBC2004390000aSlomanhLarry000aOn the road with Bob DylaneLarry "Ratso" Sloman000aRevised editionbThree Rivers Press000aNew YorkbThree Rivers Pressc2002000axv, 464 sider, tavler000aLarry "Ratso" Slomans meget personlige beretning om Bob Dylans koncertturne i USA i 1975: "The Rolling Thunder revue"000aPå omslaget: With a new introduction by Kinky Friedman000aTidligere: 1. udgave. New York, Bantam, 19780000m99.4aDylanhBob000p78.9064v5000ffolkemusik000ffolkemusikere000frockmusik000frockmusikere000frockkoncerter000eUSA000i1970-1979yaz-4.2.30/test/marc8.xml0000644000175000017500000001457011741237740012054 00000000000000 02647nam^a2200469^^^4500 UCD-002592301 20061209034435.0 m d cr bn |||a|bb| 920330s1583 enk s 000 0 eng d 99851339eo CL0036000039 ProQuest Information and Learning. 300 N. Zeeb Rd., Ann Arbor, MI 48106 Cu-RivES Cu-RivES CStRLIN dcrb WaOLN Clinton, Atkinson. Clinton, Purser & Arnold, to their countreymen wheresoeuer [electronic resource] : Wherein is described by their own hands their vnfeigned penitence for their offences past: their patience in welcoming their death, & their duetiful minds towardes her most excellent Maiestie Clinton, Purser & Arnold, to their countreymen wheresoever Clinton, Purser & Arnold, to their countreymen wheresoever London : Imprinted by Iohn Wolfe and are to be sold [by W. Wright] at the middle shop in the Poultry, ioyning S. Mildreds Church, [1583?] [12] p In verse The first poem is signed: Thomas Walton alias Purser Clinton's full name and bookseller's name from, and publication date conjectured by, STC Signatures: Aâ´ B² Reproduction of the original in the Bodleian Library STC (2nd ed.) 5431 Also issued in print and on microform Electronic reproduction. Mode of access: World Wide Web. Restricted to UC campuses Electronic texts. local Pirates England Early works to 1800. Walton, Thomas, fl. 1583. aut Arnold, fl. 1583. aut Early English books online MER kmain SCB nnet Restricted to UC campuses SCP UCSD http://gateway.proquest.com/openurl?ctx_ver=Z39.88-2003&res_id=xri:eebo&rft_val_fmt=&rft_id=xri:eebo:image:16610 Restricted to UC campuses SCP UCSD http://gateway.proquest.com/openurl?ctx_ver=Z39.88-2003&res_id=xri:eebo&rft_val_fmt=&rft_id=xri:eebo:image:16610 DVXL ELECT-GEN Internet LAGE in Online access Restricted to UC campuses SCP UCSD http://gateway.proquest.com/openurl?ctx_ver=Z39.88-2003&res_id=xri:eebo&rft_val_fmt=&rft_id=xri:eebo:image:16610 Restricted to UC campuses http://gateway.proquest.com/openurl?ctx_ver=Z39.88-2003&res_id=xri:eebo&rft_val_fmt=&rft_id=xri:eebo:image:16610 CDL Early English books, 1475-1640 ; 1406:13. DVXL 002592301 yaz-4.2.30/test/test_record_conv.c0000644000175000017500000002763311733047144014030 00000000000000/* This file is part of the YAZ toolkit. * Copyright (C) 1995-2012 Index Data * See the file LICENSE for details. */ #if HAVE_CONFIG_H #include #endif #include #include #include #include #include #if YAZ_HAVE_XML2 #include #include yaz_record_conv_t conv_configure(const char *xmlstring, WRBUF w) { xmlDocPtr doc = xmlParseMemory(xmlstring, strlen(xmlstring)); if (!doc) { wrbuf_printf(w, "xmlParseMemory"); return 0; } else { xmlNodePtr ptr = xmlDocGetRootElement(doc); yaz_record_conv_t p = yaz_record_conv_create(); if (p) { const char *srcdir = getenv("srcdir"); if (srcdir) yaz_record_conv_set_path(p, srcdir); } if (!ptr) { wrbuf_printf(w, "xmlDocGetRootElement"); yaz_record_conv_destroy(p); p = 0; } else if (!p) { wrbuf_printf(w, "yaz_record_conv_create"); } else { int r = yaz_record_conv_configure(p, ptr); if (r) { wrbuf_puts(w, yaz_record_conv_get_error(p)); yaz_record_conv_destroy(p); p = 0; } } xmlFreeDoc(doc); return p; } } int conv_configure_test(const char *xmlstring, const char *expect_error, yaz_record_conv_t *pt) { WRBUF w = wrbuf_alloc(); int ret; yaz_record_conv_t p = conv_configure(xmlstring, w); if (!p) { if (expect_error && !strcmp(wrbuf_cstr(w), expect_error)) ret = 1; else { ret = 0; printf("%s\n", wrbuf_cstr(w)); } } else { if (expect_error) ret = 0; else ret = 1; } if (pt) *pt = p; else if (p) yaz_record_conv_destroy(p); wrbuf_destroy(w); return ret; } static void tst_configure(void) { YAZ_CHECK(conv_configure_test("" "", "Element : expected or " " element, got ", 0)); #if YAZ_HAVE_XSLT YAZ_CHECK(conv_configure_test("" "" "" "", "Element : attribute 'inputformat' " "required", 0)); YAZ_CHECK(conv_configure_test("" "" "", "Element : attribute 'stylesheet' " "expected", 0)); YAZ_CHECK(conv_configure_test("" "" "" "", 0, 0)); #else YAZ_CHECK(conv_configure_test("" "" "", "xslt unsupported." " YAZ compiled without XSLT support", 0)); #endif } static int conv_convert_test(yaz_record_conv_t p, const char *input_record, const char *output_expect_record) { int ret = 0; if (!p) { YAZ_CHECK(ret); } else { WRBUF output_record = wrbuf_alloc(); int r = yaz_record_conv_record(p, input_record, strlen(input_record), output_record); if (r) { if (output_expect_record) { printf("yaz_record_conv error=%s\n", yaz_record_conv_get_error(p)); ret = 0; } else ret = 1; } else { if (!output_expect_record) { ret = 0; } else if (strcmp(output_expect_record, wrbuf_cstr(output_record))) { ret = 0; printf("got-output_record len=%ld: %s\n", (long) wrbuf_len(output_record), wrbuf_cstr(output_record)); printf("output_expect_record len=%ld %s\n", (long) strlen(output_expect_record), output_expect_record); } else { ret = 1; } } wrbuf_destroy(output_record); } return ret; } static int conv_convert_test_iter(yaz_record_conv_t p, const char *input_record, const char *output_expect_record, int num_iter) { int i; int ret; for (i = 0; i < num_iter; i++) { ret = conv_convert_test(p, input_record, output_expect_record); if (!ret) break; } return ret; } static void tst_convert1(void) { yaz_record_conv_t p = 0; const char *marcxml_rec = "\n" " 00080nam a22000498a 4500\n" " 11224466 \n" " \n" " 11224466 \n" " \n" "\n"; const char *tmarcxml_rec = "\n" " 00080nam a22000498a 4500\n" " 11224466 \n" " \n" " 11224466 \n" " \n" "\n"; const char *iso2709_rec = "\x30\x30\x30\x38\x30\x6E\x61\x6D\x20\x61\x32\x32\x30\x30\x30\x34" "\x39\x38\x61\x20\x34\x35\x30\x30\x30\x30\x31\x30\x30\x31\x33\x30" "\x30\x30\x30\x30\x30\x31\x30\x30\x30\x31\x37\x30\x30\x30\x31\x33" "\x1E\x20\x20\x20\x31\x31\x32\x32\x34\x34\x36\x36\x20\x1E\x20\x20" "\x1F\x61\x20\x20\x20\x31\x31\x32\x32\x34\x34\x36\x36\x20\x1E\x1D"; YAZ_CHECK(conv_configure_test("" "" "", 0, &p)); YAZ_CHECK(conv_convert_test(p, marcxml_rec, iso2709_rec)); YAZ_CHECK(conv_convert_test(p, tmarcxml_rec, iso2709_rec)); yaz_record_conv_destroy(p); YAZ_CHECK(conv_configure_test("" "" "", 0, &p)); YAZ_CHECK(conv_convert_test(p, iso2709_rec, marcxml_rec)); yaz_record_conv_destroy(p); YAZ_CHECK(conv_configure_test("" "" "" "" "" "", 0, &p)); YAZ_CHECK(conv_convert_test(p, marcxml_rec, marcxml_rec)); yaz_record_conv_destroy(p); YAZ_CHECK(conv_configure_test("" "" "" "" "" "", 0, &p)); YAZ_CHECK(conv_convert_test(p, marcxml_rec, marcxml_rec)); yaz_record_conv_destroy(p); } static void tst_convert2(void) { yaz_record_conv_t p = 0; const char *marcxml_rec = "\n" " 00080nam a22000498a 4500\n" " 11224466 \n" " \n" " københavn\n" " \n" "\n"; const char *iso2709_rec = "\x30\x30\x30\x37\x37\x6E\x61\x6D\x20\x61\x32\x32\x30\x30\x30\x34" "\x39\x38\x61\x20\x34\x35\x30\x30\x30\x30\x31\x30\x30\x31\x33\x30" "\x30\x30\x30\x30\x30\x31\x30\x30\x30\x31\x34\x30\x30\x30\x31\x33" "\x1E\x20\x20\x20\x31\x31\x32\x32\x34\x34\x36\x36\x20\x1E\x20\x20" "\x1F\x61\x6b\xb2\x62\x65\x6e\x68\x61\x76\x6e\x1E\x1D"; YAZ_CHECK(conv_configure_test("" "" "", 0, &p)); YAZ_CHECK(conv_convert_test_iter(p, marcxml_rec, iso2709_rec, 100)); yaz_record_conv_destroy(p); } #endif int main(int argc, char **argv) { YAZ_CHECK_INIT(argc, argv); yaz_log_xml_errors(0, 0 /* disable log */); #if YAZ_HAVE_XML2 tst_configure(); #endif #if YAZ_HAVE_XSLT tst_convert1(); tst_convert2(); #endif YAZ_CHECK_TERM; } /* * Local variables: * c-basic-offset: 4 * c-file-style: "Stroustrup" * indent-tabs-mode: nil * End: * vim: shiftwidth=4 tabstop=8 expandtab */ yaz-4.2.30/test/xml2tmarc9.xml.marc0000644000175000017500000000430411741237740013757 0000000000000002244cas a22005055a 4500001001300000003000400013005001700017008004100034010001700075012003100092035002100123906004500144040001800189041001300207042000700220043001200227050001500239066000700254245008700261246002600348246004900374260011100423300002500534310002700559362004400586490010100630500004700731500005800778546003600836650004700872650002600919650002700945650004100972710008801013710004201101850000801143880009001151880005601241880011501297880005201412880010501464880009101569880005001660936002801710 2005336282DLC20070911033614.0070910c20059999mr uu p f0 0ara  a 2005336282 a-3-7-0709110002-p-----  a(OCoLC)170490164 a7bundcserialsduencipf19gn-oclcserc aDLCcDLCdDLC0 aaraafre alc af-mr---00aIN PROCESS c(3006880-01aQadÌ£āʼ al-usrah :bmajallah mutakhasÌ£sÌ£isÌ£ah /cWizaÌ„rat al-Ê»Adl.13aJustice de la famille136880-02aMajallat QadÌ£āʼ al-usrahf<2006> 6880-03aal-RabaÌ„tÌ£ :bJamÊ»iÌ„yat Nashr al-MaÊ»luÌ„mah al-QaÌ„nuÌ„niÌ„yah wa-al-QadÌ£āʼiÌ„yah,c2005- av. :bill. ;c24 cm. aIrregular (semiannual)0 6880-04aal-Ê»Adad 1. (YuÌ„lyuÌ„z 2005)-0 6880-05aManshuÌ„raÌ„t JamÊ»iÌ„yat Nashr al-MaÊ»luÌ„mah al-QaÌ„nuÌ„niÌ„yah wa-al-QadÌ£āʼiÌ„yah aSome issues have also a distinctive title. aLatest issue consulted: al-Ê»Adad 3. (Dujanbir 2006). aChiefly in Arabic; some French. 0aDomestic relations (Islamic law)zMorocco. 0aDivorce (Islamic law) 0aMarriage lawzMorocco. 0aLaw reports, digests, etc.zMorocco.2 6880-06aJamÊ»iÌ„yat Nashr al-MaÊ»luÌ„mah al-QaÌ„nuÌ„niÌ„yah wa-al-QadÌ£āʼiÌ„yah.1 6880-07aMorocco.bWizaÌ„rat al-Ê»Adl. aDLC006245-01/(3/raقضاء الأسرة :bمجلة متخصصة /cوزارة العدل.136246-02/(3/raمجلة قضاء الأسرةf<2006> 6260-03/(3/raالرباط :bجمعية نشر المعلومة القانونية والقضائية،c2005-0 6362-04/(3/raالعدد 1. (يوليوز 2005)-0 6490-05/(3/raمنشورات جمعية نشر المعلومة القانونية والقضائية2 6710-06/(3/raجمعية نشر المعلومة القانونية والقضائية.1 6710-07/(3/raMorocco.bوزارة العدل. aLC Cairo Office [we 45]yaz-4.2.30/test/marccol5.u8.marc0000644000175000017500000005140311654451754013226 0000000000000001385cam a2200301Ka 4500001001300000003000600013005001700019008004100036040003000077020001500107020001800122035002000140041001100160092001400171090002200185049000900207245017900216260007900395300002200474500008300496546002500579650004500604650004500649700002300694880022100717880013300938994001201071ocm57665435 OCoLC20080328102918.0050215s2004 ii d 000 0 eng d aACNcACNdOCLCQdIXAdOCL a8176500623 a9788176500623 a(OCoLC)576654350 abeneng a491.44321 aPK1687b.E65 2004 aLNNA006880-01aEnglish-Bengali Bengali-English combined dictionary =bImÌ£raÌ„jiÌ„ - BaÌ„mÌ£laÌ„ BaÌ„mÌ£laÌ„ - ImÌ£raÌ„jiÌ„ samshukuta diksaÌnariÌ„ /ccompiled by Debasis Adhikary. aNew Delhi :bWorld of Learning :bDistributed by Star Publications,c2004. a1518 p. ;c23 cm. a"More than 90,000 total words from English to Bengali and Bengali to English." aBengali and English. 0aEnglish languagevDictionariesxBengali. 0aBengali languagevDictionariesxEnglish.1 aAdhikary, Debasis.006245-01aEnglish-Bengali Bengali-English combined dictionary =bইংরাজী - বাংলা বাংলা - ইংরাজী সংযà§à¦•à§à¦¤ ডিকà§à¦¶à¦¨à¦°à§€ /ccompiled by Debasis Adhikary.316246-00aইংরাজী - বাংলা বাংলা - ইংরাজী সংযà§à¦•à§à¦¤ ডিকà§à¦¶à¦¨à¦°à§€ aC0bLNN02873nam a22005053i 4500001001300000003000600013005001700019008004100036040001300077035002000090041001300110050001600123049000900139100002400148240002500172245020900197246010100406250003100507260016100538300001100699440006000710546003500770500006200805500003300867504004100900650003200941650004900973700005201022700004801074700004401122740003901166740003501205880003201240880004601272880033401318880003801652880026101690880009601951880007302047880007102120880006102191880005302252880005002305994001202355ocm86174229 OCoLC20080328102918.0070326s1977 ii b 000 0 san d aSTFcSTF a(OCoLC)861742290 asanahin04aPK511b1977 aLNNA0 6880-01aPaÌ„nÌ£ini.10aAsÌ£tÌ£aÌ„dhyaÌ„yiÌ„106880-02aAsÌ£tÌ£aÌ„dhyaÌ„yiÌ„suÌ„trapaÌ„tÌ£hahÌ£ :bPaÌ„nÌ£iniÌ„yasÌiksÌ£aÌ„-liṅgaÌ„nusÌaÌ„sanasahitasÌca /cMaharsÌ£ipaÌ„nÌ£inipranÌ£iÌ„tahÌ£ ; upoddhaÌ„talekhakahÌ£ SÌriÌ„naÌ„raÌ„yanÌ£a MisÌrahÌ£.15aAsÌ£tÌ£aÌ„dhyaÌ„yiÌ„suÌ„trapaÌ„tÌ£ha :bwith PaÌ„nÌ£iniÌ„yasÌiksÌ£aÌ„ and LiṅgaÌ„nusÌaÌ„sana 6880-03a1. samÌ£skaranÌ£a. 6880-04aVaÌ„raÌ„nÌ£asiÌ„ ;aDilliÌ„ :bCaukhambhaÌ„ OriyantÌ£aÌ„liyaÌ„ ;aVaÌ„raÌ„nÌ£asiÌ„ :banya praÌ„ptisthaÌ„na, CaukhambhaÌ„ VisÌvabhaÌ„ratiÌ„,c1977. a100 p. 06880-05aGokuladaÌ„sa SamÌ£skrÌ¥ta granthamaÌ„laÌ„ ;v29 aIn Sanskrit; introd. in Hindi. a"SampaÌ„dakahÌ£ SÌriÌ„naÌ„raÌ„yanÌ£a MisÌrahÌ£"--Cover. aAdded title page in English. aIncludes bibliographical references. 0aSanskrit languagexGrammar. 0aSanskrit languagexAccents and accentuation.026880-06aPaÌ„nÌ£ini.tPaÌ„nÌ£iniÌ„yasÌiksÌ£aÌ„.026880-07aPaÌ„nÌ£ini.tLiṅgaÌ„nusÌaÌ„sana.1 6880-08aMisÌra, SÌriÌ„naÌ„raÌ„yanÌ£a.026880-09aPaÌ„nÌ£iniÌ„yasÌiksÌ£aÌ„.026880-10aLiṅgaÌ„nusÌaÌ„sana.0 6100-01aपाणिनी.106240-00aअषà¥à¤Ÿà¤¾à¤§à¥à¤¯à¤¾à¤¯à¥€106245-02aअषà¥à¤Ÿà¤¾à¤§à¥à¤¯à¤¾à¤¯à¥€à¤¸à¥‚तà¥à¤°à¤ªà¤¾à¤ à¤ƒ :bपाणिणीयशिकà¥à¤·à¤¾-लिङà¥à¤—ानà¥à¤¶à¤¾à¤¸à¤¨à¤¸à¤¹à¤¿à¤¤à¤¶à¥à¤°à¥à¤š /cमहरà¥à¤·à¤¿à¤ªà¤¾à¤£à¤¿à¤¨à¤¿à¤ªà¥à¤°à¤£à¥€à¤¤à¤ƒ ; उपोदà¥à¤˜à¤¾à¤¤à¤²à¥‡à¤–कः शà¥à¤°à¥€à¤¨à¤¾à¤°à¤¾à¤¯à¤£ मिशà¥à¤°à¤ƒ. 6250-03a1. संसà¥à¤•रण. 6260-04aवाराणसी ;aदिलà¥à¤²à¥€ :bचौखमà¥à¤­à¤¾ ओरियनà¥à¤Ÿà¤¾à¤²à¤¿à¤¯à¤¾ ;aवाराणसी :bअनà¥à¤¯ पà¥à¤°à¤¾à¤ªà¥à¤¤à¤¿à¤¸à¥à¤¥à¤¾à¤¨, चौखमà¥à¤­à¤¾ विशà¥à¤µà¤­à¤¾à¤°à¤¤à¥€,c1977. 06440-05aगोकà¥à¤²à¤¦à¤¾à¤¸ संसà¥à¤•ृत गà¥à¤°à¤¨à¥à¤¥à¤®à¤¾à¤²à¤¾ ;v29026700-06aपाणिनी.tपाणिणीयशिकà¥à¤·à¤¾026700-07aपाणिनी.tलिङà¥à¤—ानà¥à¤¶à¤¾à¤¸à¤¨.1 6700-08aमिशà¥à¤°, शà¥à¤°à¥€à¤¨à¤¾à¤°à¤¾à¤¯à¤£.026740-09aपाणिणीयशिकà¥à¤·à¤¾.026740-10aलिङà¥à¤—ानà¥à¤¶à¤¾à¤¸à¤¨. aC0bLNN02242cam a2200433Ia 4500001001300000003000600013005001700019008004100036040003000077020002500107020001800132035002000150041001600170050002000186082001900206049000900225100002200234240004300256245013700299250001200436260007200448300004200520500004200562500007700604500007700681546003100758500002900789600002200818650004900840650004100889740004400930740002800974880006501002880017001067880031601237880013301553880011001686994001201796ocm44944167 OCoLC20080328102918.0000906s2000 ilua 000 0 tam d aOCOcOCOdOCLdOCLCQdTEF a0967621208 :c$24.95 a9780967621203 a(OCoLC)449441671 atamenghtam 4aPL4758.9.T5bT504a894.811bT597t aLNNA0 aTiruvalÌ£lÌ£uvar.106880-01aThirukku ral.lTamil & English106880-02aThirukkural :bThamizh Marai = Tirukkural : the Holy Scripture /c[by Tiruvalluvar ; English translation by P.S. Sundaram.]. a1st ed. aWoodridge, Ill. :bInternational Tamil Language Foundation,cc2000. a1813 p. :bill. (some col.) ;c20 cm. aTamil text, with English translation. a"An edition of this translation was published by Penguin Books in 1991." aSection 2 and section 3, English translation from Tamil by R. Natarajan. aText in Tamil and English. aNon-Latin script record.00aTiruvalÌ£lÌ£uvar. 0aTamil literaturevTranslations into English. 0aTamil language materialsxBilingual.02aHandbook of Tamil culture and heritage.02aTamils guide to future.106240-01aதிரூகà¯à®•௠றளà¯.lTamil & English106245-02aதிரூகà¯à®•à¯à®±à®³à¯ :bதமிழ௠மறை = Tirukkural : the Holy Scripture /c[by Tiruvalluvar ; English translation by P.S. Sundaram.]0 6505-00aSection 1: திரூகà¯à®•à¯à®±à®³à¯ : Tirukkural -- Section 2: தறிழà¯à®ªà¯ பணà¯à®ªà®¾à®Ÿà¯à®Ÿà¯‚க௠கையேடூ : The handbook of Tamil culture and heritage -- Section 3: தமிழின எதிரà¯à®•ால வழிகாடà¯à®Ÿà®¿ : Tamils guide to future.026740-00aதமிழà¯à®ªà¯ பணà¯à®ªà®¾à®Ÿà¯à®Ÿà¯‚க௠கையேடூ : The handbook of Tamil culture and heritage.026740-00aதமிழின எதிரà¯à®•ால வழிகாடà¯à®Ÿà®¿ : Tamils guide to future. aC0bLNN01025cam a2200301Ia 4500001001300000003000600013005001700019008004100036040002300077020001500100020001800115035002000133090002600153049000900179100002600188245005000214250003300264260006200297300002100359500001100380546001300391655002900404880003800433880008400471880005500555880010100610994001200711ocm62425106 OCoLC20080328102918.0051203s2002 th 000 f thaod aTEFcTEFdLNQdOCL a9749204808 a9789749204801 a(OCoLC)62425106 aPL4209.D837bP57 2002 aLNNA0 6880-01aDuÌ„angtawan.106880-02aPhracÌŒhan sǣnkon /cDuÌ„angtawan. 6880-03aPhim khrang thiÌ„ 3. 6880-04aKrung TheÌ„p :bPhimkham Samnakphim,c2545 [2002] a154 p. ;c21 cm. aNovel. aIn Thai. 7aHumorous fiction.2gsafd0 6100-01aดวงตะวัน.106245-02aพระจันทร์à¹à¸ªà¸™à¸à¸¥ /cดวงตะวัน. 6250-03aพิมพ์ครั้งที่ 3. 6260-04aà¸à¸£à¸¸à¸‡à¹€à¸—พฯ :bพิมพ์คำ สานัà¸à¸žà¸´à¸¡à¸žà¹Œ,c2545. aC0bLNN02684cam a2200409 a 45000010009000000050017000090080041000260350018000679060045000850100017001300400029001470430021001760500021001971000056002182450184002742600039004583000029004974400063005265000203005895040053007926000056008456100047009016500023009486510042009716510038010137000058010518520042011098800079011518800288012308800055015188800094015738800320016678800079019878800101020668800091021679850016022581487678220071121181842.0990326s1997 ai a b 001 0 armo  a(Uk)006855813 apbcbccundeterduencipf20gy-nonroman a 99189840  aDLCbengcDLCdDLC-RdUk aa-ai---aa-tu---00aBX121b.S63 19971 6880-01aSmbatyantsÊ¿, Artak,cEpiskopos,d1876-1937106880-02aArtak Episkopos SmbatyantsÊ¿ (TaushetsÊ¿i) : hogevor, grakan, patma-banasirakan gortsuneutÊ¿yuneÌŒ ev gndakaharutÊ¿yuneÌŒ, 1876-1937 tÊ¿tÊ¿. /ckazmetsÊ¿ Sandro Behbudyan. 6880-03aErevan :b"Anahit",c1997. a691 p. :bill. ;c27 cm. 06880-04aVaveragrer Hay EkeghetsÊ¿u patmutÊ¿yan ;vgirkÊ¿ 3 6880-05aAt head of title: Hayastani HanrapetutÊ¿yan KarÌ£avarutÊ¿yann arÌ£eÌŒntÊ¿er. Arkhivayin Gortsi VarchÊ¿utÊ¿yun. Arvesti, GrakanutÊ¿yan ev Mamuli PÊ¿astatÊ¿ghtÊ¿eri Petakan Kentronakan Arkhiv. aIncludes bibliographical references and indexes.106880-06aSmbatyantsÊ¿, Artak,cEpiskopos,d1876-1937206880-07aArmenian ChurchxHistoryvSources. 0aArmenianszTurkey. 0aArmeniaxHistoryy1801-1900vSources. 0aArmeniaxHistoryy1901-vSources.1 6880-08aBehbudyan, Sandroq(Sandro Artashesi),d1934-41aBritish LibrarybOCjHEC.1994.a.294/31 6100-01 /aÕÕ´Õ¢Õ¡Õ¿ÕµÕ¡Õ¶Ö, Ô±Ö€Õ¿Õ¡Õ¯,cÔµÕ¢Õ«Õ½Õ¯Õ¸ÕºÕ¸Õ½,d1876-1937.106245-02 /aÔ±Ö€Õ¿Õ¡Õ¯ ÔµÕ¢Õ«Õ½Õ¯Õ¸ÕºÕ¸Õ½ ÕÕ´Õ¢Õ¡Õ¿ÕµÕ¡Õ¶Ö (ÕÕ¡Õ¸Ö‚Õ·Õ¥ÖÕ«) : Õ°Õ¸Õ£Õ¥Õ¾Õ¸Ö€, Õ£Ö€Õ¡Õ¯Õ¡Õ¶ ÕºÕ¡Õ¿Õ´Õ¡-Õ¢Õ¡Õ¶Õ¡Õ½Õ«Ö€Õ¡Õ¯Õ¡Õ¶ Õ£Õ¸Ö€Õ®Õ¸Ö‚Õ¶Õ¥Õ¸Ö‚Õ©ÕµÕ¸Ö‚Õ¶Õ¨ Õ¥Õ¾ Õ£Õ¶Õ¤Õ¡Õ¯Õ¡Õ°Õ¡Ö€Õ¸Ö‚Õ©ÕµÕ¸Ö‚Õ¶Õ¨, 1876-1937 Õ©Õ©. /cÕ¯Õ¡Õ¦Õ´Õ¥Ö ÕÕ¡Õ¶Õ¤Ö€Õ¸ Ô²Õ¥Õ°Õ¢Õ¸Ö‚Õ©ÕµÕ¡Õ¶. 6260-03 /aÔµÖ€Õ¥Õ¾Õ¡Õ¶ :b«Անահիտ»,c1997. 06440-04 /aÕŽÕ¡Õ¾Õ¥Ö€Õ¡Õ£Ö€Õ¥Ö€ Õ€Õ¡Õµ ÔµÕ¯Õ¥Õ²Õ¥ÖÕ¸Ö‚ ÕºÕ¡Õ¿Õ´Õ¸Ö‚Õ©ÕµÕ¡Õ¶ ;vÕ£Õ«Ö€Ö„ 3 6500-05 /aÕÕ«Õ¿Õ²Õ¸Õ½Õ« Õ£Õ¬Õ¸Ö‚Õ­: Õ€Õ¡ÕµÕ¡Õ½Õ¿Õ¡Õ¶Õ« Õ€Õ¡Õ¶Ö€Õ¡ÕºÕ¥Õ¿Õ¸Ö‚Õ©ÕµÕ¡Õ¶ Ô¿Õ¡Õ¼Õ¡Õ¾Õ¡Ö€Õ¸Ö‚Õ©ÕµÕ¡Õ¶ Õ¡Õ¼Õ¨Õ¶Õ©Õ¥Ö€. Ô±Ö€Õ­Õ«Õ¾Õ¡ÕµÕ«Õ¶ Ô³Õ¸Ö€Õ®Õ« ÕŽÕ¡Ö€Õ¹Õ¸Ö‚Õ©ÕµÕ¸Ö‚Õ¶. Ô±Ö€Õ¾Õ¥Õ½Õ¿Õ«, Ô³Ö€Õ¡Õ¯Õ¡Õ¶Õ¸Ö‚Õ©ÕµÕ¡Õ¶ Õ¥Õ¾ Õ„Õ¡Õ´Õ¸Ö‚Õ¬Õ« Ô²Õ¡Õ½Õ¿Õ¡Õ©Õ²Õ©Õ¥Ö€Õ« ÕŠÕ¥Õ¿Õ¡Õ¯Õ¡Õ¶ Ô¿Õ¥Õ¶Õ¿Ö€Õ¸Õ¶Õ¡Õ¯Õ¡Õ¶ Ô±Ö€Õ­Õ«Õ¾.106600-06 /aÕÕ´Õ¢Õ¡Õ¿ÕµÕ¡Õ¶Ö, Ô±Ö€Õ¿Õ¡Õ¯,cÔµÕ¢Õ«Õ½Õ¯Õ¸ÕºÕ¸Õ½,d1876-1937.206610-07 /aÕ€Õ¡ÕµÕ¡Õ½Õ¿Õ¡Õ¶Õ¥Õ¡ÕµÖ Õ. ÔµÕ¯Õ¥Õ²Õ¥ÖÕ«xÕŠÕ¡Õ¿Õ´Õ¸Ö‚Õ©Õ«Ö‚Õ¶vÔ±Õ²Õ¢Õ«Ö‚Ö€Õ¶Õ¥Ö€.1 6700-08 /aÔ²Õ¥Õ°Õ¢Õ¸Ö‚Õ©ÕµÕ¡Õ¶, ÕÕ¡Õ¶Õ¤Ö€Õ¸,q(ÕÕ¡Õ¶Õ¤Ö€Õ¸ Ô±Ö€Õ¿Õ¡Õ·Õ¥Õ½Õ«),d1934- aarmenian LC01466 am a2200349 a 45000010009000000050017000090080041000260350018000679060045000850100017001300350023001470400029001700430012001990500020002112450037002312600088002683000035003565050031003916100051004226500038004736500031005116500034005426500047005766500049006237100051006728520040007238800054007638800131008178800076009488800076010249850016011001487678320071121181846.0040502m19461951sy ac 000 0 arm  a(Uk)006881105 apbcbccundeterduencipf20gy-nonroman a 2003207810 a(OCoLC)ocm51506679 aDLCbengcDLCdOCoLCdUk aa-sy---00aBV4539.A75bM36006880-01aMananay :btaregrkÊ¿oyk. 6880-02aHaleÌ„p :bHratarakutÊ¿iwn Hogewor EghbarutÊ¿ean EritasardatsÊ¿,c1946-1951 a2 v. :bill., ports. ;c23 cm.0 a[1]. 1946, 5-6. 1950-1951.206880-03aHogewor EghbayrutÊ¿iwn EritasardatsÊ¿. 0aArmeniansxReligious lifezSyria. 0aAlmanacs, ArmenianzSyria. 0aYouthxReligious lifezSyria. 0aArmenianszSyriaxSocial life and customs. 0aArmenianszLebanonxSocial life and customs.2 6880-04aHogewor EghbayrutÊ¿iwn EritasardatsÊ¿.41aBritish LibrarybOCjHEC.2002.a.492006245-01 /aÕ„Õ¡Õ¶Õ¡Õ¶Õ¡Õµ :bÕ¿Õ¡Ö€Õ¥Õ£Ö€Ö„Õ¸ÕµÕ¯. 6260-02 /aÕ€Õ¡Õ¬Õ§Õº :bÕ€Ö€Õ¡Õ¿Õ¡Ö€Õ¡Õ¯Õ¸Ö‚Õ©Õ«Ö‚Õ¶ Õ€Õ¸Õ£Õ¥Ö‚Õ¸Ö€ ÔµÕ²Õ¢Õ¡ÕµÖ€Õ¸Ö‚Õ©Õ¥Õ¡Õ¶ ÔµÖ€Õ«Õ¿Õ¡Õ½Ö€Õ¤Õ¡Ö,c1946-1951.206610-03 /aÕ€Õ¸Õ£Õ¥Ö‚Õ¸Ö€ ÔµÕ²Õ¢Õ¡ÕµÖ€Õ¸Ö‚Õ©Õ«Ö‚Õ¶ ÔµÖ€Õ«Õ¿Õ¡Õ½Ö€Õ¤Õ¡Ö.2 6710-04 /aÕ€Õ¸Õ£Õ¥Ö‚Õ¸Ö€ ÔµÕ²Õ¢Õ¡ÕµÖ€Õ¸Ö‚Õ©Õ«Ö‚Õ¶ ÔµÖ€Õ«Õ¿Õ¡Õ½Ö€Õ¤Õ¡Ö. aarmenian LC01818cab a2200385 a 45000010009000000050017000090080041000260350018000679060045000850100017001300190015001470400016001622450074001782460009002522600085002613000017003465000047003635000086004105050147004966100060006436500026007036500040007296510038007696510033008076550037008407100060008777400022009378520035009598800102009948800119010968800089012158800089013048800026013939850013014191487741020071121185010.0040502m18971900enkmr|p 0 z0arm  a(Uk)002848266 apbcbccundeterduencipf20gy-nonroman a 2007970004x a2532250240 aUkbengcUk006880-01aMart :b[amsatÊ¿ertÊ¿, oÌ„rgan HnchÊ¿akean KusaktsÊ¿utÊ¿ean].3 aMard 6880-02aLondon :b[SotsÊ¿ial Demokrat HnchÊ¿akean KusaktsÊ¿utÊ¿iwn],c1897-1900. av. ;c44 cm. a"Battle": an Armenian political newspaper. a"Mart" published after 1897, as "HnchÊ¿ak" could not be due to legal proceedings.0 aI year, no. 1 (15 Apr., 1897)-10 (10 Apr., 1898); II year, no. 11 (7 May, 1898)-16 (Mar., 1899); III year, no. 17 (Aug., 1899)-27 (Oct., 1900)206880-03aSotsÊ¿ial Demokrat HnchÊ¿akean KusaktsÊ¿utÊ¿iwn 0aArmenian periodicals. 0aArmeniansxPolitics and government. 0aArmeniaxPolitics and government. 0aArmeniaxHistoryy1801-1900. 4aPeriodical publications.- London2 6880-04aSotsÊ¿ial Demokrat HnchÊ¿akean KusaktsÊ¿utÊ¿iwn0 6880-05aHnchÊ¿ak.41aBritish LibrarybHMNTSjOP.411006245-01 /aÕ„Õ¡Ö€Õ¿ :b[Õ¡Õ´Õ½Õ¡Õ©Õ¥Ö€Õ©, Ö…Ö€Õ£Õ¡Õ¶ Õ€Õ¶Õ¹Õ¡Õ¯Õ¥Õ¡Õ¶ Ô¿Õ¸Ö‚Õ½Õ¡Õ¯ÖÕ¸Ö‚Õ©Õ¥Õ¡Õ¶]. 6260-02 /aÔ¼Õ¸Õ¶Õ¤Õ¸Õ¶ :b[ÕÕ¸ÖÕ«Õ¡Õ¬ Ô´Õ¥Õ´Õ¸Õ¯Ö€Õ¡Õ¿ Õ€Õ¶Õ¹Õ¡Õ¯Õ¥Õ¡Õ¶ Ô¿Õ¸Ö‚Õ½Õ¡Õ¯ÖÕ¸Ö‚Õ©Õ«Ö‚Õ¶],c1897-1900.206610-03 /aÕÕ¸ÖÕ«Õ¡Õ¬ Ô´Õ¥Õ´Õ¸Õ¯Ö€Õ¡Õ¿ Õ€Õ¶Õ¹Õ¡Õ¯Õ¥Õ¡Õ¶ Ô¿Õ¸Ö‚Õ½Õ¡Õ¯ÖÕ¸Ö‚Õ©Õ«Ö‚Õ¶.2 6710-04 /aÕÕ¸ÖÕ«Õ¡Õ¬ Ô´Õ¥Õ´Õ¸Õ¯Ö€Õ¡Õ¿ Õ€Õ¶Õ¹Õ¡Õ¯Õ¥Õ¡Õ¶ Ô¿Õ¸Ö‚Õ½Õ¡Õ¯ÖÕ¸Ö‚Õ©Õ«Ö‚Õ¶.0 6740-05 /aÕ€Õ¶Õ¹Õ¡Õ¯. aarmenian03105cab a2200601 a 45000010009000000050017000090080041000260350018000679060045000850100017001300190015001470350020001620400016001820410023001980430021002212450093002422460022003352460028003572460055003852460073004402460052005132460037005652600110006023000033007123100031007453210026007763620044008023620020008465000127008665000070009935050072010635150027011355460028011626500028011906500047012186500039012656510026013046510039013306550036013697000049014058520036014548800133014908800082016238800102017058800071018078800056018788800139019348800061020738800202021348800093023368800061024299850013024901487741320071121185021.0000316d18551865fr er p 0 z0armod a(Uk)002863571 apbcbccundeterduencipf20gy-nonroman a 2007970007x a2541830122 a(OCoLC)43646516 aUkbengcUk1 aarmafrearusharm aa-ai---ae------006880-01aMaseatsÊ¿ aghawni :bawetaber HayastaneaytsÊ¿ /c[khmb. GabrieÌ„l AyvazeantsÊ¿].15aColombe du Massis15aMessager de l'ArmeÌnie136880-02aMaseatsÊ¿ aghawni awetaber HayastaneaytsÊ¿146880-03aMaseatsÊ¿ aghawni ew Tsiatsan HayastaneaytsÊ¿f306880-04aTsiatsan HayastaneaytsÊ¿f306880-05aAwetaber HayastaneaytsÊ¿ 6880-06aPÊ¿ariz :b[Khmbagir ew hratarakichÊ¿ GabrieÌ„l AyvazeantsÊ¿],c1855-e(Paris :fImp. W. Remquet) av. :bill., ports. ;c32 cm. aBiweekly,b<1 Sept. 1861-> aMonthly,bJan. 1855->0 6880-07a1. tari, tÊ¿iw 1 (Hunuar 1855)-1 aCeased in 1865. 6880-08aImprint varies: Paris : i GranotsÊ¿i Chaniki Aramean, Jan. 1856-> ; Theodosia : Khalipean Usumnaran,  6880-09aLatest issue consulted: 6. tari, tÊ¿iw 17 (15 Sept. 1861)0 aVol. I (1855); vol. II (1856); vol. III (1857); vol. VI, 1-8 (1861) aNot published in 1859. aIn Armenian and French. 0aArmeniansvPeriodicals. 0aArmenianszForeign countriesvPeriodicals. 0aArmeniansvBiographyvPeriodicals. 0aArmeniavPeriodicals. 0aEuropev19th centuryvPeriodicals. 4aPeriodical publications.- Paris1 6880-10aAyvazovskÊ¿i, GabrieÌ„l,d1812-1880.41aBritish LibrarybOCj17070.g.5.006245-01 /aÕ„Õ¡Õ½Õ¥Õ¡Ö Õ¡Õ²Õ¡Ö‚Õ¶Õ« :bÕ¡Ö‚Õ¥Õ¿Õ¡Õ¢Õ¥Ö€ Õ€Õ¡ÕµÕ¡Õ½Õ¿Õ¡Õ¶Õ¥Õ¡ÕµÖ /c[Õ­Õ´Õ¢. Ô³Õ¡Õ¢Ö€Õ«Õ§Õ¬ Ô±ÕµÕ¾Õ¡Õ¦Õ¥Õ¡Õ¶Ö].136246-02 /aÕ„Õ¡Õ½Õ¥Õ¡Ö Õ¡Õ²Õ¡Ö‚Õ¶Õ« Õ¡Ö‚Õ¥Õ¿Õ¡Õ¢Õ¥Ö€ Õ€Õ¡ÕµÕ¡Õ½Õ¿Õ¡Õ¶Õ¥Õ¡ÕµÖ146246-03 /aÕ„Õ¡Õ½Õ¥Õ¡Ö Õ¡Õ²Õ¡Ö‚Õ¶Õ« Õ¥Ö‚ Ô¾Õ«Õ¡Õ®Õ¡Õ¶ Õ€Õ¡ÕµÕ¡Õ½Õ¿Õ¡Õ¶Õ¥Õ¡ÕµÖf<ÕÕ¥ÕºÕ¿. 1861->306246-04 /aÔ¾Õ«Õ¡Õ®Õ¡Õ¶ Õ€Õ¡ÕµÕ¡Õ½Õ¿Õ¡Õ¶Õ¥Õ¡ÕµÖf<ÕÕ¥ÕºÕ¿. 1861->306246-05 /aÔ±Ö‚Õ¥Õ¿Õ¡Õ¢Õ¥Ö€ Õ€Õ¡ÕµÕ¡Õ½Õ¿Õ¡Õ¶Õ¥Õ¡ÕµÖ 6260-06 /aÕ“Õ¡Ö€Õ«Õ¦ :b[Ô½Õ´Õ¢Õ¡Õ£Õ«Ö€ Ö‡ Õ°Ö€Õ¡Õ¿Õ¡Ö€Õ¡Õ¯Õ«Õ¹ Ô³Õ¡Õ¢Ö€Õ«Õ§Õ¬ Ô±ÕµÕ¾Õ¡Õ¦Õ¥Õ¡Õ¶Ö],c1855-e(Paris :fImp. W. Remquet)0 6362-07 /a1. Õ¿Õ¡Ö€Õ«, Õ©Õ«Ö‚ 1 (Õ…Õ¸Ö‚Õ¶Õ¸Ö‚Õ¡Ö€ 1855)- 6500-08 /aÕÕ¡Ö€Õ¢Õ¥Ö€ Õ°Ö€Õ¡Õ¿.: Õ“Õ¡Ö€Õ«Õ¦ : Õ« Ô³Ö€Õ¡Õ¶Õ¸ÖÕ« ÕƒÕ¡Õ¶Õ«Õ¯Õ« Ô±Ö€Õ¡Õ´Õ¥Õ¡Õ¶, Õ…Õ¸Ö‚Õ¶Õ¸Ö‚Õ¡Ö€ 1856-> ; Ô¹Õ¥Õ¸Õ¤Õ¸Õ½Õ«Õ¡ : Ô½Õ¡Õ¬Õ«ÕºÕ¥Õ¡Õ¶ ÕˆÖ‚Õ½Õ¸Ö‚Õ´Õ¶Õ¡Ö€Õ¡Õ¶, <ÕÕ¥ÕºÕ¿. 1861-> 6500-09 /aÕ”Õ¶Õ¶Õ¸Ö‚Õ¡Õ® Õ¾Õ¥Ö€Õ»Õ«Õ¶ Õ©Õ«Ö‚: 6. Õ¿Õ¡Ö€Õ«, Õ©Õ«Ö‚ 17 (15 ÕÕ¥ÕºÕ¿. 1861)1 6700-10 /aÔ±ÕµÕ¾Õ¡Õ¦Õ¥Õ¡Õ¶Ö, Ô³Õ¡Õ¢Ö€Õ«Õ§Õ¬d1812-1880. aarmenian01794 ab a2200349 a 45000010009000000050017000090080041000260350018000679060045000850100017001300190015001470400016001622450208001782460021003862600060004073000017004675000029004846500028005136510045005416510061005866510073006477000044007207000030007647000035007948520036008298800319008658800088011848800067012728800042013398800050013819850013014311487741720071121185036.0040502m18121816it wu|p 0 a0arm  a(Uk)002870975 apbcbccundeterduencipf20gy-nonroman a 2007970012x a2543960295 aUkbengcUk006880-01aDitak Biwzandean :bshabatÊ¿atÊ¿ertÊ¿ apa erkshapatÊ¿atÊ¿ertÊ¿, patmutÊ¿iwn kÊ¿aghakÊ¿agan u paterazmakan, banasirakan, ekeghetsakan /ckhmb. Grigor Gaparachean, M. PÊ¿iwskiwlean, M. Jakhjakhean.3 aTidag Piwzantean 6880-02ai Venetik :bi Vans Srboyn Ghazaru,c1812-1816. av. ;c23 cm. aBegan 1808; ceased 1816. 0aArmeniansvPeriodicals. 0aEuropexHistoryy1789-1815vPeriodicals. 0aEuropexPolitics and governmenty1789-1915vPeriodicals. 0aFrancexHistoryyConsulate and First Empire, 1799-1815vPeriodicals.1 6880-03aKarapetean, Grigor KhaparÌ£achi1 6880-04aPÊ¿iwskiwlean, M.1 6880-05aJakhjakhean, ManueÌ„l.41aBritish LibrarybOCj17070.d.3.006245-01 /aÔ´Õ«Õ¿Õ¡Õ¯ Ô²Õ«Ö‚Õ¦Õ¡Õ¶Õ¤Õ¥Õ¡Õ¶ :bÕ·Õ¡Õ¢Õ¡Õ©Õ¡Õ©Õ¥Ö€Õ© Õ¡ÕºÕ¡ Õ¥Ö€Õ¯Õ·Õ¡Õ¢Õ¡Õ©Õ¡Õ©Õ¥Ö€Õ©, ÕºÕ¡Õ¿Õ´Õ¸Ö‚Õ©Õ«Ö‚Õ¶ Ö„Õ¡Õ²Õ¡Ö„Õ¡Õ¯Õ¡Õ¶ Õ¸Ö‚ ÕºÕ¡Õ¿Õ¥Ö€Õ¡Õ¦Õ´Õ¡Õ¯Õ¡Õ¶, Õ¢Õ¡Õ¶Õ¡Õ½Õ«Ö€Õ¡Õ¯Õ¡Õ¶, Õ¥Õ¯Õ¥Õ²Õ¥ÖÕ¡Õ¯Õ¡Õ¶ /cÕ­Õ´Õ¢. Ô³Ö€Õ«Õ£Õ¸Ö€ Ô³Õ¡ÕºÕ¡Ö€Õ¡Õ³Õ¥Õ¡Õ¶, Õ„. Õ“Õ«Ö‚Õ½Õ¯Õ«Ö‚Õ¬Õ¥Õ¡Õ¶, Õ„. Õ‹Õ¡Õ­Õ»Õ¡Õ­Õ¥Õ¡Õ¶. 6260-02 /aÕ« ÕŽÕ¥Õ¶Õ¥Õ¿Õ«Õ¯ :bÕ« ÕŽÕ¡Õ¶Õ½ ÕÖ€Õ¢Õ¸ÕµÕ¶ Õ‚Õ¡Õ¦Õ¡Ö€Õ¸Ö‚,c1812-1816.1 6700-03 /aÔ¿Õ¡Ö€Õ¡ÕºÕ¥Õ¿Õ¥Õ¡Õ¶, Ô³Ö€Õ«Õ£Õ¸Ö€ Ô½Õ¡ÕºÕ¡Õ¼Õ¡Õ³Õ«.1 6700-04 /aÕ“Õ«Ö‚Õ½Õ¯Õ«Ö‚Õ¬Õ¥Õ¡Õ¶, Õ„.1 6700-05 /aÕ‹Õ¡Õ­Õ»Õ¡Õ­Õ¥Õ¡Õ¶, Õ„Õ¡Õ¶Õ¸Ö‚Õ§Õ¬. aarmenian01672cam a2200325 a 45000010009000000050017000090080041000260350018000679060045000850100017001300400016001471000045001632400017002082450115002252460058003402600087003983000046004855000028005316500025005597000044005847100055006288520035006838800060007188800181007788800090009598800133010498800060011828800091012429850013013331487741820071121185039.0040502m19481961ai acf b 000 0darm  a(Uk)006842308 apbcbccundeterduencipf20gy-nonroman a 2007970013 aUkbengcUk1 6880-01aAbovyan, KhachÊ¿atur,d1805-184810aWorks.f1948106880-02aErkeri liakatar zhoghovatsu utÊ¿ hatorov /cKh. Abovyan ; [khmb. kolegia, Av. Isahakyan ... [et al.]].156880-03aPolnoe sobranie sochineniiÌŒ v vosʹmi tomakh 6880-04aErevan :bHSSRÌ£ GitutÊ¿yunneri Akademiai HratarakchÊ¿utÊ¿yun,c1948-1961. a8 v. in 10 books :bill., port. ;c26 cm. aIllustrated end-papers. 0aArmenian literature.1 6880-05aIsahakyan, AvetikÊ¿,d1875-19572 6880-06aM. Abeghyani Anvan GrakanutÊ»yan Institut.41aBritish LibrarybOCj17046.h.11 6100-01 /aÔ±Õ¢Õ¸Õ¾ÕµÕ¡Õ¶, Ô½Õ¡Õ¹Õ¡Õ¿Õ¸Ö‚Ö€,d1805-1848.106245-02 /aÔµÖ€Õ¯Õ¥Ö€Õ« Õ¬Õ«Õ¡Õ¯Õ¡Õ¿Õ¡Ö€ ÕªÕ¸Õ²Õ¸Õ¾Õ¡Õ®Õ¸Ö‚ Õ¸Ö‚Õ© Õ°Õ¡Õ¿Õ¸Ö€Õ¸Õ¾ /cÔ½. Ô±Õ¢Õ¸Õ¾ÕµÕ¡Õ¶ ; [Õ­Õ´Õ¢. Õ¯Õ¸Õ¬Õ¥Õ£Õ«Õ¡ Ô±Õ¾. Ô»Õ½Õ¡Õ°Õ¡Õ¯ÕµÕ¡Õ¶ ... [Ö‡ Õ¸Ö‚Ö€Õ·Õ¶.]].156246-03 /aПолное Ñобрание Ñочинений в воÑьми томах 6260-04 /aÔµÖ€Õ¥Õ¾Õ¡Õ¶ :bÕ€ÕÕÕŒ Ô³Õ«Õ¿Õ¸Ö‚Õ©ÕµÕ¸Ö‚Õ¶Õ¶Õ¥Ö€Õ« Ô±Õ¯Õ¡Õ¤Õ¥Õ´Õ«Õ¡Õ« Õ€Ö€Õ¡Õ¿Õ¡Ö€Õ¡Õ¯Õ¹Õ¸Ö‚Õ©ÕµÕ¸Ö‚Õ¶,c1948-1961.1 6700-05 /aÔ»Õ½Õ¡Õ°Õ¡Õ¯ÕµÕ¡Õ¶, Ô±Õ¾Õ¥Õ¿Õ«Ö„,d1875-1957.2 6710-06 /aÕ„. Ô±Õ¢Õ¥Õ²ÕµÕ¡Õ¶Õ« Ô±Õ¶Õ¾Õ¡Õ¶ Ô³Ö€Õ¡Õ¯Õ¡Õ¶Õ¸Ö‚Õ©ÕµÕ¡Õ¶ Ô»Õ¶Õ½Õ¿Õ«Õ¿Õ¸Ö‚Õ¿. aarmenian01187cab a2200301 a 45000010009000000050017000090080041000260350018000679060045000850100017001300190015001470400016001622450065001782460009002432460009002522600052002613000017003135000147003305050052004776500038005296500036005676500031006036550037006348520036006718800099007078800065008069850014008711487901520071203081856.0040502m18641877tu mr|p 0 z0arm  a(Uk)002824493 apbcbccundeterduencipf20gy-nonroman a 2007970001x a2520240032 aUkbengcUk006880-01aHoys :b[droÌ„shak hayreneats, amsagir banasirakan].3 aHuys3 aYuys 6880-02aArmash :b[Armashi VankÊ¿],c1864-1877. av. ;c23 cm. aHoys. “Hope,†a monthly magazine of literature in modern Armenian, Western dialect, printed at the Convent of the Mother of God at Armash.0 aVol. I, 1-12 (1864-1865), II, 13-24 (1865-1866) 0aArmenian literaturevPeriodicals. 0aArmenian languagevPeriodicals. 0aArmeniansxReligious life. 4aPeriodical publications.- Armash41aBritish LibrarybOCj17070.g.3.006245-01 /aÕ…Õ¸ÕµÕ½ :bÕ¤Ö€Ö…Õ·Õ¡Õ¯ Õ°Õ¡ÕµÖ€Õ¥Õ¶Õ¥Õ¡Ö, Õ¡Õ´Õ½Õ¡Õ£Õ«Ö€ Õ¢Õ¡Õ¶Õ¡Õ½Õ«Ö€Õ¡Õ¯Õ¡Õ¶]. 6260-02 /aÔ±Ö€Õ´Õ¡Õ· :b[Ô±Ö€Õ´Õ¡Õ·Õ« ÕŽÕ¡Õ¶Ö„],c1864-1877. aarmenian2yaz-4.2.30/test/test_timing.c0000644000175000017500000000243111733047144013001 00000000000000/* This file is part of the YAZ toolkit. * Copyright (C) 1995-2012 Index Data * See the file LICENSE for details. */ #if HAVE_CONFIG_H #include #endif #include #include #include #include #include #ifdef WIN32 #include #endif static void tst(void) { yaz_timing_t t = yaz_timing_create(); double real, user, sys; int i = 0; double x = 0; YAZ_CHECK(t); if (!t) return; #ifdef WIN32 Sleep(10); #endif for (i = 0; i<5000000; i++) x += i; YAZ_CHECK_EQ(i, 5000000); yaz_log(YLOG_LOG, "i=%d x=%f", i, x); yaz_timing_stop(t); real = yaz_timing_get_real(t); YAZ_CHECK(real == -1.0 || real >= 0.0); user = yaz_timing_get_user(t); YAZ_CHECK(user == -1.0 || user >= 0.0); sys = yaz_timing_get_sys(t); YAZ_CHECK(sys == -1.0 || sys >= 0.0); yaz_log(YLOG_LOG, "real=%f user=%f sys=%f", real, user, sys); yaz_timing_destroy(&t); YAZ_CHECK(!t); } int main (int argc, char **argv) { YAZ_CHECK_INIT(argc, argv); YAZ_CHECK_LOG(); tst(); YAZ_CHECK_TERM; } /* * Local variables: * c-basic-offset: 4 * c-file-style: "Stroustrup" * indent-tabs-mode: nil * End: * vim: shiftwidth=4 tabstop=8 expandtab */ yaz-4.2.30/test/marccol1.u8.marc0000644000175000017500000005266711654451754013237 0000000000000001087cam a2200277 a 4500001002000000003000400020005001700024008004100041010002400082035002700106040001800133043001200151050002500163066000700188245002600195260006800221300003600289500012800325505009200453651003000545651004900575880003000624880007000654880003300724880005200757 70813420 /AJ/r86DLC19871006084439.0860826m19689999ja ab l00000 jpn  a 70813420 /AJ/r86 a(CStRLIN)DCLP86-B14482 cNNCdNNCdDLC aa-ja---0 aDS897.H325bH36 1968 c$1006880-01aHanda shishi.0 6880-02a[Handa-shi] :bHanda-shi,cShoÌ„wa 43-<59> [1968-<1984> av. <1-5, 7-8> :bill. ;c22 cm. aVol. 3 accompanied by Handa-shi chiiki chishitsuzu; v. 8, Handa-shi Otsukawa Asaiyama dashi kumiage zumen (1 folded) leaf).1 a[1]-[4] ShiryoÌ„ hen -- [5] Honbun hen -- [7] Bunkazai hen -- [8] Sairei minzoku hen 06880-03aHanda-shi (Japan) 06880-04aHanda-shi (Japan)xHistoryxSources.006245-01/$1aåŠç”° 市誌.0 6260-02/$1a[åŠç”°å¸‚] :båŠç”°å¸‚,c昭和 43-<59> [1968-<1984> 46651-03/$1aåŠç”°å¸‚ (Japan) 46651-04/$1aåŠç”°å¸‚ (Japan)xHistoryxSources.00847nam a2200229 a 4500001002100000003000400021005001700025008004100042010002500083035002600108050001900134066000700153245002400160260012100184300004600305500001700351650003900368710004400407880002300451880010600474880003700580 75840215 /ACN/r86DLC19870219000000.0860606m19009999ch 00001 chi  a 75840215 /ACN/r86 a(CStRLIN)DCLP86-B97420 aPL3031.T32bL5 c$1006880-01aLi tsÊ»ung.0 6880-02a[Kao-hsiung shih] :bWen hua yüan :bFa hsing so Sheng su chÊ»u pan she,c av. <4, pts 1-2; v. 5> in <3 > ;c22 cm. aCover title. 0aDidactic fiction, ChinesezTaiwan.206880-03aKao-hsiung shih wen hua yüan.006245-01/$1aæ­·å¢.0 6260-02/$1a[高雄市] :b文化院 :bç™¼è¡Œæ‰€ã€€è–æ›¸ã€€å‡ºç‰ˆç¤¾,c<民國63-66 [1974-1977 >206710-03/$1a高雄市 文化院.01020nam a2200277 a 4500001001700000003000400017005001700021008004100038010002100079035002600100050002000126066000700146082001600153245003700169250002200206260011600228300004600344440003200390504003000422650004700452650004600499880004100545880002400586880010100610880003100711 84226659 /ACNDLC19870219000000.0860227s1983 cc ac b 00000dchi  a 84226659 /ACN a(CStRLIN)DCLP86-B34000 aNX90b.I18 1983 c$10 a174/.97219006880-01aI shu chia yü te yü. 6880-02aTi 1 pan.0 6880-03aChÊ»eng-tu :bSsu-chÊ»uan jen min chÊ»u pan she :bSsu-chÊ»uan sheng hsin hua shu tien fa hsing,c1983. a2, 3, 4, 244 p. :bill., ports. ;c19 cm. 06880-04aTe yü tsÊ»ung shu aBibliography: p. 239-240. 0aArtistsxAnecdotes, facetiae, satire, etc. 0aEthicsxAnecdotes, facetiae, satire, etc.006245-01/$1a艺术家 与 德育. 6250-02/$1a第1版.0 6260-03/$1aæˆéƒ½ :bå››å·ã€€äººæ°‘ 出版社 :bå››å·çœã€€æ–°åŽã€€ä¹¦åº— å‘行,c1983. 06440-04/$1a德育 丛书01336cam a2200349 a 4500001001300000003000400013005001700017008004100034010001700075020002000092035002600112040003800138043001200176050002700188066000700215082002000222245005600242250002200298260010400320300003000424500006000454504004100514610004900555710004200604740002900646880005700675880002400732880010100756880004700857880004400904987003800948 84231405 DLC20001214140017.0841203m19849999cc b 000 0 chi  a 84231405  cRMBY0.38 (v. 1) a(CStRLIN)DCLP84-B5184 aDLC-RcDLC-RdDLC-RdCStRLINdDLC aa-cc---00aJQ1519.A5bC47529 1984 c$100a324.251/075219006880-01aZheng dang xue xi cai liao /cben she bian. 6880-02aDi 1 ban. 6880-03aShenyang :bLiaoning ren min chu ban she :bLiaoning sheng xin hua shu dian fa xing,c1984- av. <1, 3-5, > ;c19 cm. aColophon title also in pinyin: Zhengdang xuexi cailiao. aIncludes bibliographical references.206880-04aZhongguo gong chan dangxParty work.2 6880-05aLiaoning ren min chu ban she.0 aZhengdang xuexi cailiao.006245-01/$1aæ•´å…šã€€å­¦ä¹ ã€€ææ–™ /c本社 编. 6250-02/$1a第1版. 6260-03/$1a沈阳 :bè¾½å®ã€€äººæ°±ã€€å‡ºç‰ˆç¤¾ :bè¾½å®çœã€€æ–°åŽã€€ä¹¦åº— å±è¡Œ,c1984-246610-04/$1a中国 共产党xParty work.2 6710-05/$1aè¾½å®ã€€äººæ°±ã€€å‡ºç‰ˆç¤¾. aPINYINbCStRLINc20001212dce1.000916nam a2200241 a 4500001001700000003000400017005001700021008004100038010002100079035002600100043001200126050002300138066000700161082002200168245008000190250002400270260011200294300003200406650003400438880007400472880002400546880010400570 85174785 /ACNDLC19870219000000.0860312s1983 cc a 00000 chi  a 85174785 /ACN a(CStRLIN)DCLP86-B4377 aa-cc-hp0 aGR336.H67bH6 1983 c$10 a398.2/32/5115219006880-01aHo-pei min chien ku shih hsüan /c[chÊ»a tÊ»u Chang Wen-hsüeh]. 6880-02aHsin 1 pan.0 6880-03aShih-chia-chuang :bHua shan wen i chÊ»u pan she :bHo-pei sheng hsin hua shu tien fa hsing,c1983. a2, 255 p. :bill. ;c19 cm. 0aTaleszChinazHopeh Province.006245-01/$1a河北 氱间 故事 选 /c[æ’图 张 文学]. 6250-02/$1aæ–°1版.0 6260-03/$1a石家庄 :b花山 文艺 出版社 :b河北çœã€€æ–°è¯ã€€æ›¸åº— å±è¡Œ,c1983.01171nam a2200325 a 4500001001700000003000400017005001700021008004100038010002100079020001300100035002600113050002100139066000700160082001200167100003100179245006500210250002200275260010500297300002100402440004900423500005100472504002900523650001600552740002300568880002900591880005700620880002400677880010400701880004000805 86116930 /ACNDLC19870219000000.0860430s1984 cc b 00010 chi  a 86116930 /ACN cRMBY1.00 a(CStRLIN)DCLP86-B71900 aPN45b.C436 1984 c$10 a809219106880-01aChang, Hsin-chien.106880-02aWen hsüeh chi chÊ»u chih shih /cChang Hsin-chien. 6880-03aTi 1 pan.0 6880-04aHo-fei shih :bAn-hui wen i chÊ»u pan she :bAn-hui sheng hsin hua shu tien fa hsing,c1984. a196 p. ;c19 cm. 06880-05aChÊ»ing nien wen hsüeh tsÊ»ung shu aCover title also in pinyin: Wenxuejichuzhishi. aIncludes bibliographies. 0aLiterature.01aWenxuejichuzhishi.106100-01/$1a章 新建.106245-02/$1a文学 基础 知识 /c章 新建. 6250-03/$1a第1版.0 6260-04/$1aåˆè‚¥å¸‚ :b安徽 文艺 出版社 :b安徽çœã€€æ–°è¯ã€€æ›¸åº— å‘行,c1984. 06440-05/$1aé’年 文学 丛书01437nam a2200301 a 4500001001700000003000400017005001700021008004100038010002100079020001300100035002600113043001200139050002400151066000700175082002200182245019000204250002200394260011900416300003800535504002600573650004700599710006500646740006800711880015700779880002400936880011000960880006501070 86117080 /ACNDLC19870219000000.0860502s1985 cc ab b 00000 chi  a 86117080 /ACN cRMBY2.30 a(CStRLIN)DCLP86-B7475 aa-cc---0 aQE537.2.C6bS5 1985 c$10 a551.2/2/09514219006880-01aShan Kan Ning ChÊ»ing ssu sheng (chÊ»ü) chÊ»iang ti chen mu lu :bkung yüan [chÊ»ien] 1177 nien-kung yüan 1982 nien /cKuo chia ti chen chü Lan-chou ti chen yen chiu so. 6880-02aTi 1 pan.0 6880-03aHsi-an :bShan-hsi kÊ»o hsüeh chi shu chÊ»u pan she :bShan-hsi sheng hsin hua shu tien fa hsing,c1985. a2, 170 p. :bill., maps ;c26 cm. aBibliography: p. 170. 0aEarthquakeszChina, NorthwestxChronology.206880-04aKuo chia ti chen chü Lan-chou ti chen yen chiu so.01aShan Kan Ning ChÊ»ing 4 sheng (chÊ»ü) chÊ»iang ti chen mu lu.006245-01/$1a陕甘å®é’ 四çœ(区) 强 地震 目录 :b公元[å‰] 1177å¹´ï¼å…¬å…ƒ 1982å¹´ /c国家 地震局 兰州 地震 研究所. 6250-02/$1a第1版.0 6260-03/$1a西安 :b陕西 秱学 技术 出版社 :b陕西çœã€€æ–°è¯ã€€æ›¸åº— å±è¡Œ,c1985.206710-04/$1a国家 地震局 兰州 地震 研究所.01289cam a2200337 a 4500001002100000003000400021005001700025008004100042010002500083020001400108035002600122041001100148050002200159066000700181082002000188100003300208245014100241250002300382260007400405300002100479500002000500650004000520650004500560700003100605740004400636880002900680880012500709880002300834880006500857880002900922 86118651 /ACN/r88DLC19880830123434.0860218s1985 ch d 00110 chi  a 86118651 /ACN/r88 cNT$260.00 a(CStRLIN)DCLP86-B26690 achieng0 aSD126b.C473 1985 c$10 a634.9/03/21219106880-01aChÊ»en, Ming-tsÊ»un.106880-02aSen lin hsüeh ming tzÊ»u tzÊ»u tien =bEnglish Chinese dictionary of forestry /cChÊ»en Ming-tsÊ»un, Huang Chin-hsien ho pien. 6880-03aChÊ»u pan.0 6880-04aTÊ»ai-pei shih :bMing shan chÊ»u pan she,cmin kuo 74 [1985] a274 p. ;c20 cm. aIncludes index. 0aForests and forestryxDictionaries. 0aEnglish languagexDictionariesxChinese.106880-05aHuang, Chin-hsien.01aEnglish Chinese dictionary of forestry.106100-01/$1a陳 銘æ±.106245-02/$1a森林學 å詞 辭典 =bEnglish Chinese dictionary of forestry /c陳 銘æ±, 黃 釱仙 åˆç·¨. 6250-03/$1aåˆç‰ˆ.0 6260-04/$1aå°åŒ—市 :bå山 出版社,c氱國74 [1985]106700-05/$1a黃 釱仙.00995nam a2200289 a 4500001001700000003000400017005001700021008004100038010002100079035002600100050002400126066000700150082001700157100003100174245005700205250002300262260007500285300002100360440005200381500001900433650003000452880003300482880005700515880002300572880006500595880004500660 86118679 /ACNDLC19870219000000.0860218s1985 ch 00011 chi  a 86118679 /ACN a(CStRLIN)DCLP86-B26740 aPL2865.H3bH84 1985 c$10 a895.1/35219106880-01aHuang, Hai,d1943-106880-02aHsing hsing ti hsiang lien /cHuang Hai chu. 6880-03aChÊ»u pan.0 6880-04aTÊ»ai-pei shih :bHuang kuan chÊ»u pan she,cmin kuo 74 [1985] a297 p. ;c19 cm. 06880-05aHuang kuan tsÊ»ung shu ;vti 1143 chung aShort stories. 0aScience fiction, Chinese.106100-01/$1a黃 海,d1943-106245-02/$1a星星 的 項練 /c黃 海 著. 6250-03/$1aåˆç‰ˆ.0 6260-04/$1aå°åŒ—市 :b皇冠 出版社,c民國74 [1985] 06440-05/$1açš‡å† ã€€å¢æ›¸ ;v第1143種01365cam a2200361 a 4500001001300000003000400013005001700017008004100034010001700075020001300092035002600105040004000131043001200171050002300183066000700206082001700213245010300230250002200333260007900355300005400434500005400488504004100542651004500583700002600628700002400654740002200678880010600700880002400806880008000830880002900910880002600939987003800965 86119726 DLC20010412140706.0860403s1985 cc af b 00000 chi  a 86119726  cRMBY3.90 a(CStRLIN)DCLP86-B5782 aDLC-RcDLC-RdDLC-RdCStRLINdDLC-R aa-cc---00aDS751b.C4945 1985 c$100a951/.024219006880-01aJian ming Song shi /cZhou Baozhu, Chen Zhen zhu bian ; Zhou Baozhu ... [et al.] bian xie. 6880-02aDi 1 ban. 6880-03aBeijing :bRen min chu ban she :bXin hua shu dian fa xing,c1985. a4, 5, 603 p., [12] p. of plates :bill. ;c21 cm. aColophon title also in pinyin : Jianming Songshi. aIncludes bibliographical references. 0aChinaxHistoryySong dynasty, 960-1279.1 6880-04aZhou, Baozhu.1 6880-05aChen, Zhen.0 aJianming Songshi.006245-01/$1aç°¡æ˜Žã€€å®‹ã€€å² /c周 å®ç , 陈 振 主编 ; 周 å®ç  ... [et al.] 编写. 6250-02/$1a第1版. 6260-03/$1a北京 :b人民 出版社 :bæ–°è¯ã€€æ›¸åº— å‘行,c1985.1 6700-04/$1a周 å®ç .1 6700-05/$1a陈 振. aPINYINbCStRLINc20001214dce1.001069nam a2200289 a 4500001001700000003000400017005001700021008004100038010002100079020001300100035002600113043001200139050002200151066000700173082002000180100002800200245006400228250002200292260011800314300002500432504004100457650005700498880002900555880006500584880002400649880010600673 86122256 /ACNDLC19870219000000.0860303s1984 cc b 00010 chi  a 86122256 /ACN cRMBY2.80 a(CStRLIN)DCLP86-B3622 aa-cc---0 aPL2333b.L63 1984 c$10 a895.1/15/09219106880-01aLo, Han-chÊ»ao.106880-02aChung-kuo hsien tai shih ko lun /c[Lo Han-chÊ»ao]. 6880-03aTi 1 pan.0 6880-04a[Nan-ching shih] :bChiang-su jen min chÊ»u pan she :bChiang-su sheng hsin hua shu tien fa hsing,c1984. a11, 411 p. ;c20 cm. aIncludes bibliographical references. 0aChinese poetryy20th centuryxHistory and criticism.106100-01/$1a骆 寒超.106245-02/$1a中国 现代 诗歌 论 /c[骆 寒超]. 6250-03/$1a第1版.0 6260-04/$1a[å—京市] :b江è‹ã€€äººæ°±ã€€å‡ºç‰ˆç¤¾ :b江è‹çœã€€æ–°è¯ã€€æ›¸åº— å±è¡Œ,c1984.01194nam a2200325 a 4500001001700000003000400017005001700021008004100038010002100079020001300100035002600113043001200139050002300151066000700174082001500181100002300196245005300219250002200272260011900294300002400413440004700437650003300484650004400517651005000561880002600611880005700637880002400694880010700718880004300825 86124008 /ACNDLC19870219000000.0860417s1985 cc j 00010 chi  a 86124008 /ACN cRMBY0.61 a(CStRLIN)DCLP86-B6501 aa-cc---0 aDS731.U4bH75 1985 c$10 a951/.6219106880-01aHsin, She.106880-02aTsai Wei-wu-erh chih hsiang /cHsin She. 6880-03aTi 1 pan.0 6880-04aWu-lu-mu-chÊ»i shih :bHsin-chiang jen min chÊ»u pan she :bHsin-chiang hsin hua shu tien fa hsing,c1985. a2, 178 p. ;c19 cm. 06880-05aTsu kuo ta chia tÊ»ing tsÊ»ung shu 0aUigursxJuvenile literature. 0aEthnologyzChinaxJuvenile literatture. 0aChinaxEthnic relationsxJuvenile literature.106100-01/$1a辛 涉.106245-02/$1a在 维å¾å°” 之 乡 /c辛 涉. 6250-03/$1a第1版.0 6260-04/$1aä¹Œé²æœ¨é½å¸‚ :b新疆 人民 出版社 :b新疆 新è¯ã€€æ›¸åº— å‘行,c1985. 06440-05/$1a祖国 大家庭 丛书01192cam a2200313 a 4500001001300000003000400013005001700017008004100034010001700075020001300092035002700105040003100132050002400163066000700187082001700194100003600211245006400247250003000311260010700341300002400448440004900472500001900521880003900540880006900579880003300648880011000681880004900791987003800840 86124229 DLC20001214140017.0860703s1985 cc 000 1 chi  a 86124229  cRMBY1.05 a(CStRLIN)DCLP86-B11515 aDLC-RcDLC-RdCStRLINdDLC00aPL2724.H37bH7 1985 c$100a895.1/342191 6880-01aShen, Qifeng,db. 1741.106880-02aXie duo /cShen Qifeng zhu ; Qiao Yuzhou jiao dian. 6880-03aBeijing di 1 ban. 6880-04aBeijing :bRen min wen xue chu ban she :bXin hua shu dian Beijing fa xing suo fa xing,c1985. a7, 198 p. ;c19 cm. 06880-05aZhongguo xiao shuo shi liao cong shu aShort stories.1 6100-01/$1a沈 起凤,db. 1741.106245-02/$1aè°é“Ž /c沈 起凤 著 ; 乔 雨舟 校点. 6250-03/$1a北京 第1版. 6260-04/$1a北京 :b人民 文学 出版社 :bæ–°åŽã€€ä¹¦åº— 北京 å‘行所 å‘行,c1985. 06440-05/$1a中国 å°è¯´ã€€å²æ–™ã€€ä¸›ä¹¦ aPINYINbCStRLINc20001214dce1.001470cam a2200349 a 4500001002100000003000400021005001700025008004100042010002500083020001300108035002600121043001200147050002400159066000700183082002000190245013300210250002200343260011700365300002400482500006600506650002200572650002600594651003400620651003400654651003500688710006400723740003800787880010800825880002400933880011000957880005301067 86124531 /ACN/r93DLC19930723073715.0860319s1985 cc 00000 chi  a 86124531 /ACN/r93 cRMBY1.80 a(CStRLIN)DCLP86-B4826 aa-cc---0 aHX418.5b.C482 1985 c$10 a322/.2/0951219006880-01aChÊ»ing kung cheng chih lun hsün chiao tsÊ»ai /cChung kung Shang-hai shih wei hsüan chÊ»uan pu tsu chih pien hsieh. 6880-02aTi 1 pan. 6880-03aShang-hai :bShang-hai jen min chÊ»u pan she :bHsin hua shu tien Shang-hai fa hsing so fa hsing,c1985. a8, 479 p. ;c19 cm. aCover title also in pinyin: Qinggong zhengzhi lunxun jiaocai. 0aCommunismzChina. 0aWorking classzChina. 0aChinaxHistoryy19th century. 0aChinaxHistoryy20th century. 0aChinaxDescription and travel.206880-04aChung kung Shang-hai shih wei.bHsüan chÊ»uan pu.01aQinggong zhengzhi lunxun jiaocai.006245-01/$1aé’工 政治 轮训 教æ /c中共 上海 市委 宣传部 组织 编写. 6250-02/$1a第1版. 6260-03/$1a上海 :b上海 人氱 出版社 :bæ–°è¯ã€€æ›¸åº— 上海 å±è¡Œæ‰€ã€€å±è¡Œ,c1985.206710-04/$1a中共 上海 市委.b宣传部.01072nam a2200301 a 4500001001700000003000400017005001700021008004100038010002100079020001300100035002600113050002500139066000700164082001700171100002800188245004100216250002200257260012700279300006300406440003400469500001100503740001500514880002600529880004100555880002400596880011900620880003100739 86125160 /ACNDLC19870219000000.0860327s1985 cc cfh 00010 chi  a 86125160 /ACN cRMBY1.05 a(CStRLIN)DCLP86-B52920 aPL2862.I276bW8 1985 c$10 a895.1/15219106880-01aHsiao, ChÊ»ing.106880-02aWu shu hua /cHsiao ChÊ»ing. 6880-03aTi 1 pan.0 6880-04aPei-ching :bPei-ching shih yüeh wen i chÊ»u pan she :bHsin hua shu tien Pei-ching fa hsing so fa hsing,c1985. a4, 3, 199 p., [2] p. of plates :bfacsim., port. ;c19 cm. 06880-05aHung yeh shih tsÊ»ung aPoems.01a5 shu hua.106100-01/$1a晓 晴.106245-02/$1a五æŸã€€èб/c晓 晴. 6250-03/$1a第1版.0 6260-04/$1a北京 :båŒ—äº¬ã€€åæœˆã€€æ–‡è‰ºã€€å‡ºç‰ˆç¤¾ :bæ–°åŽã€€ä¹¦åº— 北京 å±è¡Œæ‰€ã€€å±è¡Œ,c1985. 06440-05/$1a红å¶ã€€è¯—丛01248nam a2200301 a 4500001001700000003000400017005001700021008004100038010002100079035002600100043001200126050002500138066000700163082001500170100003000185245006900215260008800284300003000372490007900402500004100481651004100522830006900563880002900632880006500661880007900726880007600805880006500881 86125348 /ACNDLC19870219000000.0860304r19851917ch 00010 chi  a 86125348 /ACN a(CStRLIN)DCLP86-B3824 aa-cc---0 aDS754.18b.C446 1985 c$10 a327.51219106880-01aChuang, Ping-hai.106880-02aWai chiao ssu tÊ»ung lu /cChuang Ping-hai pien [tsuan].0 6880-03a[TÊ»ai-pei hsien Yung-ho shih] :bWen hai chÊ»u pan she,cmin kuo 74 [1985] a2, 2, 2, 272 p. ;c22 cm.1 6880-04aChin tai Chung-kuo shih liao tsÊ»ung kÊ»an 3 pien : ti 2 chi ;v20 aReprint. Originally published: 1917? 0aChinaxForeign relationsy1644-1912. 06880-05aChin tai Chung-kuo shih liao tsÊ»ung kÊ»an 3 pien ;v20.106100-01/$1a莊 病骸.106245-02/$1a外交 æ€ç—›ã€€éŒ„ /c莊 病骸 編[纂].0 6260-03/$1a[臺北縣 永和市] :b文海 出版社,c民國74 [1985]1 6490-04/$1aè¿‘ä»£ã€€ä¸­åœ‹ã€€å²æ–™ã€€å¢åˆŠã€€ä¸‰ç·¨ : 第二輯 ;v20 06830-05/$1aè¿‘ä»£ã€€ä¸­åœ‹ã€€å²æ–™ã€€å¢åˆŠã€€ä¸‰ç·¨ ;v20.01116cam a2200325 a 4500001001300000003000400013005001700017008004100034010001700075020001700092035002600109040003300135043001200168050002100180066000700201082001600208100002500224245009600249250002100345260006100366300003600427546001600463650002500479740004000504880002900544880010300573880002300676880006200699987002900761 86125443 DLC20020326070412.0860304s1985 ch a 00010 chi  a 86125443  c$9.00 (U.S.) a(CStRLIN)DCLP86-B3795 aDLC-RcDLC-RdCStRLINdDLC-R aa-cc---00aB5231b.L59 1985 c$100a181/.112191 6880-01aLiu, Shaoji.106880-02aZhongguo zhe xue xin lun =bA new view of the Chinese philosophy /cLiu Shaoji zhu. 6880-03aChu ban. 6880-04aTaibei Shi :bShi jie shu ju,cmin guo 74 [1985] a6, 12, 424 p. :bill. ;c27 cm. aIn Chinese. 0aPhilosophy, Chinese.0 aNew view of the Chinese philosophy.1 6100-01/$1a劉 紹基.106245-02/$1a中國 哲學 新論 =bA new view of the Chinese philosophy /c劉 紹基 豗. 6250-03/$1aåˆç‰ˆ. 6260-04/$1aå°åŒ—市 :b世界 書局,c氱國74 [1985] aPINYINbDLCc20020326dc01199nam a2200301 a 4500001002100000003000400021005001700025008004100042010002500083020002000108035002600128043001200154050002400166066000700190082001800197245009700215250002200312260011900334300001900453500007200472650003100544700002700575740004100602880009500643880002400738880010600762880002900868 86154542 /ACN/r86DLC19870219000000.0860528s1985 cc 00000 chi  a 86154542 /ACN/r86 cRMBY3.60 (v. 1) a(CStRLIN)DCLP86-B9002 aa-cc---0 aHB126.C4bC533 1985 c$10 a330/.0951219006880-01aChung-kuo ku tai ching chi chu shu hsüan tu /cYü Tsu-yao ... [et al.] pien chu. 6880-02aTi 1 pan.0 6880-03a[ChÊ»ang-chÊ»un shih] :bChi-lin jen min chÊ»u pan she :bChi-lin sheng hsin hua shu tien fa hsing,c1985. a2 v. ;c20 cm. aColophon title also in pinyin: Zhongguo gudai jingji zhushu xuandu. 0aEconomicszChinaxHistory.106880-04aYü, Tsu-yao.01aZhongguo gudai jingji zhushu xuandu.006245-01/$1a中國 å¤ä»£ã€€ç¶“濟 著述 é¸è®€ /c虞 祖尧 ... [et al.] ç¼–è‘—. 6250-02/$1a第1版.0 6260-03/$1a[长春市] :b剿ž— 人民 出版社 :b剿ž—çœã€€æ–°åŽã€€ä¹¦åº— å‘行,c1985.106700-04/$1a虞 祖尧.00920nam a2200253 a 4500001001600000003000400016005001700020008004100037010002000078020001000098035002600108040002400134050002500158066000700183100003400190245006700224260006400291300002100355440005300376880003600429880007900465880005900544880006300603 86159478 /AKDLC19870219000000.0860602s1984 ko 00010 kor  a 86159478 /AK cW2800 a(CStRLIN)DCLP86-B9357 aCLASIAcCLASIAdDLC0 aAC148b.K589256 1985 c$1106880-01aKim, Tong-gil,d1928-106880-02aTŭrŏra, ttaltŭl a :bKim Tong-gil taepÊ»yo esei.0 6880-03aSŏul :bChÊ»ŏngnyŏnsa,c1984g(1985 printing) a271 p. ;c23 cm. 06880-04aUri sidae ŭi taepÊ»yo sanmunsŏn ;v1106100-01/$1a김 ë™ê¸¸,d1928-106245-02/$1a들어ë¼, 딸들 아 :b김 ë™ê¸¸ã€€ëŒ€í‘œã€€ì—세ì´.0 6260-03/$1a서울 :b청년사,c1984g(1985 printing) 06440-04/$1a우리 시대 ì˜ã€€ëŒ€í‘œã€€ì‚°ë¬¸ì„  ;v1yaz-4.2.30/test/marc9.xml.marc0000644000175000017500000000430411741237740012770 0000000000000002244cas a22005055a 4500001001300000003000400013005001700017008004100034010001700075012003100092035002100123906004500144040001800189041001300207042000700220043001200227050001500239066000700254245008700261246002600348246004900374260011100423300002500534310002700559362004400586490010100630500004700731500005800778546003600836650004700872650002600919650002700945650004100972710008801013710004201101850000801143880009001151880005601241880011501297880005201412880010501464880009101569880005001660936002801710 2005336282DLC20070911033614.0070910c20059999mr uu p f0 0ara  a 2005336282 a-3-7-0709110002-p-----  a(OCoLC)170490164 a7bundcserialsduencipf19gn-oclcserc aDLCcDLCdDLC0 aaraafre alc af-mr---00aIN PROCESS c(3006880-01aQadÌ£āʼ al-usrah :bmajallah mutakhasÌ£sÌ£isÌ£ah /cWizaÌ„rat al-Ê»Adl.13aJustice de la famille136880-02aMajallat QadÌ£āʼ al-usrahf<2006> 6880-03aal-RabaÌ„tÌ£ :bJamÊ»iÌ„yat Nashr al-MaÊ»luÌ„mah al-QaÌ„nuÌ„niÌ„yah wa-al-QadÌ£āʼiÌ„yah,c2005- av. :bill. ;c24 cm. aIrregular (semiannual)0 6880-04aal-Ê»Adad 1. (YuÌ„lyuÌ„z 2005)-0 6880-05aManshuÌ„raÌ„t JamÊ»iÌ„yat Nashr al-MaÊ»luÌ„mah al-QaÌ„nuÌ„niÌ„yah wa-al-QadÌ£āʼiÌ„yah aSome issues have also a distinctive title. aLatest issue consulted: al-Ê»Adad 3. (Dujanbir 2006). aChiefly in Arabic; some French. 0aDomestic relations (Islamic law)zMorocco. 0aDivorce (Islamic law) 0aMarriage lawzMorocco. 0aLaw reports, digests, etc.zMorocco.2 6880-06aJamÊ»iÌ„yat Nashr al-MaÊ»luÌ„mah al-QaÌ„nuÌ„niÌ„yah wa-al-QadÌ£āʼiÌ„yah.1 6880-07aMorocco.bWizaÌ„rat al-Ê»Adl. aDLC006245-01/(3/raقضاء الأسرة :bمجلة متخصصة /cوزارة العدل.136246-02/(3/raمجلة قضاء الأسرةf<2006> 6260-03/(3/raالرباط :bجمعية نشر المعلومة القانونية والقضائية،c2005-0 6362-04/(3/raالعدد 1. (يوليوز 2005)-0 6490-05/(3/raمنشورات جمعية نشر المعلومة القانونية والقضائية2 6710-06/(3/raجمعية نشر المعلومة القانونية والقضائية.1 6710-07/(3/raMorocco.bوزارة العدل. aLC Cairo Office [we 45]yaz-4.2.30/test/marc9.xml0000644000175000017500000001453711741237740012060 00000000000000 02075cas a22005055a 4500 2005336282 DLC 20070911033614.0 070910c20059999mr uu p f0 0ara 2005336282 -3-7-0709110002-p----- (OCoLC)170490164 7 und serials u ncip 19 n-oclcserc DLC DLC DLC ara fre lc f-mr--- IN PROCESS (3 880-01 QadÌ£āʼ al-usrah : majallah mutakhasÌ£sÌ£isÌ£ah / WizaÌ„rat al-Ê»Adl. Justice de la famille 880-02 Majallat QadÌ£āʼ al-usrah <2006> 880-03 al-RabaÌ„tÌ£ : JamÊ»iÌ„yat Nashr al-MaÊ»luÌ„mah al-QaÌ„nuÌ„niÌ„yah wa-al-QadÌ£āʼiÌ„yah, 2005- v. : ill. ; 24 cm. Irregular (semiannual) 880-04 al-Ê»Adad 1. (YuÌ„lyuÌ„z 2005)- 880-05 ManshuÌ„raÌ„t JamÊ»iÌ„yat Nashr al-MaÊ»luÌ„mah al-QaÌ„nuÌ„niÌ„yah wa-al-QadÌ£āʼiÌ„yah Some issues have also a distinctive title. Latest issue consulted: al-Ê»Adad 3. (Dujanbir 2006). Chiefly in Arabic; some French. Domestic relations (Islamic law) Morocco. Divorce (Islamic law) Marriage law Morocco. Law reports, digests, etc. Morocco. 880-06 JamÊ»iÌ„yat Nashr al-MaÊ»luÌ„mah al-QaÌ„nuÌ„niÌ„yah wa-al-QadÌ£āʼiÌ„yah. 880-07 Morocco. WizaÌ„rat al-Ê»Adl. DLC 245-01/(3/r قضاء الأسرة : مجلة متخصصة / وزارة العدل. 246-02/(3/r مجلة قضاء الأسرة <2006> 260-03/(3/r الرباط : جمعية نشر المعلومة القانونية والقضائية، 2005- 362-04/(3/r العدد 1. (يوليوز 2005)- 490-05/(3/r منشورات جمعية نشر المعلومة القانونية والقضائية 710-06/(3/r جمعية نشر المعلومة القانونية والقضائية. 710-07/(3/r Morocco. وزارة العدل. LC Cairo Office [we 45] yaz-4.2.30/test/marc1.xml0000644000175000017500000000727311741237740012047 00000000000000 00988nam0a32003011 450 9 181 423 4 710100 a n e m u 2002 us eng 0 a xx 1-4000-4596-7 $14,00 DBC200439 Sloman Larry On the road with Bob Dylan Larry "Ratso" Sloman Revised edition Three Rivers Press New York Three Rivers Press 2002 xv, 464 sider, tavler Larry "Ratso" Slomans meget personlige beretning om Bob Dylans koncertturne i USA i 1975: "The Rolling Thunder revue" PÃ¥ omslaget: With a new introduction by Kinky Friedman Tidligere: 1. udgave. New York, Bantam, 1978 99.4 Dylan Bob 78.9064 5 folkemusik folkemusikere rockmusik rockmusikere rockkoncerter USA 1970-1979 yaz-4.2.30/test/marccol5.u8.2.lst0000644000175000017500000007702511654451754013256 0000000000000001741cam a2200301Ka 4500 001 ocm57665435 003 OCoLC 005 20080328102918.0 008 050215s2004 ii d 000 0 eng d 040 $a ACN $c ACN $d OCLCQ $d IXA $d OCL 020 $a 8176500623 020 $a 9788176500623 035 $a (OCoLC)57665435 041 0 $a beneng 092 $a 491.44321 090 $a PK1687 $b .E65 2004 049 $a LNNA 245 00 $6 880-01 $a English-Bengali Bengali-English combined dictionary = $b ImÌ£raÌ„jiÌ„ - BaÌ„mÌ£laÌ„ BaÌ„mÌ£laÌ„ - ImÌ£raÌ„jiÌ„ samshukuta diksaÌnariÌ„ / $c compiled by Debasis Adhikary. 260 $a New Delhi : $b World of Learning : $b Distributed by Star Publications, $c 2004. 300 $a 1518 p. ; $c 23 cm. 500 $a "More than 90,000 total words from English to Bengali and Bengali to English." 546 $a Bengali and English. 650 0 $a English language $v Dictionaries $x Bengali. 650 0 $a Bengali language $v Dictionaries $x English. 700 1 $a Adhikary, Debasis. 880 00 $6 245-01 $a English-Bengali Bengali-English combined dictionary = $b ইংরাজী - বাংলা বাংলা - ইংরাজী সংযুক্ত ডিক্শনরী / $c compiled by Debasis Adhikary. 880 31 $6 246-00 $a ইংরাজী - বাংলা বাংলা - ইংরাজী সংযুক্ত ডিক্শনরী 994 $a C0 $b LNN 04253nam a22005053i 4500 001 ocm86174229 003 OCoLC 005 20080328102918.0 008 070326s1977 ii b 000 0 san d 040 $a STF $c STF 035 $a (OCoLC)86174229 041 0 $a san $a hin 050 04 $a PK511 $b 1977 049 $a LNNA 100 0 $6 880-01 $a PaÌ„nÌ£ini. 240 10 $a AsÌ£tÌ£aÌ„dhyaÌ„yiÌ„ 245 10 $6 880-02 $a AsÌ£tÌ£aÌ„dhyaÌ„yiÌ„suÌ„trapaÌ„tÌ£hahÌ£ : $b PaÌ„nÌ£iniÌ„yasÌiksÌ£aÌ„-liṅgaÌ„nusÌaÌ„sanasahitasÌca / $c MaharsÌ£ipaÌ„nÌ£inipranÌ£iÌ„tahÌ£ ; upoddhaÌ„talekhakahÌ£ SÌriÌ„naÌ„raÌ„yanÌ£a MisÌrahÌ£. 246 15 $a AsÌ£tÌ£aÌ„dhyaÌ„yiÌ„suÌ„trapaÌ„tÌ£ha : $b with PaÌ„nÌ£iniÌ„yasÌiksÌ£aÌ„ and LiṅgaÌ„nusÌaÌ„sana 250 $6 880-03 $a 1. samÌ£skaranÌ£a. 260 $6 880-04 $a VaÌ„raÌ„nÌ£asiÌ„ ; $a DilliÌ„ : $b CaukhambhaÌ„ OriyantÌ£aÌ„liyaÌ„ ; $a VaÌ„raÌ„nÌ£asiÌ„ : $b anya praÌ„ptisthaÌ„na, CaukhambhaÌ„ VisÌvabhaÌ„ratiÌ„, $c 1977. 300 $a 100 p. 440 0 $6 880-05 $a GokuladaÌ„sa SamÌ£skrÌ¥ta granthamaÌ„laÌ„ ; $v 29 546 $a In Sanskrit; introd. in Hindi. 500 $a "SampaÌ„dakahÌ£ SÌriÌ„naÌ„raÌ„yanÌ£a MisÌrahÌ£"--Cover. 500 $a Added title page in English. 504 $a Includes bibliographical references. 650 0 $a Sanskrit language $x Grammar. 650 0 $a Sanskrit language $x Accents and accentuation. 700 02 $6 880-06 $a PaÌ„nÌ£ini. $t PaÌ„nÌ£iniÌ„yasÌiksÌ£aÌ„. 700 02 $6 880-07 $a PaÌ„nÌ£ini. $t LiṅgaÌ„nusÌaÌ„sana. 700 1 $6 880-08 $a MisÌra, SÌriÌ„naÌ„raÌ„yanÌ£a. 740 02 $6 880-09 $a PaÌ„nÌ£iniÌ„yasÌiksÌ£aÌ„. 740 02 $6 880-10 $a LiṅgaÌ„nusÌaÌ„sana. 880 0 $6 100-01 $a पाणिनी. 880 10 $6 240-00 $a अष्टाध्यायी 880 10 $6 245-02 $a अष्टाध्यायीसूत्रपाठः : $b पाणिणीयशिक्षा-लिङ्गानुशासनसहितश्र्च / $c महर्षिपाणिनिप्रणीतः ; उपोद्घातलेखकः श्रीनारायण मिश्रः. 880 $6 250-03 $a 1. संस्करण. 880 $6 260-04 $a वाराणसी ; $a दिल्ली : $b चौखम्भा ओरियन्टालिया ; $a वाराणसी : $b अन्य प्राप्तिस्थान, चौखम्भा विश्वभारती, $c 1977. 880 0 $6 440-05 $a गोकुलदास संस्कृत ग्रन्थमाला ; $v 29 880 02 $6 700-06 $a पाणिनी. $t पाणिणीयशिक्षा 880 02 $6 700-07 $a पाणिनी. $t लिङ्गानुशासन. 880 1 $6 700-08 $a मिश्र, श्रीनारायण. 880 02 $6 740-09 $a पाणिणीयशिक्षा. 880 02 $6 740-10 $a लिङ्गानुशासन. 994 $a C0 $b LNN 02913cam a2200433Ia 4500 001 ocm44944167 003 OCoLC 005 20080328102918.0 008 000906s2000 ilua 000 0 tam d 040 $a OCO $c OCO $d OCL $d OCLCQ $d TEF 020 $a 0967621208 : $c $24.95 020 $a 9780967621203 035 $a (OCoLC)44944167 041 1 $a tameng $h tam 050 4 $a PL4758.9.T5 $b T5 082 04 $a 894.811 $b T597t 049 $a LNNA 100 0 $a TiruvalÌ£lÌ£uvar. 240 10 $6 880-01 $a Thirukku ral. $l Tamil & English 245 10 $6 880-02 $a Thirukkural : $b Thamizh Marai = Tirukkural : the Holy Scripture / $c [by Tiruvalluvar ; English translation by P.S. Sundaram.]. 250 $a 1st ed. 260 $a Woodridge, Ill. : $b International Tamil Language Foundation, $c c2000. 300 $a 1813 p. : $b ill. (some col.) ; $c 20 cm. 500 $a Tamil text, with English translation. 500 $a "An edition of this translation was published by Penguin Books in 1991." 500 $a Section 2 and section 3, English translation from Tamil by R. Natarajan. 546 $a Text in Tamil and English. 500 $a Non-Latin script record. 600 00 $a TiruvalÌ£lÌ£uvar. 650 0 $a Tamil literature $v Translations into English. 650 0 $a Tamil language materials $x Bilingual. 740 02 $a Handbook of Tamil culture and heritage. 740 02 $a Tamils guide to future. 880 10 $6 240-01 $a திரூக்கு றள். $l Tamil & English 880 10 $6 245-02 $a திரூக்குறள் : $b தமிழ் மறை = Tirukkural : the Holy Scripture / $c [by Tiruvalluvar ; English translation by P.S. Sundaram.] 880 0 $6 505-00 $a Section 1: திரூக்குறள் : Tirukkural -- Section 2: தறிழ்ப் பண்பாட்டூக் கையேடூ : The handbook of Tamil culture and heritage -- Section 3: தமிழின எதிர்கால வழிகாட்டி : Tamils guide to future. 880 02 $6 740-00 $a தமிழ்ப் பண்பாட்டூக் கையேடூ : The handbook of Tamil culture and heritage. 880 02 $6 740-00 $a தமிழின எதிர்கால வழிகாட்டி : Tamils guide to future. 994 $a C0 $b LNN 01358cam a2200301Ia 4500 001 ocm62425106 003 OCoLC 005 20080328102918.0 008 051203s2002 th 000 f thaod 040 $a TEF $c TEF $d LNQ $d OCL 020 $a 9749204808 020 $a 9789749204801 035 $a (OCoLC)62425106 090 $a PL4209.D837 $b P57 2002 049 $a LNNA 100 0 $6 880-01 $a DuÌ„angtawan. 245 10 $6 880-02 $a PhracÌŒhan sǣnkon / $c DuÌ„angtawan. 250 $6 880-03 $a Phim khrang thiÌ„ 3. 260 $6 880-04 $a Krung TheÌ„p : $b Phimkham Samnakphim, $c 2545 [2002] 300 $a 154 p. ; $c 21 cm. 500 $a Novel. 546 $a In Thai. 655 7 $a Humorous fiction. $2 gsafd 880 0 $6 100-01 $a ดวงตะวัน. 880 10 $6 245-02 $a พระจันทร์แสนกล / $c ดวงตะวัน. 880 $6 250-03 $a พิมพ์ครั้งที่ 3. 880 $6 260-04 $a กรุงเทพฯ : $b พิมพ์คำ สานักพิมพ์, $c 2545. 994 $a C0 $b LNN 05353cam a2200409 a 4500 001 14876782 005 20071121181842.0 008 990326s1997 ai a b 001 0 armo 035 $a (Uk)006855813 906 $a p $b cbc $c undeter $d u $e ncip $f 20 $g y-nonroman 010 $a 99189840 040 $a DLC $b eng $c DLC $d DLC-R $d Uk 043 $a a-ai--- $a a-tu--- 050 00 $a BX121 $b .S63 1997 100 1 $6 880-01 $a Smbatyantsʿ, Artak, $c Episkopos, $d 1876-1937 245 10 $6 880-02 $a Artak Episkopos Smbatyantsʿ (Taushetsʿi) : hogevor, grakan, patma-banasirakan gortsuneutʿyuneÌŒ ev gndakaharutʿyuneÌŒ, 1876-1937 tʿtʿ. / $c kazmetsʿ Sandro Behbudyan. 260 $6 880-03 $a Erevan : $b "Anahit", $c 1997. 300 $a 691 p. : $b ill. ; $c 27 cm. 440 0 $6 880-04 $a Vaveragrer Hay Ekeghetsʿu patmutʿyan ; $v girkʿ 3 500 $6 880-05 $a At head of title: Hayastani Hanrapetutʿyan KarÌ£avarutʿyann arÌ£eÌŒntʿer. Arkhivayin Gortsi Varchʿutʿyun. Arvesti, Grakanutʿyan ev Mamuli Pʿastatʿghtʿeri Petakan Kentronakan Arkhiv. 504 $a Includes bibliographical references and indexes. 600 10 $6 880-06 $a Smbatyantsʿ, Artak, $c Episkopos, $d 1876-1937 610 20 $6 880-07 $a Armenian Church $x History $v Sources. 650 0 $a Armenians $z Turkey. 651 0 $a Armenia $x History $y 1801-1900 $v Sources. 651 0 $a Armenia $x History $y 1901- $v Sources. 700 1 $6 880-08 $a Behbudyan, Sandro $q (Sandro Artashesi), $d 1934- 852 41 $a British Library $b OC $j HEC.1994.a.294/3 880 1 $6 100-01 / $a Սմբատյանց, Արտակ, $c Եբիսկոպոս, $d 1876-1937. 880 10 $6 245-02 / $a Արտակ Եբիսկոպոս Սմբատյանց (Տաուշեցի) : հոգեվոր, գրական պատմա-բանասիրական գործունեությունը եվ գնդակահարությունը, 1876-1937 թթ. / $c կազմեց Սանդրո Բեհբության. 880 $6 260-03 / $a Երեվան : $b «Անահիտ», $c 1997. 880 0 $6 440-04 / $a Վավերագրեր Հայ Եկեղեցու պատմության ; $v գիրք 3 880 $6 500-05 / $a Տիտղոսի գլուխ: Հայաստանի Հանրապետության Կառավարության առընթեր. Արխիվային Գործի Վարչություն. Արվեստի, Գրականության եվ Մամուլի Բաստաթղթերի Պետական Կենտրոնական Արխիվ. 880 10 $6 600-06 / $a Սմբատյանց, Արտակ, $c Եբիսկոպոս, $d 1876-1937. 880 20 $6 610-07 / $a Հայաստանեայց Ս. Եկեղեցի $x Պատմութիւն $v Աղբիւրներ. 880 1 $6 700-08 / $a Բեհբության, Սանդրո, $q (Սանդրո Արտաշեսի), $d 1934- 985 $a armenian LC 02251 am a2200349 a 4500 001 14876783 005 20071121181846.0 008 040502m19461951sy ac 000 0 arm 035 $a (Uk)006881105 906 $a p $b cbc $c undeter $d u $e ncip $f 20 $g y-nonroman 010 $a 2003207810 035 $a (OCoLC)ocm51506679 040 $a DLC $b eng $c DLC $d OCoLC $d Uk 043 $a a-sy--- 050 00 $a BV4539.A75 $b M36 245 00 $6 880-01 $a Mananay : $b taregrkʿoyk. 260 $6 880-02 $a HaleÌ„p : $b Hratarakutʿiwn Hogewor Eghbarutʿean Eritasardatsʿ, $c 1946-1951 300 $a 2 v. : $b ill., ports. ; $c 23 cm. 505 0 $a [1]. 1946, 5-6. 1950-1951. 610 20 $6 880-03 $a Hogewor Eghbayrutʿiwn Eritasardatsʿ. 650 0 $a Armenians $x Religious life $z Syria. 650 0 $a Almanacs, Armenian $z Syria. 650 0 $a Youth $x Religious life $z Syria. 650 0 $a Armenians $z Syria $x Social life and customs. 650 0 $a Armenians $z Lebanon $x Social life and customs. 710 2 $6 880-04 $a Hogewor Eghbayrutʿiwn Eritasardatsʿ. 852 41 $a British Library $b OC $j HEC.2002.a.492 880 00 $6 245-01 / $a Մանանայ : $b տարեգրքոյկ. 880 $6 260-02 / $a Հալէպ : $b Հրատարակութիւն Հոգեւոր Եղբայրութեան Երիտասրդաց, $c 1946-1951. 880 20 $6 610-03 / $a Հոգեւոր Եղբայրութիւն Երիտասրդաց. 880 2 $6 710-04 / $a Հոգեւոր Եղբայրութիւն Երիտասրդաց. 985 $a armenian LC 02855cab a2200385 a 4500 001 14877410 005 20071121185010.0 008 040502m18971900enkmr|p 0 z0arm 035 $a (Uk)002848266 906 $a p $b cbc $c undeter $d u $e ncip $f 20 $g y-nonroman 010 $a 2007970004 019 x $a 2532250240 040 $a Uk $b eng $c Uk 245 00 $6 880-01 $a Mart : $b [amsatʿertʿ, oÌ„rgan Hnchʿakean Kusaktsʿutʿean]. 246 3 $a Mard 260 $6 880-02 $a London : $b [Sotsʿial Demokrat Hnchʿakean Kusaktsʿutʿiwn], $c 1897-1900. 300 $a v. ; $c 44 cm. 500 $a "Battle": an Armenian political newspaper. 500 $a "Mart" published after 1897, as "Hnchʿak" could not be due to legal proceedings. 505 0 $a I year, no. 1 (15 Apr., 1897)-10 (10 Apr., 1898); II year, no. 11 (7 May, 1898)-16 (Mar., 1899); III year, no. 17 (Aug., 1899)-27 (Oct., 1900) 610 20 $6 880-03 $a Sotsʿial Demokrat Hnchʿakean Kusaktsʿutʿiwn 650 0 $a Armenian periodicals. 650 0 $a Armenians $x Politics and government. 651 0 $a Armenia $x Politics and government. 651 0 $a Armenia $x History $y 1801-1900. 655 4 $a Periodical publications.- London 710 2 $6 880-04 $a Sotsʿial Demokrat Hnchʿakean Kusaktsʿutʿiwn 740 0 $6 880-05 $a Hnchʿak. 852 41 $a British Library $b HMNTS $j OP.411 880 00 $6 245-01 / $a Մարտ : $b [ամսաթերթ, օրգան Հնչակեան Կուսակցութեան]. 880 $6 260-02 / $a Լոնդոն : $b [Սոցիալ Դեմոկրատ Հնչակեան Կուսակցութիւն], $c 1897-1900. 880 20 $6 610-03 / $a Սոցիալ Դեմոկրատ Հնչակեան Կուսակցութիւն. 880 2 $6 710-04 / $a Սոցիալ Դեմոկրատ Հնչակեան Կուսակցութիւն. 880 0 $6 740-05 / $a Հնչակ. 985 $a armenian 05195cab a2200601 a 4500 001 14877413 005 20071121185021.0 008 000316d18551865fr er p 0 z0armod 035 $a (Uk)002863571 906 $a p $b cbc $c undeter $d u $e ncip $f 20 $g y-nonroman 010 $a 2007970007 019 x $a 2541830122 035 $a (OCoLC)43646516 040 $a Uk $b eng $c Uk 041 1 $a arm $a fre $a rus $h arm 043 $a a-ai--- $a e------ 245 00 $6 880-01 $a Maseatsʿ aghawni : $b awetaber Hayastaneaytsʿ / $c [khmb. GabrieÌ„l Ayvazeantsʿ]. 246 15 $a Colombe du Massis 246 15 $a Messager de l'ArmeÌnie 246 13 $6 880-02 $a Maseatsʿ aghawni awetaber Hayastaneaytsʿ 246 14 $6 880-03 $a Maseatsʿ aghawni ew Tsiatsan Hayastaneaytsʿ $f 246 30 $6 880-04 $a Tsiatsan Hayastaneaytsʿ $f 246 30 $6 880-05 $a Awetaber Hayastaneaytsʿ 260 $6 880-06 $a Pʿariz : $b [Khmbagir ew hratarakichʿ GabrieÌ„l Ayvazeantsʿ], $c 1855- $e (Paris : $f Imp. W. Remquet) 300 $a v. : $b ill., ports. ; $c 32 cm. 310 $a Biweekly, $b <1 Sept. 1861-> 321 $a Monthly, $b Jan. 1855-> 362 0 $6 880-07 $a 1. tari, tʿiw 1 (Hunuar 1855)- 362 1 $a Ceased in 1865. 500 $6 880-08 $a Imprint varies: Paris : i Granotsʿi Chaniki Aramean, Jan. 1856-> ; Theodosia : Khalipean Usumnaran, 500 $6 880-09 $a Latest issue consulted: 6. tari, tʿiw 17 (15 Sept. 1861) 505 0 $a Vol. I (1855); vol. II (1856); vol. III (1857); vol. VI, 1-8 (1861) 515 $a Not published in 1859. 546 $a In Armenian and French. 650 0 $a Armenians $v Periodicals. 650 0 $a Armenians $z Foreign countries $v Periodicals. 650 0 $a Armenians $v Biography $v Periodicals. 651 0 $a Armenia $v Periodicals. 651 0 $a Europe $v 19th century $v Periodicals. 655 4 $a Periodical publications.- Paris 700 1 $6 880-10 $a Ayvazovskʿi, GabrieÌ„l, $d 1812-1880. 852 41 $a British Library $b OC $j 17070.g.5. 880 00 $6 245-01 / $a Մասեաց աղաւնի : $b աւետաբեր Հայաստանեայց / $c [խմբ. Գաբրիէլ Այվազեանց]. 880 13 $6 246-02 / $a Մասեաց աղաւնի աւետաբեր Հայաստանեայց 880 14 $6 246-03 / $a Մասեաց աղաւնի եւ Ծիածան Հայաստանեայց $f <Սեպտ. 1861-> 880 30 $6 246-04 / $a Ծիածան Հայաստանեայց $f <Սեպտ. 1861-> 880 30 $6 246-05 / $a Աւետաբեր Հայաստանեայց 880 $6 260-06 / $a Փարիզ : $b [Խմբագիր և հրատարակիչ Գաբրիէլ Այվազեանց], $c 1855- $e (Paris : $f Imp. W. Remquet) 880 0 $6 362-07 / $a 1. տարի, թիւ 1 (Յունուար 1855)- 880 $6 500-08 / $a Տարբեր հրատ.: Փարիզ : ի Գրանոցի Ճանիկի Արամեան, Յունուար 1856-> ; Թեոդոսիա : Խալիպեան Ուսումնարան, <Սեպտ. 1861-> 880 $6 500-09 / $a Քննուած վերջին թիւ: 6. տարի, թիւ 17 (15 Սեպտ. 1861) 880 1 $6 700-10 / $a Այվազեանց, Գաբրիէլ $d 1812-1880. 985 $a armenian 03142 ab a2200349 a 4500 001 14877417 005 20071121185036.0 008 040502m18121816it wu|p 0 a0arm 035 $a (Uk)002870975 906 $a p $b cbc $c undeter $d u $e ncip $f 20 $g y-nonroman 010 $a 2007970012 019 x $a 2543960295 040 $a Uk $b eng $c Uk 245 00 $6 880-01 $a Ditak Biwzandean : $b shabatʿatʿertʿ apa erkshapatʿatʿertʿ, patmutʿiwn kʿaghakʿagan u paterazmakan, banasirakan, ekeghetsakan / $c khmb. Grigor Gaparachean, M. Pʿiwskiwlean, M. Jakhjakhean. 246 3 $a Tidag Piwzantean 260 $6 880-02 $a i Venetik : $b i Vans Srboyn Ghazaru, $c 1812-1816. 300 $a v. ; $c 23 cm. 500 $a Began 1808; ceased 1816. 650 0 $a Armenians $v Periodicals. 651 0 $a Europe $x History $y 1789-1815 $v Periodicals. 651 0 $a Europe $x Politics and government $y 1789-1915 $v Periodicals. 651 0 $a France $x History $y Consulate and First Empire, 1799-1815 $v Periodicals. 700 1 $6 880-03 $a Karapetean, Grigor KhaparÌ£achi 700 1 $6 880-04 $a Pʿiwskiwlean, M. 700 1 $6 880-05 $a Jakhjakhean, ManueÌ„l. 852 41 $a British Library $b OC $j 17070.d.3. 880 00 $6 245-01 / $a Դիտակ Բիւզանդեան : $b շաբաթաթերթ ապա երկշաբաթաթերթ, պատմութիւն քաղաքական ու պատերազմական, բանասիրական, եկեղեցական / $c խմբ. Գրիգոր Գապարաճեան, Մ. Փիւսկիւլեան, Մ. Ջախջախեան. 880 $6 260-02 / $a ի Վենետիկ : $b ի Վանս Սրբոյն Ղազարու, $c 1812-1816. 880 1 $6 700-03 / $a Կարապետեան, Գրիգոր Խապառաճի. 880 1 $6 700-04 / $a Փիւսկիւլեան, Մ. 880 1 $6 700-05 / $a Ջախջախեան, Մանուէլ. 985 $a armenian 02797cam a2200325 a 4500 001 14877418 005 20071121185039.0 008 040502m19481961ai acf b 000 0darm 035 $a (Uk)006842308 906 $a p $b cbc $c undeter $d u $e ncip $f 20 $g y-nonroman 010 $a 2007970013 040 $a Uk $b eng $c Uk 100 1 $6 880-01 $a Abovyan, Khachʿatur, $d 1805-1848 240 10 $a Works. $f 1948 245 10 $6 880-02 $a Erkeri liakatar zhoghovatsu utʿ hatorov / $c Kh. Abovyan ; [khmb. kolegia, Av. Isahakyan ... [et al.]]. 246 15 $6 880-03 $a Polnoe sobranie sochineniiÌŒ v vosʹmi tomakh 260 $6 880-04 $a Erevan : $b HSSRÌ£ Gitutʿyunneri Akademiai Hratarakchʿutʿyun, $c 1948-1961. 300 $a 8 v. in 10 books : $b ill., port. ; $c 26 cm. 500 $a Illustrated end-papers. 650 0 $a Armenian literature. 700 1 $6 880-05 $a Isahakyan, Avetikʿ, $d 1875-1957 710 2 $6 880-06 $a M. Abeghyani Anvan GrakanutÊ»yan Institut. 852 41 $a British Library $b OC $j 17046.h.1 880 1 $6 100-01 / $a Աբովյան, Խաչատուր, $d 1805-1848. 880 10 $6 245-02 / $a Երկերի լիակատար ժողովածու ութ հատորով / $c Խ. Աբովյան ; [խմբ. կոլեգիա Ավ. Իսահակյան ... [և ուրշն.]]. 880 15 $6 246-03 / $a Полное Ñобрание Ñочинений в воÑьми томах 880 $6 260-04 / $a Երեվան : $b ՀՍՍՌ Գիտությունների Ակադեմիաի Հրատարակչություն, $c 1948-1961. 880 1 $6 700-05 / $a Իսահակյան, Ավետիք, $d 1875-1957. 880 2 $6 710-06 / $a Մ. Աբեղյանի Անվան Գրականության Ինստիտուտ. 985 $a armenian 01512cab a2200301 a 4500 001 14879015 005 20071203081856.0 008 040502m18641877tu mr|p 0 z0arm 035 $a (Uk)002824493 906 $a p $b cbc $c undeter $d u $e ncip $f 20 $g y-nonroman 010 $a 2007970001 019 x $a 2520240032 040 $a Uk $b eng $c Uk 245 00 $6 880-01 $a Hoys : $b [droÌ„shak hayreneats, amsagir banasirakan]. 246 3 $a Huys 246 3 $a Yuys 260 $6 880-02 $a Armash : $b [Armashi Vankʿ], $c 1864-1877. 300 $a v. ; $c 23 cm. 500 $a Hoys. “Hope,†a monthly magazine of literature in modern Armenian, Western dialect, printed at the Convent of the Mother of God at Armash. 505 0 $a Vol. I, 1-12 (1864-1865), II, 13-24 (1865-1866) 650 0 $a Armenian literature $v Periodicals. 650 0 $a Armenian language $v Periodicals. 650 0 $a Armenians $x Religious life. 655 4 $a Periodical publications.- Armash 852 41 $a British Library $b OC $j 17070.g.3. 880 00 $6 245-01 / $a Յոյս : $b դրօշակ հայրենեաց, ամսագիր բանասիրական]. 880 $6 260-02 / $a Արմաշ : $b [Արմաշի Վանք], $c 1864-1877. 985 $a armenian2 yaz-4.2.30/test/marc4.marc0000644000175000017500000000163011741237740012163 000000000000000091400914naa 2200337 45 001001700000004000900017008002400026009001000050041000800060041000800068097000700076245003300083300002600116557003300142630001600175630001300191633001000204633000900214648006100223648001600284648005400300J01000600354BAS000500360LKR004200365CAT003000407CAT003000437CAT003000467CAT003900497CAT002600536UID001400562 aa00001508fa airn a1991bxxlnortav9 aagxx anor deng00a06 aByfornyelse ved Ibsen-Ringen bfarvefotobplanbsnit aByggekunstj1991v1/2k41-45 fbyfornyelse fsanering fNorge fOslo aTelje Torp Aasen ArkitektkontorcKristian Augustsgate 7B aEng, Dagfin Granlund, TomcKristian AugustsgatecPilestredet 19 aa 20 aITMlARK50b0000145y1991i1/2k41-45 abc20020111lARK01h2002 abc20020111lARK01h2116 abc20021002lARK01h1000 aICLLOADb00c20021122lARK01h1948 c20030618lARK01h1330 aa00001508 yaz-4.2.30/test/marc4.xml.marc0000644000175000017500000000003211741237740012755 00000000000000000260091a2200025003370 yaz-4.2.30/test/marc3.xml.marc0000644000175000017500000000162211741237740012762 0000000000000000914naa a2200337 450 001001700000004000900017008002400026009001000050041000800060041000800068097000700076245003300083300002600116557003300142630001600175630001300191633001000204633000900214648006100223648001600284648005400300J01000600354BAS000500360LKR004200365CAT003000407CAT003000437CAT003000467CAT003900497CAT002600536UID001400562 aa00001508fa airn a1991bxxlnortav9 aagxx anor deng00a06 aByfornyelse ved Ibsen-Ringen bfarvefotobplanbsnit aByggekunstj1991v1/2k41-45 fbyfornyelse fsanering fNorge fOslo aTelje Torp Aasen ArkitektkontorcKristian Augustsgate 7B aEng, Dagfin ranlund, TomcKristian AugustsgatecPilestredet 19 aa 0 aITMlARK50b0000145y1991i1/2k41-45 abc20020111lARK01h2002 abc20020111lARK01h2116 abc20021002lARK01h1000 aICLLOADb00c20021122lARK01h1948 c20030618lARK01h1330 aa00001508yaz-4.2.30/test/marc2.xml.marc0000644000175000017500000000214111741237740012756 0000000000000001121nam0a32002171 450 001002800000004001000028008002800038009001100066039000900077100001900086245005900105260003300164300001000197512007300207531001400280538001900294652001500313666004900328795050600377795002000883000a9 182 502 3b710100fa000rcae000tsufa1995bgblengv0000asgxc000abef000aMimmshGarnet000aCry babyaWarm and soulfuleGarnet Mimms ... [et al.]000aBury St. EdmundsbBGOc1995000n1 cd000aIndspilninger publiceret 1963 (Cry baby) og 1965 (Warm and soulful)000aIndhold:000fBGOgBGOCD268000m78.794v4000msoulmrhythm & bluesnvokalp1960-1969lUSA000Ã¥11aCry babyaNobody but youaUntil you were goneaAnytime you want meaSo closeaFor your precious loveaBaby don't you weepaA ¤quiet placeaCry to meaDon't change your heartaWanting youaThe ¤truth hurtsaI'll take good care of youaLooking for youaIt won't hurt (half as much)aIt was easier to hurt heraThinkin'aProve it to meaMore than a miracleaAs long as I have youaOne girlaThere goes my babyaIt's just a matter of timeaA ¤little bit of soapaLook awayaI'll make it up to you000Ã¥40y0a1 girlyaz-4.2.30/test/marc7.marc0000644000175000017500000000605211741237740012171 0000000000000003114cam 2200349 i 4500001001300000003000400013005001700017008004100034035001000075035001000085035001000095040001300105906004500118010001700163245005200180260002100232300002100253500004300274500016800317500019000485500015500675500018600830500019301016500023801209500022301447500020801670500016801878500020702046500020902253500016102462500014102623 77123332 DLC20051218154744.0981008b2001 ilu 000 0 eng  a57779 a90490 a93202 aDLCcDLC a0bundcorignewduencipf19gy-gencatlg a 77123332 00aVoyager Diacritic test -- New input 001 (SBIE). any :bny,c2001. a100 p. ;c12 cm. aNew copy imported from file (8/12/99). aVOYAGER COLUMN 0 (NEW): Degree sign (À); Phono Copyright mark (Â); Copyright mark (Ã); Sharp (Ä); Inverted Question mark (Å); Inverted Exclamation mark (Æ). aVOYAGER COLUMN 1: Script L (Á); Polish L (¡); Scandanavian O (¢); D with Crossbar (£); Icelandic Thorn (¤); AE Digraph (¥); OE Digraph (¦); Miagkii Znak (§); Dot at Midline (¨). aVOYAGER COLUMN 2: Musical Flat (©); Patent Mark (ª); Plus or Minus («); O Hook (¬); U Hook (­); Alif (®); alpha gas; Ayn (°); Polish l (±). aVOYAGER COLUMN 3: Scandanavian o (²); d with crossbar (³); Icelandic Thorn (´); ae Digraph (µ); oe Digraph (¶); Tverdii Znak (·); Turkish i (¸); British Pound (¹); eth (º). aVOYAGER COLUMN 4: Dagger (DO NOT USE); o Hook (¼); u Hook (½); Beta gbs; Gamma gcs; Superscript 0 (p0s); Superscript 1 (p1s); Superscript 2 (p2s); Superscript 3 (p3s). aVOYAGER COLUMN 5: Superscript 4 (p4s); Superscript 5 (p5s); Superscript 6 (p6s); Superscript 7 (p7s); Superscript 8 (p8s); Superscript 9 (p9s); Superscript + (p+s); Superscript - (p-s); Superscript ( (p(s). aVOYAGER COLUMN 6: Superscript ) (p)s); Subscript 0 (b0s); Subscript 1 (b1s); Subscript 2 (b2s); Subscript 3 (b3s); Subscript 4 (b4s); Subscript 5 (b5s); Subscript 6 (b6s); Subscript 7 (b7s). aVOYAGER COLUMN 7: Subscript 8 (b8s); Subscript 9 (b9s); Subscript + (b+s); Subscript - (b-s); Subscript ( (b(s); Subscript ) (b)s); Pseudo Question Mark (ào); Grave (áo); Acute (âo). aVOYAGER COLUMN 8: Circumflex (ão); Tilde (äo); Macron (åo); Breve (æo); Superior Dot (ço); Umlaut (èo); Hacek (éo); Circle Above (êo); Ligature left (ëo). aVOYAGER COLUMN 9: Ligature right (ìo) ; High Comma off center (ío); Double Acute (îo); Candrabindu (ïo); Cedilla (ðo); Right Hook (ño); Dot Below (òo); Double Dot Below (óo); Circle Below (ôo). aVOYAGER COLUMN 10: Double Underscore (õo); Underscore (öo); Left Hook (÷o); Right Cedilla (øo); Upadhmaniya (ùo); Double Tilde 1st half (úo); Double Tilde 2nd half (ûo) ; High Comma centered (þo). aVOYAGER PC Keyboard: Spacing Circumflex (^); Spacing Underscore (_); Spacing Grave (`); Open Curly Bracket ({); Close Curly Bracket (}); Spacing Tilde (~). aStandard PC Keyboard: 1234567890-= !@#$%^&*()_+ qwertyuiop[]\ QWERTYUIOP{}| asdfghjkl;' ASDFGHJKL:" zxcvbnm,./ ZXCVBNM<>?yaz-4.2.30/test/test_odrcodec.h0000644000175000017500000000121711733064253013302 00000000000000/** \file test_odrcodec.h \brief ASN.1 Module test_odrcodec Generated automatically by YAZ ASN.1 Compiler 0.4 */ #ifndef test_odrcodec_H #define test_odrcodec_H #include #ifdef __cplusplus extern "C" { #endif typedef struct Yc_MySequence Yc_MySequence; YAZ_EXPORT int yc_MySequence(ODR o, Yc_MySequence **p, int opt, const char *name); #ifdef __cplusplus } #endif #ifdef __cplusplus extern "C" { #endif struct Yc_MySequence { Odr_int *first; Odr_oct *second; Odr_bool *third; Odr_null *fourth; #define YC_MySequence_enum1 0 #define YC_MySequence_enum2 1 Odr_int *fifth; Odr_oid *myoid; }; #ifdef __cplusplus } #endif #endif yaz-4.2.30/test/xml2marc6.xml.marc0000644000175000017500000000055611741237740013575 0000000000000000366nam a22001698a 4500001001300000003000400013005001700017008004100034010001700075040001300092050001200105100001700117245003000134260001200164263000900176300001100185 11224466 DLC00000000000000.0910710c19910701nju 00010 eng  a 11224466  aDLCcDLC00a123-xyz10aJack Collins10aHow to program a computer1 aPenguin a8710 ap. cm.yaz-4.2.30/test/test_log_thread.c0000644000175000017500000000306411733047144013625 00000000000000/* This file is part of the YAZ toolkit. * Copyright (C) 1995-2012 Index Data * See the file LICENSE for details. */ #if HAVE_CONFIG_H #include #endif #include #include #include #include #if YAZ_POSIX_THREADS #include static void *t_loop2(void *vp) { int i, sz = 10; for (i = 0; i 00492nam a22001455a 4500 000277485 20051026111436.0 050413s1894 gr 000 0 gre d ΜαÏοÏδης, Κωνσταντίνος Ιω Ελληνικόν κÏυπτογÏαφικόν λεξικόν / Κωνστ. Ι. ΜαÏοÏδης. εκδ. Αθήνα, 1894. 248 σελ. Greek language, Modern Dialects Dictionaries Cryptography. yaz-4.2.30/test/tmarc3.xml.marc0000644000175000017500000000162211741237740013146 0000000000000000914naa a2200337 450 001001700000004000900017008002400026009001000050041000800060041000800068097000700076245003300083300002600116557003300142630001600175630001300191633001000204633000900214648006100223648001600284648005400300J01000600354BAS000500360LKR004200365CAT003000407CAT003000437CAT003000467CAT003900497CAT002600536UID001400562 aa00001508fa airn a1991bxxlnortav9 aagxx anor deng00a06 aByfornyelse ved Ibsen-Ringen bfarvefotobplanbsnit aByggekunstj1991v1/2k41-45 fbyfornyelse fsanering fNorge fOslo aTelje Torp Aasen ArkitektkontorcKristian Augustsgate 7B aEng, Dagfin ranlund, TomcKristian AugustsgatecPilestredet 19 aa 0 aITMlARK50b0000145y1991i1/2k41-45 abc20020111lARK01h2002 abc20020111lARK01h2116 abc20021002lARK01h1000 aICLLOADb00c20021122lARK01h1948 c20030618lARK01h1330 aa00001508yaz-4.2.30/test/tmarc7.xml.marc0000644000175000017500000000604511741237740013156 0000000000000003109cam a2200349 i 4500001001300000003000400013005001700017008004100034035001000075035001000085035001000095040001300105906004500118010001700163245005200180260002100232300002100253500004300274500017600317500020000493500016100693500019500854500017801049500022001227500020501447500019901652500017701851500021402028500021502242500016102457500014102618 77123332 DLC20051218154744.0981008b2001 ilu 000 0 eng  a57779 a90490 a93202 aDLCcDLC a0bundcorignewduencipf19gy-gencatlg a 77123332 00aVoyager Diacritic test -- New input 001 (SBIE). any :bny,c2001. a100 p. ;c12 cm. aNew copy imported from file (8/12/99). aVOYAGER COLUMN 0 (NEW): Degree sign (°); Phono Copyright mark (â„—); Copyright mark (©); Sharp (♯); Inverted Question mark (¿); Inverted Exclamation mark (¡). aVOYAGER COLUMN 1: Script L (â„“); Polish L (Å); Scandanavian O (Ø); D with Crossbar (Ä); Icelandic Thorn (Þ); AE Digraph (Æ); OE Digraph (Å’); Miagkii Znak (ʹ); Dot at Midline (·). aVOYAGER COLUMN 2: Musical Flat (â™­); Patent Mark (®); Plus or Minus (±); O Hook (Æ ); U Hook (Ư); Alif (ʼ); alpha α; Ayn (Ê»); Polish l (Å‚). aVOYAGER COLUMN 3: Scandanavian o (ø); d with crossbar (Ä‘); Icelandic Thorn (þ); ae Digraph (æ); oe Digraph (Å“); Tverdii Znak (ʺ); Turkish i (ı); British Pound (£); eth (ð). aVOYAGER COLUMN 4: Dagger (DO NOT USE); o Hook (Æ¡); u Hook (ư); Beta β; Gamma γ; Superscript 0 (â°); Superscript 1 (¹); Superscript 2 (²); Superscript 3 (³). aVOYAGER COLUMN 5: Superscript 4 (â´); Superscript 5 (âµ); Superscript 6 (â¶); Superscript 7 (â·); Superscript 8 (â¸); Superscript 9 (â¹); Superscript + (âº); Superscript - (â»); Superscript ( (â½). aVOYAGER COLUMN 6: Superscript ) (â¾); Subscript 0 (â‚€); Subscript 1 (â‚); Subscript 2 (â‚‚); Subscript 3 (₃); Subscript 4 (â‚„); Subscript 5 (â‚…); Subscript 6 (₆); Subscript 7 (₇). aVOYAGER COLUMN 7: Subscript 8 (₈); Subscript 9 (₉); Subscript + (₊); Subscript - (â‚‹); Subscript ( (â‚); Subscript ) (₎); Pseudo Question Mark (ỏ); Grave (oÌ€); Acute (oÌ). aVOYAGER COLUMN 8: Circumflex (oÌ‚); Tilde (õ); Macron (oÌ„); Breve (ŏ); Superior Dot (ȯ); Umlaut (ö); Hacek (oÌŒ); Circle Above (oÌŠ); Ligature left (oÍ¡). aVOYAGER COLUMN 9: Ligature right (o) ; High Comma off center (oÌ•); Double Acute (oÌ‹); Candrabindu (oÌ); Cedilla (o̧); Right Hook (ǫ); Dot Below (oÌ£); Double Dot Below (o̤); Circle Below (oÌ¥). aVOYAGER COLUMN 10: Double Underscore (o̳); Underscore (o̲); Left Hook (o̦); Right Cedilla (oÌœ); Upadhmaniya (oÌ®); Double Tilde 1st half (oÍ ); Double Tilde 2nd half (o) ; High Comma centered (oÌ“). aVOYAGER PC Keyboard: Spacing Circumflex (^); Spacing Underscore (_); Spacing Grave (`); Open Curly Bracket ({); Close Curly Bracket (}); Spacing Tilde (~). aStandard PC Keyboard: 1234567890-= !@#$%^&*()_+ qwertyuiop[]\ QWERTYUIOP{}| asdfghjkl;' ASDFGHJKL:" zxcvbnm,./ ZXCVBNM<>?yaz-4.2.30/test/test_sortspec.c0000644000175000017500000001542211733047144013360 00000000000000/* This file is part of the YAZ toolkit. * Copyright (C) 1995-2012 Index Data * See the file LICENSE for details. */ #if HAVE_CONFIG_H #include #endif #include #include #include #include #include static int cql(const char *arg, const char *expected_result) { ODR odr = odr_createmem(ODR_ENCODE); Z_SortKeySpecList *sort_spec = yaz_sort_spec(odr, arg); int ret = 0; if (!sort_spec) { yaz_log(YLOG_WARN, "yaz_sort_spec : parse error: %s", arg); } else { WRBUF w = wrbuf_alloc(); int r = yaz_sort_spec_to_cql(sort_spec, w); if (!expected_result && r) ret = 1; else if (expected_result && r == 0) { if (strcmp(wrbuf_cstr(w), expected_result) == 0) ret = 1; else { yaz_log(YLOG_WARN, "sort: diff: %s", arg); yaz_log(YLOG_WARN, " expected %s", expected_result); yaz_log(YLOG_WARN, " got %s", wrbuf_cstr(w)); } } else if (r) { yaz_log(YLOG_WARN, "sort: diff %s", arg); yaz_log(YLOG_WARN, " expected %s", expected_result); yaz_log(YLOG_WARN, " got error %d", r); } else if (r == 0) { yaz_log(YLOG_WARN, "sort: diff %s", arg); yaz_log(YLOG_WARN, " expected error"); yaz_log(YLOG_WARN, " got %s", wrbuf_cstr(w)); } wrbuf_destroy(w); } odr_destroy(odr); return ret; } static int type7(const char *arg, const char *expected_result) { ODR odr = odr_createmem(ODR_ENCODE); Z_SortKeySpecList *sort_spec = yaz_sort_spec(odr, arg); int ret = 0; if (!sort_spec) { yaz_log(YLOG_WARN, "yaz_sort_spec : parse error: %s", arg); } else { WRBUF w = wrbuf_alloc(); int r; wrbuf_puts(w, "q"); r = yaz_sort_spec_to_type7(sort_spec, w); if (!expected_result && r) ret = 1; else if (expected_result && r == 0) { if (strcmp(wrbuf_cstr(w), expected_result) == 0) ret = 1; else { yaz_log(YLOG_WARN, "sort: diff: %s", arg); yaz_log(YLOG_WARN, " expected %s", expected_result); yaz_log(YLOG_WARN, " got %s", wrbuf_cstr(w)); } } else if (r) { yaz_log(YLOG_WARN, "sort: diff %s", arg); yaz_log(YLOG_WARN, " expected %s", expected_result); yaz_log(YLOG_WARN, " got error %d", r); } else if (r == 0) { yaz_log(YLOG_WARN, "sort: diff %s", arg); yaz_log(YLOG_WARN, " expected error"); yaz_log(YLOG_WARN, " got %s", wrbuf_cstr(w)); } wrbuf_destroy(w); } odr_destroy(odr); return ret; } static int srw_sortkeys(const char *arg, const char *expected_result) { ODR odr = odr_createmem(ODR_ENCODE); Z_SortKeySpecList *sort_spec = yaz_sort_spec(odr, arg); int ret = 0; if (!sort_spec) { yaz_log(YLOG_WARN, "yaz_sort_spec : parse error: %s", arg); } else { WRBUF w = wrbuf_alloc(); int r = yaz_sort_spec_to_srw_sortkeys(sort_spec, w); if (!expected_result && r) ret = 1; else if (expected_result && r == 0) { if (strcmp(wrbuf_cstr(w), expected_result) == 0) ret = 1; else { yaz_log(YLOG_WARN, "sort: diff: %s", arg); yaz_log(YLOG_WARN, " expected %s", expected_result); yaz_log(YLOG_WARN, " got %s", wrbuf_cstr(w)); } } else if (r) { yaz_log(YLOG_WARN, "sort: diff %s", arg); yaz_log(YLOG_WARN, " expected %s", expected_result); yaz_log(YLOG_WARN, " got error %d", r); } else if (r == 0) { yaz_log(YLOG_WARN, "sort: diff %s", arg); yaz_log(YLOG_WARN, " expected error"); yaz_log(YLOG_WARN, " got %s", wrbuf_cstr(w)); } wrbuf_destroy(w); } odr_destroy(odr); return ret; } static int check_srw_sortkeys_to_sort_spec(const char *arg, const char *expected_result) { WRBUF w = wrbuf_alloc(); int ret = 0; int r = yaz_srw_sortkeys_to_sort_spec(arg, w); if (!expected_result && r) ret = 1; else if (expected_result && r == 0) { if (strcmp(wrbuf_cstr(w), expected_result) == 0) ret = 1; else { yaz_log(YLOG_WARN, "sort: diff: %s", arg); yaz_log(YLOG_WARN, " expected %s", expected_result); yaz_log(YLOG_WARN, " got %s", wrbuf_cstr(w)); } } else if (r) { yaz_log(YLOG_WARN, "sort: diff %s", arg); yaz_log(YLOG_WARN, " expected %s", expected_result); yaz_log(YLOG_WARN, " got error %d", r); } else if (r == 0) { yaz_log(YLOG_WARN, "sort: diff %s", arg); yaz_log(YLOG_WARN, " expected error"); yaz_log(YLOG_WARN, " got %s", wrbuf_cstr(w)); } wrbuf_destroy(w); return ret; } static void tst(void) { YAZ_CHECK(cql("title a", " SORTBY title/ascending/ignoreCase")); YAZ_CHECK(cql("title a date ds", " SORTBY title/ascending/ignoreCase" " date/descending/respectCase")); YAZ_CHECK(cql("1=4,2=3 a", 0)); YAZ_CHECK(cql("date a=1900", " SORTBY date/ascending/ignoreCase/missingValue=1900")); YAZ_CHECK(type7("title a", "@or q @attr 1=title @attr 7=1 0")); YAZ_CHECK(type7("title a date ds", "@or @or q @attr 1=title @attr 7=1 0" " @attr 1=date @attr 7=2 1")); YAZ_CHECK(type7("1=4,2=3 a", "@or q @attr 1=4 @attr 2=3 @attr 7=1 0")); YAZ_CHECK(type7("date a=1900", "@or q @attr 1=date @attr 7=1 0")); YAZ_CHECK(srw_sortkeys("title a", "title,,1,0,highValue")); YAZ_CHECK(srw_sortkeys("title a date ds", "title,,1,0,highValue " "date,,0,1,highValue")); YAZ_CHECK(srw_sortkeys("1=4,2=3 a", 0)); YAZ_CHECK(srw_sortkeys("date a=1900", "date,,1,0,1900")); YAZ_CHECK(check_srw_sortkeys_to_sort_spec( "date,,1,0,1900", "date ai=1900")); } int main(int argc, char **argv) { YAZ_CHECK_INIT(argc, argv); YAZ_CHECK_LOG(); tst(); YAZ_CHECK_TERM; } /* * Local variables: * c-basic-offset: 4 * c-file-style: "Stroustrup" * indent-tabs-mode: nil * End: * vim: shiftwidth=4 tabstop=8 expandtab */ yaz-4.2.30/test/marccol1.u8.2.lst0000644000175000017500000004714611654451754013253 0000000000000001127cam a2200277 a 4500 001 70813420 /AJ/r86 003 DLC 005 19871006084439.0 008 860826m19689999ja ab l00000 jpn 010 $a 70813420 /AJ/r86 035 $a (CStRLIN)DCLP86-B14482 040 $c NNC $d NNC $d DLC 043 $a a-ja--- 050 0 $a DS897.H325 $b H36 1968 066 $c $1 245 00 $6 880-01 $a Handa shishi. 260 0 $6 880-02 $a [Handa-shi] : $b Handa-shi, $c ShoÌ„wa 43-<59> [1968-<1984> 300 $a v. <1-5, 7-8> : $b ill. ; $c 22 cm. 500 $a Vol. 3 accompanied by Handa-shi chiiki chishitsuzu; v. 8, Handa-shi Otsukawa Asaiyama dashi kumiage zumen (1 folded) leaf). 505 1 $a [1]-[4] ShiryoÌ„ hen -- [5] Honbun hen -- [7] Bunkazai hen -- [8] Sairei minzoku hen 651 0 $6 880-03 $a Handa-shi (Japan) 651 0 $6 880-04 $a Handa-shi (Japan) $x History $x Sources. 880 00 $6 245-01/$1 $a åŠç”° 市誌. 880 0 $6 260-02/$1 $a [åŠç”°å¸‚] : $b åŠç”°å¸‚, $c 昭和 43-<59> [1968-<1984> 880 4 $6 651-03/$1 $a åŠç”°å¸‚ (Japan) 880 4 $6 651-04/$1 $a åŠç”°å¸‚ (Japan) $x History $x Sources. 00885nam a2200229 a 4500 001 75840215 /ACN/r86 003 DLC 005 19870219000000.0 008 860606m19009999ch 00001 chi 010 $a 75840215 /ACN/r86 035 $a (CStRLIN)DCLP86-B9742 050 0 $a PL3031.T32 $b L5 066 $c $1 245 00 $6 880-01 $a Li tsÊ»ung. 260 0 $6 880-02 $a [Kao-hsiung shih] : $b Wen hua yüan : $b Fa hsing so Sheng su chÊ»u pan she, $c 300 $a v. <4, pts 1-2; v. 5> in <3 > ; $c 22 cm. 500 $a Cover title. 650 0 $a Didactic fiction, Chinese $z Taiwan. 710 20 $6 880-03 $a Kao-hsiung shih wen hua yüan. 880 00 $6 245-01/$1 $a æ­·å¢. 880 0 $6 260-02/$1 $a [高雄市] : $b 文化院 : $b ç™¼è¡Œæ‰€ã€€è–æ›¸ã€€å‡ºç‰ˆç¤¾, $c <民國63-66 [1974-1977 > 880 20 $6 710-03/$1 $a 高雄市 文化院. 01054nam a2200277 a 4500 001 84226659 /ACN 003 DLC 005 19870219000000.0 008 860227s1983 cc ac b 00000dchi 010 $a 84226659 /ACN 035 $a (CStRLIN)DCLP86-B3400 050 0 $a NX90 $b .I18 1983 066 $c $1 082 0 $a 174/.97 $2 19 245 00 $6 880-01 $a I shu chia yü te yü. 250 $6 880-02 $a Ti 1 pan. 260 0 $6 880-03 $a ChÊ»eng-tu : $b Ssu-chÊ»uan jen min chÊ»u pan she : $b Ssu-chÊ»uan sheng hsin hua shu tien fa hsing, $c 1983. 300 $a 2, 3, 4, 244 p. : $b ill., ports. ; $c 19 cm. 440 0 $6 880-04 $a Te yü tsÊ»ung shu 504 $a Bibliography: p. 239-240. 650 0 $a Artists $x Anecdotes, facetiae, satire, etc. 650 0 $a Ethics $x Anecdotes, facetiae, satire, etc. 880 00 $6 245-01/$1 $a 艺术家 与 德育. 880 $6 250-02/$1 $a 第1版. 880 0 $6 260-03/$1 $a æˆéƒ½ : $b å››å·ã€€äººæ°‘ 出版社 : $b å››å·çœã€€æ–°åŽã€€ä¹¦åº— å‘行, $c 1983. 880 0 $6 440-04/$1 $a 德育 丛书 01390cam a2200349 a 4500 001 84231405 003 DLC 005 20001214140017.0 008 841203m19849999cc b 000 0 chi 010 $a 84231405 020 $c RMBY0.38 (v. 1) 035 $a (CStRLIN)DCLP84-B5184 040 $a DLC-R $c DLC-R $d DLC-R $d CStRLIN $d DLC 043 $a a-cc--- 050 00 $a JQ1519.A5 $b C47529 1984 066 $c $1 082 00 $a 324.251/075 $2 19 245 00 $6 880-01 $a Zheng dang xue xi cai liao / $c ben she bian. 250 $6 880-02 $a Di 1 ban. 260 $6 880-03 $a Shenyang : $b Liaoning ren min chu ban she : $b Liaoning sheng xin hua shu dian fa xing, $c 1984- 300 $a v. <1, 3-5, > ; $c 19 cm. 500 $a Colophon title also in pinyin: Zhengdang xuexi cailiao. 504 $a Includes bibliographical references. 610 20 $6 880-04 $a Zhongguo gong chan dang $x Party work. 710 2 $6 880-05 $a Liaoning ren min chu ban she. 740 0 $a Zhengdang xuexi cailiao. 880 00 $6 245-01/$1 $a æ•´å…šã€€å­¦ä¹ ã€€ææ–™ / $c 本社 编. 880 $6 250-02/$1 $a 第1版. 880 $6 260-03/$1 $a 沈阳 : $b è¾½å®ã€€äººæ°±ã€€å‡ºç‰ˆç¤¾ : $b è¾½å®çœã€€æ–°åŽã€€ä¹¦åº— å±è¡Œ, $c 1984- 880 24 $6 610-04/$1 $a 中国 共产党 $x Party work. 880 2 $6 710-05/$1 $a è¾½å®ã€€äººæ°±ã€€å‡ºç‰ˆç¤¾. 987 $a PINYIN $b CStRLIN $c 20001212 $d c $e 1.0 00953nam a2200241 a 4500 001 85174785 /ACN 003 DLC 005 19870219000000.0 008 860312s1983 cc a 00000 chi 010 $a 85174785 /ACN 035 $a (CStRLIN)DCLP86-B4377 043 $a a-cc-hp 050 0 $a GR336.H67 $b H6 1983 066 $c $1 082 0 $a 398.2/32/5115 $2 19 245 00 $6 880-01 $a Ho-pei min chien ku shih hsüan / $c [chÊ»a tÊ»u Chang Wen-hsüeh]. 250 $6 880-02 $a Hsin 1 pan. 260 0 $6 880-03 $a Shih-chia-chuang : $b Hua shan wen i chÊ»u pan she : $b Ho-pei sheng hsin hua shu tien fa hsing, $c 1983. 300 $a 2, 255 p. : $b ill. ; $c 19 cm. 650 0 $a Tales $z China $z Hopeh Province. 880 00 $6 245-01/$1 $a 河北 氱间 故事 选 / $c [æ’图 张 文学]. 880 $6 250-02/$1 $a æ–°1版. 880 0 $6 260-03/$1 $a 石家庄 : $b 花山 文艺 出版社 : $b 河北çœã€€æ–°è¯ã€€æ›¸åº— å±è¡Œ, $c 1983. 01219nam a2200325 a 4500 001 86116930 /ACN 003 DLC 005 19870219000000.0 008 860430s1984 cc b 00010 chi 010 $a 86116930 /ACN 020 $c RMBY1.00 035 $a (CStRLIN)DCLP86-B7190 050 0 $a PN45 $b .C436 1984 066 $c $1 082 0 $a 809 $2 19 100 10 $6 880-01 $a Chang, Hsin-chien. 245 10 $6 880-02 $a Wen hsüeh chi chÊ»u chih shih / $c Chang Hsin-chien. 250 $6 880-03 $a Ti 1 pan. 260 0 $6 880-04 $a Ho-fei shih : $b An-hui wen i chÊ»u pan she : $b An-hui sheng hsin hua shu tien fa hsing, $c 1984. 300 $a 196 p. ; $c 19 cm. 440 0 $6 880-05 $a ChÊ»ing nien wen hsüeh tsÊ»ung shu 500 $a Cover title also in pinyin: Wenxuejichuzhishi. 504 $a Includes bibliographies. 650 0 $a Literature. 740 01 $a Wenxuejichuzhishi. 880 10 $6 100-01/$1 $a 章 新建. 880 10 $6 245-02/$1 $a 文学 基础 知识 / $c 章 新建. 880 $6 250-03/$1 $a 第1版. 880 0 $6 260-04/$1 $a åˆè‚¥å¸‚ : $b 安徽 文艺 出版社 : $b 安徽çœã€€æ–°è¯ã€€æ›¸åº— å‘行, $c 1984. 880 0 $6 440-05/$1 $a é’年 文学 丛书 01516nam a2200301 a 4500 001 86117080 /ACN 003 DLC 005 19870219000000.0 008 860502s1985 cc ab b 00000 chi 010 $a 86117080 /ACN 020 $c RMBY2.30 035 $a (CStRLIN)DCLP86-B7475 043 $a a-cc--- 050 0 $a QE537.2.C6 $b S5 1985 066 $c $1 082 0 $a 551.2/2/09514 $2 19 245 00 $6 880-01 $a Shan Kan Ning ChÊ»ing ssu sheng (chÊ»ü) chÊ»iang ti chen mu lu : $b kung yüan [chÊ»ien] 1177 nien-kung yüan 1982 nien / $c Kuo chia ti chen chü Lan-chou ti chen yen chiu so. 250 $6 880-02 $a Ti 1 pan. 260 0 $6 880-03 $a Hsi-an : $b Shan-hsi kÊ»o hsüeh chi shu chÊ»u pan she : $b Shan-hsi sheng hsin hua shu tien fa hsing, $c 1985. 300 $a 2, 170 p. : $b ill., maps ; $c 26 cm. 504 $a Bibliography: p. 170. 650 0 $a Earthquakes $z China, Northwest $x Chronology. 710 20 $6 880-04 $a Kuo chia ti chen chü Lan-chou ti chen yen chiu so. 740 01 $a Shan Kan Ning ChÊ»ing 4 sheng (chÊ»ü) chÊ»iang ti chen mu lu. 880 00 $6 245-01/$1 $a 陕甘å®é’ 四çœ(区) 强 地震 目录 : $b 公元[å‰] 1177å¹´ï¼å…¬å…ƒ 1982å¹´ / $c 国家 地震局 兰州 地震 研究所. 880 $6 250-02/$1 $a 第1版. 880 0 $6 260-03/$1 $a 西安 : $b 陕西 秱学 技术 出版社 : $b 陕西çœã€€æ–°è¯ã€€æ›¸åº— å±è¡Œ, $c 1985. 880 20 $6 710-04/$1 $a 国家 地震局 兰州 地震 研究所. 01333cam a2200337 a 4500 001 86118651 /ACN/r88 003 DLC 005 19880830123434.0 008 860218s1985 ch d 00110 chi 010 $a 86118651 /ACN/r88 020 $c NT$260.00 035 $a (CStRLIN)DCLP86-B2669 041 0 $a chieng 050 0 $a SD126 $b .C473 1985 066 $c $1 082 0 $a 634.9/03/21 $2 19 100 10 $6 880-01 $a ChÊ»en, Ming-tsÊ»un. 245 10 $6 880-02 $a Sen lin hsüeh ming tzÊ»u tzÊ»u tien = $b English Chinese dictionary of forestry / $c ChÊ»en Ming-tsÊ»un, Huang Chin-hsien ho pien. 250 $6 880-03 $a ChÊ»u pan. 260 0 $6 880-04 $a TÊ»ai-pei shih : $b Ming shan chÊ»u pan she, $c min kuo 74 [1985] 300 $a 274 p. ; $c 20 cm. 500 $a Includes index. 650 0 $a Forests and forestry $x Dictionaries. 650 0 $a English language $x Dictionaries $x Chinese. 700 10 $6 880-05 $a Huang, Chin-hsien. 740 01 $a English Chinese dictionary of forestry. 880 10 $6 100-01/$1 $a 陳 銘æ±. 880 10 $6 245-02/$1 $a 森林學 å詞 辭典 = $b English Chinese dictionary of forestry / $c 陳 銘æ±, 黃 釱仙 åˆç·¨. 880 $6 250-03/$1 $a åˆç‰ˆ. 880 0 $6 260-04/$1 $a å°åŒ—市 : $b å山 出版社, $c 氱國74 [1985] 880 10 $6 700-05/$1 $a 黃 釱仙. 01051nam a2200289 a 4500 001 86118679 /ACN 003 DLC 005 19870219000000.0 008 860218s1985 ch 00011 chi 010 $a 86118679 /ACN 035 $a (CStRLIN)DCLP86-B2674 050 0 $a PL2865.H3 $b H84 1985 066 $c $1 082 0 $a 895.1/35 $2 19 100 10 $6 880-01 $a Huang, Hai, $d 1943- 245 10 $6 880-02 $a Hsing hsing ti hsiang lien / $c Huang Hai chu. 250 $6 880-03 $a ChÊ»u pan. 260 0 $6 880-04 $a TÊ»ai-pei shih : $b Huang kuan chÊ»u pan she, $c min kuo 74 [1985] 300 $a 297 p. ; $c 19 cm. 440 0 $6 880-05 $a Huang kuan tsÊ»ung shu ; $v ti 1143 chung 500 $a Short stories. 650 0 $a Science fiction, Chinese. 880 10 $6 100-01/$1 $a 黃 海, $d 1943- 880 10 $6 245-02/$1 $a 星星 的 項練 / $c 黃 海 著. 880 $6 250-03/$1 $a åˆç‰ˆ. 880 0 $6 260-04/$1 $a å°åŒ—市 : $b 皇冠 出版社, $c 民國74 [1985] 880 0 $6 440-05/$1 $a çš‡å† ã€€å¢æ›¸ ; $v 第1143種 01437cam a2200361 a 4500 001 86119726 003 DLC 005 20010412140706.0 008 860403s1985 cc af b 00000 chi 010 $a 86119726 020 $c RMBY3.90 035 $a (CStRLIN)DCLP86-B5782 040 $a DLC-R $c DLC-R $d DLC-R $d CStRLIN $d DLC-R 043 $a a-cc--- 050 00 $a DS751 $b .C4945 1985 066 $c $1 082 00 $a 951/.024 $2 19 245 00 $6 880-01 $a Jian ming Song shi / $c Zhou Baozhu, Chen Zhen zhu bian ; Zhou Baozhu ... [et al.] bian xie. 250 $6 880-02 $a Di 1 ban. 260 $6 880-03 $a Beijing : $b Ren min chu ban she : $b Xin hua shu dian fa xing, $c 1985. 300 $a 4, 5, 603 p., [12] p. of plates : $b ill. ; $c 21 cm. 500 $a Colophon title also in pinyin : Jianming Songshi. 504 $a Includes bibliographical references. 651 0 $a China $x History $y Song dynasty, 960-1279. 700 1 $6 880-04 $a Zhou, Baozhu. 700 1 $6 880-05 $a Chen, Zhen. 740 0 $a Jianming Songshi. 880 00 $6 245-01/$1 $a ç°¡æ˜Žã€€å®‹ã€€å² / $c 周 å®ç , 陈 振 主编 ; 周 å®ç  ... [et al.] 编写. 880 $6 250-02/$1 $a 第1版. 880 $6 260-03/$1 $a 北京 : $b 人民 出版社 : $b æ–°è¯ã€€æ›¸åº— å‘行, $c 1985. 880 1 $6 700-04/$1 $a 周 å®ç . 880 1 $6 700-05/$1 $a 陈 振. 987 $a PINYIN $b CStRLIN $c 20001214 $d c $e 1.0 01114nam a2200289 a 4500 001 86122256 /ACN 003 DLC 005 19870219000000.0 008 860303s1984 cc b 00010 chi 010 $a 86122256 /ACN 020 $c RMBY2.80 035 $a (CStRLIN)DCLP86-B3622 043 $a a-cc--- 050 0 $a PL2333 $b .L63 1984 066 $c $1 082 0 $a 895.1/15/09 $2 19 100 10 $6 880-01 $a Lo, Han-chÊ»ao. 245 10 $6 880-02 $a Chung-kuo hsien tai shih ko lun / $c [Lo Han-chÊ»ao]. 250 $6 880-03 $a Ti 1 pan. 260 0 $6 880-04 $a [Nan-ching shih] : $b Chiang-su jen min chÊ»u pan she : $b Chiang-su sheng hsin hua shu tien fa hsing, $c 1984. 300 $a 11, 411 p. ; $c 20 cm. 504 $a Includes bibliographical references. 650 0 $a Chinese poetry $y 20th century $x History and criticism. 880 10 $6 100-01/$1 $a 骆 寒超. 880 10 $6 245-02/$1 $a 中国 现代 诗歌 论 / $c [骆 寒超]. 880 $6 250-03/$1 $a 第1版. 880 0 $6 260-04/$1 $a [å—京市] : $b 江è‹ã€€äººæ°±ã€€å‡ºç‰ˆç¤¾ : $b 江è‹çœã€€æ–°è¯ã€€æ›¸åº— å±è¡Œ, $c 1984. 01244nam a2200325 a 4500 001 86124008 /ACN 003 DLC 005 19870219000000.0 008 860417s1985 cc j 00010 chi 010 $a 86124008 /ACN 020 $c RMBY0.61 035 $a (CStRLIN)DCLP86-B6501 043 $a a-cc--- 050 0 $a DS731.U4 $b H75 1985 066 $c $1 082 0 $a 951/.6 $2 19 100 10 $6 880-01 $a Hsin, She. 245 10 $6 880-02 $a Tsai Wei-wu-erh chih hsiang / $c Hsin She. 250 $6 880-03 $a Ti 1 pan. 260 0 $6 880-04 $a Wu-lu-mu-chÊ»i shih : $b Hsin-chiang jen min chÊ»u pan she : $b Hsin-chiang hsin hua shu tien fa hsing, $c 1985. 300 $a 2, 178 p. ; $c 19 cm. 440 0 $6 880-05 $a Tsu kuo ta chia tÊ»ing tsÊ»ung shu 650 0 $a Uigurs $x Juvenile literature. 650 0 $a Ethnology $z China $x Juvenile literatture. 651 0 $a China $x Ethnic relations $x Juvenile literature. 880 10 $6 100-01/$1 $a 辛 涉. 880 10 $6 245-02/$1 $a 在 维å¾å°” 之 乡 / $c 辛 涉. 880 $6 250-03/$1 $a 第1版. 880 0 $6 260-04/$1 $a ä¹Œé²æœ¨é½å¸‚ : $b 新疆 人民 出版社 : $b 新疆 新è¯ã€€æ›¸åº— å‘行, $c 1985. 880 0 $6 440-05/$1 $a 祖国 大家庭 丛书 01252cam a2200313 a 4500 001 86124229 003 DLC 005 20001214140017.0 008 860703s1985 cc 000 1 chi 010 $a 86124229 020 $c RMBY1.05 035 $a (CStRLIN)DCLP86-B11515 040 $a DLC-R $c DLC-R $d CStRLIN $d DLC 050 00 $a PL2724.H37 $b H7 1985 066 $c $1 082 00 $a 895.1/34 $2 19 100 1 $6 880-01 $a Shen, Qifeng, $d b. 1741. 245 10 $6 880-02 $a Xie duo / $c Shen Qifeng zhu ; Qiao Yuzhou jiao dian. 250 $6 880-03 $a Beijing di 1 ban. 260 $6 880-04 $a Beijing : $b Ren min wen xue chu ban she : $b Xin hua shu dian Beijing fa xing suo fa xing, $c 1985. 300 $a 7, 198 p. ; $c 19 cm. 440 0 $6 880-05 $a Zhongguo xiao shuo shi liao cong shu 500 $a Short stories. 880 1 $6 100-01/$1 $a 沈 起凤, $d b. 1741. 880 10 $6 245-02/$1 $a è°é“Ž / $c 沈 起凤 著 ; 乔 雨舟 校点. 880 $6 250-03/$1 $a 北京 第1版. 880 $6 260-04/$1 $a 北京 : $b 人民 文学 出版社 : $b æ–°åŽã€€ä¹¦åº— 北京 å‘行所 å‘行, $c 1985. 880 0 $6 440-05/$1 $a 中国 å°è¯´ã€€å²æ–™ã€€ä¸›ä¹¦ 987 $a PINYIN $b CStRLIN $c 20001214 $d c $e 1.0 01516cam a2200349 a 4500 001 86124531 /ACN/r93 003 DLC 005 19930723073715.0 008 860319s1985 cc 00000 chi 010 $a 86124531 /ACN/r93 020 $c RMBY1.80 035 $a (CStRLIN)DCLP86-B4826 043 $a a-cc--- 050 0 $a HX418.5 $b .C482 1985 066 $c $1 082 0 $a 322/.2/0951 $2 19 245 00 $6 880-01 $a ChÊ»ing kung cheng chih lun hsün chiao tsÊ»ai / $c Chung kung Shang-hai shih wei hsüan chÊ»uan pu tsu chih pien hsieh. 250 $6 880-02 $a Ti 1 pan. 260 $6 880-03 $a Shang-hai : $b Shang-hai jen min chÊ»u pan she : $b Hsin hua shu tien Shang-hai fa hsing so fa hsing, $c 1985. 300 $a 8, 479 p. ; $c 19 cm. 500 $a Cover title also in pinyin: Qinggong zhengzhi lunxun jiaocai. 650 0 $a Communism $z China. 650 0 $a Working class $z China. 651 0 $a China $x History $y 19th century. 651 0 $a China $x History $y 20th century. 651 0 $a China $x Description and travel. 710 20 $6 880-04 $a Chung kung Shang-hai shih wei. $b Hsüan chÊ»uan pu. 740 01 $a Qinggong zhengzhi lunxun jiaocai. 880 00 $6 245-01/$1 $a é’工 政治 轮训 教æ / $c 中共 上海 市委 宣传部 组织 编写. 880 $6 250-02/$1 $a 第1版. 880 $6 260-03/$1 $a 上海 : $b 上海 人氱 出版社 : $b æ–°è¯ã€€æ›¸åº— 上海 å±è¡Œæ‰€ã€€å±è¡Œ, $c 1985. 880 20 $6 710-04/$1 $a 中共 上海 市委. $b 宣传部. 01121nam a2200301 a 4500 001 86125160 /ACN 003 DLC 005 19870219000000.0 008 860327s1985 cc cfh 00010 chi 010 $a 86125160 /ACN 020 $c RMBY1.05 035 $a (CStRLIN)DCLP86-B5292 050 0 $a PL2862.I276 $b W8 1985 066 $c $1 082 0 $a 895.1/15 $2 19 100 10 $6 880-01 $a Hsiao, ChÊ»ing. 245 10 $6 880-02 $a Wu shu hua / $c Hsiao ChÊ»ing. 250 $6 880-03 $a Ti 1 pan. 260 0 $6 880-04 $a Pei-ching : $b Pei-ching shih yüeh wen i chÊ»u pan she : $b Hsin hua shu tien Pei-ching fa hsing so fa hsing, $c 1985. 300 $a 4, 3, 199 p., [2] p. of plates : $b facsim., port. ; $c 19 cm. 440 0 $6 880-05 $a Hung yeh shih tsÊ»ung 500 $a Poems. 740 01 $a 5 shu hua. 880 10 $6 100-01/$1 $a 晓 晴. 880 10 $6 245-02/$1 $a 五æŸã€€èб/ $c 晓 晴. 880 $6 250-03/$1 $a 第1版. 880 0 $6 260-04/$1 $a 北京 : $b åŒ—äº¬ã€€åæœˆã€€æ–‡è‰ºã€€å‡ºç‰ˆç¤¾ : $b æ–°åŽã€€ä¹¦åº— 北京 å±è¡Œæ‰€ã€€å±è¡Œ, $c 1985. 880 0 $6 440-05/$1 $a 红å¶ã€€è¯—丛 01301nam a2200301 a 4500 001 86125348 /ACN 003 DLC 005 19870219000000.0 008 860304r19851917ch 00010 chi 010 $a 86125348 /ACN 035 $a (CStRLIN)DCLP86-B3824 043 $a a-cc--- 050 0 $a DS754.18 $b .C446 1985 066 $c $1 082 0 $a 327.51 $2 19 100 10 $6 880-01 $a Chuang, Ping-hai. 245 10 $6 880-02 $a Wai chiao ssu tÊ»ung lu / $c Chuang Ping-hai pien [tsuan]. 260 0 $6 880-03 $a [TÊ»ai-pei hsien Yung-ho shih] : $b Wen hai chÊ»u pan she, $c min kuo 74 [1985] 300 $a 2, 2, 2, 272 p. ; $c 22 cm. 490 1 $6 880-04 $a Chin tai Chung-kuo shih liao tsÊ»ung kÊ»an 3 pien : ti 2 chi ; $v 20 500 $a Reprint. Originally published: 1917? 651 0 $a China $x Foreign relations $y 1644-1912. 830 0 $6 880-05 $a Chin tai Chung-kuo shih liao tsÊ»ung kÊ»an 3 pien ; $v 20. 880 10 $6 100-01/$1 $a 莊 病骸. 880 10 $6 245-02/$1 $a 外交 æ€ç—›ã€€éŒ„ / $c 莊 病骸 編[纂]. 880 0 $6 260-03/$1 $a [臺北縣 永和市] : $b 文海 出版社, $c 民國74 [1985] 880 1 $6 490-04/$1 $a è¿‘ä»£ã€€ä¸­åœ‹ã€€å²æ–™ã€€å¢åˆŠã€€ä¸‰ç·¨ : 第二輯 ; $v 20 880 0 $6 830-05/$1 $a è¿‘ä»£ã€€ä¸­åœ‹ã€€å²æ–™ã€€å¢åˆŠã€€ä¸‰ç·¨ ; $v 20. 01158cam a2200325 a 4500 001 86125443 003 DLC 005 20020326070412.0 008 860304s1985 ch a 00010 chi 010 $a 86125443 020 $c $9.00 (U.S.) 035 $a (CStRLIN)DCLP86-B3795 040 $a DLC-R $c DLC-R $d CStRLIN $d DLC-R 043 $a a-cc--- 050 00 $a B5231 $b .L59 1985 066 $c $1 082 00 $a 181/.11 $2 19 100 1 $6 880-01 $a Liu, Shaoji. 245 10 $6 880-02 $a Zhongguo zhe xue xin lun = $b A new view of the Chinese philosophy / $c Liu Shaoji zhu. 250 $6 880-03 $a Chu ban. 260 $6 880-04 $a Taibei Shi : $b Shi jie shu ju, $c min guo 74 [1985] 300 $a 6, 12, 424 p. : $b ill. ; $c 27 cm. 546 $a In Chinese. 650 0 $a Philosophy, Chinese. 740 0 $a New view of the Chinese philosophy. 880 1 $6 100-01/$1 $a 劉 紹基. 880 10 $6 245-02/$1 $a 中國 哲學 新論 = $b A new view of the Chinese philosophy / $c 劉 紹基 豗. 880 $6 250-03/$1 $a åˆç‰ˆ. 880 $6 260-04/$1 $a å°åŒ—市 : $b 世界 書局, $c 氱國74 [1985] 987 $a PINYIN $b DLC $c 20020326 $d c 01247nam a2200301 a 4500 001 86154542 /ACN/r86 003 DLC 005 19870219000000.0 008 860528s1985 cc 00000 chi 010 $a 86154542 /ACN/r86 020 $c RMBY3.60 (v. 1) 035 $a (CStRLIN)DCLP86-B9002 043 $a a-cc--- 050 0 $a HB126.C4 $b C533 1985 066 $c $1 082 0 $a 330/.0951 $2 19 245 00 $6 880-01 $a Chung-kuo ku tai ching chi chu shu hsüan tu / $c Yü Tsu-yao ... [et al.] pien chu. 250 $6 880-02 $a Ti 1 pan. 260 0 $6 880-03 $a [ChÊ»ang-chÊ»un shih] : $b Chi-lin jen min chÊ»u pan she : $b Chi-lin sheng hsin hua shu tien fa hsing, $c 1985. 300 $a 2 v. ; $c 20 cm. 500 $a Colophon title also in pinyin: Zhongguo gudai jingji zhushu xuandu. 650 0 $a Economics $z China $x History. 700 10 $6 880-04 $a Yü, Tsu-yao. 740 01 $a Zhongguo gudai jingji zhushu xuandu. 880 00 $6 245-01/$1 $a 中國 å¤ä»£ã€€ç¶“濟 著述 é¸è®€ / $c 虞 祖尧 ... [et al.] ç¼–è‘—. 880 $6 250-02/$1 $a 第1版. 880 0 $6 260-03/$1 $a [长春市] : $b 剿ž— 人民 出版社 : $b 剿ž—çœã€€æ–°åŽã€€ä¹¦åº— å‘行, $c 1985. 880 10 $6 700-04/$1 $a 虞 祖尧. 00951nam a2200253 a 4500 001 86159478 /AK 003 DLC 005 19870219000000.0 008 860602s1984 ko 00010 kor 010 $a 86159478 /AK 020 $c W2800 035 $a (CStRLIN)DCLP86-B9357 040 $a CLASIA $c CLASIA $d DLC 050 0 $a AC148 $b .K589256 1985 066 $c $1 100 10 $6 880-01 $a Kim, Tong-gil, $d 1928- 245 10 $6 880-02 $a Tŭrŏra, ttaltŭl a : $b Kim Tong-gil taepÊ»yo esei. 260 0 $6 880-03 $a Sŏul : $b ChÊ»ŏngnyŏnsa, $c 1984 $g (1985 printing) 300 $a 271 p. ; $c 23 cm. 440 0 $6 880-04 $a Uri sidae ŭi taepÊ»yo sanmunsŏn ; $v 1 880 10 $6 100-01/$1 $a 김 ë™ê¸¸, $d 1928- 880 10 $6 245-02/$1 $a 들어ë¼, 딸들 아 : $b 김 ë™ê¸¸ã€€ëŒ€í‘œã€€ì—세ì´. 880 0 $6 260-03/$1 $a 서울 : $b 청년사, $c 1984 $g (1985 printing) 880 0 $6 440-04/$1 $a 우리 시대 ì˜ã€€ëŒ€í‘œã€€ì‚°ë¬¸ì„  ; $v 1 yaz-4.2.30/test/xml2tmarc1.xml.marc0000644000175000017500000000173511741237740013754 0000000000000000989nam0a32003011 450 001002800000004001000028008002800038009001100066021002700077032001500104100002100119245005400140250004100194260004000235300002700275504012300302512006100425520005000486652002400536652001600560666001600576666001900592666001500611666001800626666001900644666000900663666001500672000a9 181 423 4b710100fa000rnae000tmuua2002buslengv0000aagxx000a1-4000-4596-7d$14,00000&DBC2004390000aSlomanhLarry000aOn the road with Bob DylaneLarry "Ratso" Sloman000aRevised editionbThree Rivers Press000aNew YorkbThree Rivers Pressc2002000axv, 464 sider, tavler000aLarry "Ratso" Slomans meget personlige beretning om Bob Dylans koncertturne i USA i 1975: "The Rolling Thunder revue"000aPÃ¥ omslaget: With a new introduction by Kinky Friedman000aTidligere: 1. udgave. New York, Bantam, 19780000m99.4aDylanhBob000p78.9064v5000ffolkemusik000ffolkemusikere000frockmusik000frockmusikere000frockkoncerter000eUSA000i1970-1979yaz-4.2.30/test/test_icu.2.input0000644000175000017500000000001211733047144013340 00000000000000`a' ``a'' yaz-4.2.30/test/test_mutex.c0000644000175000017500000000451411733047144012660 00000000000000/* This file is part of the YAZ toolkit. * Copyright (C) 1995-2012 Index Data * See the file LICENSE for details. */ #if HAVE_CONFIG_H #include #endif #include #include #include #include #if HAVE_SYS_TIME_H #include #endif #ifdef WIN32 #include #endif #include #include #include static void tst_mutex(void) { YAZ_MUTEX p = 0; yaz_mutex_create(&p); YAZ_CHECK(p); yaz_mutex_enter(p); yaz_mutex_leave(p); yaz_mutex_destroy(&p); YAZ_CHECK(p == 0); yaz_mutex_create(&p); YAZ_CHECK(p); yaz_mutex_set_name(p, YLOG_LOG, "mymutex"); yaz_mutex_enter(p); yaz_mutex_leave(p); yaz_mutex_destroy(&p); YAZ_CHECK(p == 0); yaz_mutex_destroy(&p); /* OK to "destroy" NULL handle */ } static void tst_cond(void) { YAZ_MUTEX p = 0; YAZ_COND c; struct timeval abstime; int r; yaz_mutex_create(&p); YAZ_CHECK(p); if (!p) return; yaz_cond_create(&c); if (c) { r = yaz_gettimeofday(&abstime); YAZ_CHECK_EQ(r, 0); abstime.tv_sec += 1; /* wait 1 second */ r = yaz_cond_wait(c, p, &abstime); YAZ_CHECK(r != 0); } yaz_cond_destroy(&c); YAZ_CHECK(c == 0); yaz_mutex_destroy(&p); YAZ_CHECK(p == 0); } static void *my_handler(void *arg) { int *mydata = (int*) arg; (*mydata)++; return mydata; } static void tst_create_thread(void) { void *return_data; int mydata = 42; yaz_thread_t t[2]; t[0] = yaz_thread_create(my_handler, &mydata); YAZ_CHECK(t[0]); t[1] = yaz_thread_create(my_handler, &mydata); YAZ_CHECK(t[1]); return_data = 0; yaz_thread_join(&t[0], &return_data); YAZ_CHECK(!t[0]); YAZ_CHECK(return_data == &mydata); return_data = 0; yaz_thread_join(&t[1], &return_data); YAZ_CHECK(!t[1]); YAZ_CHECK(return_data == &mydata); YAZ_CHECK_EQ(mydata, 44); } int main (int argc, char **argv) { YAZ_CHECK_INIT(argc, argv); YAZ_CHECK_LOG(); tst_mutex(); tst_cond(); tst_create_thread(); YAZ_CHECK_TERM; } /* * Local variables: * c-basic-offset: 4 * c-file-style: "Stroustrup" * indent-tabs-mode: nil * End: * vim: shiftwidth=4 tabstop=8 expandtab */ yaz-4.2.30/test/xml2marc5.xml.marc0000644000175000017500000000075411741237740013574 0000000000000000492nam a22001455a 450000100100000000500170001000800410002710000520006824501040012025000140022426000230023830000160026165000510027765000180032800027748520051026111436.0050413s1894 gr 000 0 gre d1 aΜαÏοÏδης, Κωνσταντίνος Ιω10aΕλληνικόν κÏυπτογÏαφικόν λεξικόν /cΚωνστ. Ι. ΜαÏοÏδης. η εκδ. aΑθήνα,c1894. a248 σελ. 0aGreek language, ModernxDialectsvDictionaries 0aCryptography.yaz-4.2.30/test/tmarc4.xml0000644000175000017500000000106211741237740012224 00000000000000 009140091a22a 22003370 yaz-4.2.30/test/xml2marc3.xml.marc0000644000175000017500000000162211741237740013565 0000000000000000914naa a2200337 450 001001700000004000900017008002400026009001000050041000800060041000800068097000700076245003300083300002600116557003300142630001600175630001300191633001000204633000900214648006100223648001600284648005400300J01000600354BAS000500360LKR004200365CAT003000407CAT003000437CAT003000467CAT003900497CAT002600536UID001400562 aa00001508fa airn a1991bxxlnortav9 aagxx anor deng00a06 aByfornyelse ved Ibsen-Ringen bfarvefotobplanbsnit aByggekunstj1991v1/2k41-45 fbyfornyelse fsanering fNorge fOslo aTelje Torp Aasen ArkitektkontorcKristian Augustsgate 7B aEng, Dagfin ranlund, TomcKristian AugustsgatecPilestredet 19 aa 0 aITMlARK50b0000145y1991i1/2k41-45 abc20020111lARK01h2002 abc20020111lARK01h2116 abc20021002lARK01h1000 aICLLOADb00c20021122lARK01h1948 c20030618lARK01h1330 aa00001508yaz-4.2.30/test/marc3.chr0000644000175000017500000000001311741237740012006 00000000000000iso-8859-1 yaz-4.2.30/test/test_marccol.sh0000755000175000017500000000262511733047144013332 00000000000000#!/bin/sh # Tests reading of a bunch of non-roman UTF-8 ISO2709 and see if # we can encode it in MARC-8 # # Reads marccol?.u8.marc files , Generates marccol?.u8.{1,2}.lst srcdir=${srcdir:-.} ecode=0 for f in ${srcdir}/marccol?.u8.marc; do fb=`basename ${f} .marc` DIFF=${fb}.1.lst.diff NEW=${fb}.1.lst.new OLD=${srcdir}/${fb}.1.lst ../util/yaz-marcdump -f utf-8 -t utf-8 $f >$NEW if test $? != "0"; then echo "$f: yaz-marcdump returned error" ecode=1 break elif test -f $OLD; then if diff $OLD $NEW >$DIFF; then rm $DIFF rm $NEW else echo "$f: $NEW and $OLD differ" ecode=1 fi else echo "$f: Making test result $OLD for the first time" mv $NEW $OLD fi filem=`echo $fb | sed 's/u8/m8/'`.marc ../util/yaz-marcdump -o marc -f utf8 -t marc8lossless $f >$filem DIFF=${fb}.2.lst.diff NEW=${fb}.2.lst.new OLD=${srcdir}/${fb}.2.lst ../util/yaz-marcdump -f marc8 -t utf-8 $filem >$NEW if test $? != "0"; then echo "$f: yaz-marcdump returned error" ecode=1 break elif test -f $OLD; then if diff $OLD $NEW >$DIFF; then rm $DIFF rm $NEW rm $filem else echo "$f: $NEW and $OLD differ" ecode=1 fi else echo "$f: Making test result $OLD for the first time" mv $NEW $OLD rm $filem fi done exit $ecode # Local Variables: # mode:shell-script # sh-indentation: 2 # sh-basic-offset: 4 # End: yaz-4.2.30/test/test_json.c0000644000175000017500000001354311733047144012471 00000000000000/* This file is part of the YAZ toolkit. * Copyright (C) 1995-2012 Index Data * See the file LICENSE for details. */ /** * \file * \brief JSON test */ #if HAVE_CONFIG_H #include #endif #include #include #include #include static int expect(json_parser_t p, const char *input, const char *output) { int ret = 0; struct json_node *n; n = json_parser_parse(p, input); if (n == 0 && output == 0) ret = 1; else if (n && output) { WRBUF result = wrbuf_alloc(); json_write_wrbuf(n, result); if (strcmp(wrbuf_cstr(result), output) == 0) ret = 1; else { yaz_log(YLOG_WARN, "expected '%s' but got '%s'", output, wrbuf_cstr(result)); } wrbuf_destroy(result); } else if (!n) { yaz_log(YLOG_WARN, "expected '%s' but got error '%s'", output, json_parser_get_errmsg(p)); } json_remove_node(n); return ret; } static void tst1(void) { json_parser_t p = json_parser_create(); YAZ_CHECK(p); if (!p) return; YAZ_CHECK(expect(p, "", 0)); YAZ_CHECK(expect(p, "1234", "1234")); YAZ_CHECK(expect(p, "[ 1234 ]", "[1234]")); YAZ_CHECK(expect(p, "{\"k\":tru}", 0)); YAZ_CHECK(expect(p, "{\"k\":null", 0)); YAZ_CHECK(expect(p, "{\"k\":nullx}", 0)); YAZ_CHECK(expect(p, "{\"k\":-", 0)); YAZ_CHECK(expect(p, "{\"k\":+", 0)); YAZ_CHECK(expect(p, "{\"k\":\"a}", 0)); YAZ_CHECK(expect(p, "{\"k\":\"a", 0)); YAZ_CHECK(expect(p, "{\"k\":\"", 0)); YAZ_CHECK(expect(p, "{", 0)); YAZ_CHECK(expect(p, "{}", "{}")); YAZ_CHECK(expect(p, "{} extra", 0)); YAZ_CHECK(expect(p, "{\"a\":[1,2,3}", 0)); YAZ_CHECK(expect(p, "{\"a\":[1,2,", 0)); YAZ_CHECK(expect(p, "{\"k\":\"wa\"}", "{\"k\":\"wa\"}")); YAZ_CHECK(expect(p, "{\"k\":null}", "{\"k\":null}")); YAZ_CHECK(expect(p, "{\"k\":false}", "{\"k\":false}")); YAZ_CHECK(expect(p, "{\"k\":true}", "{\"k\":true}")); YAZ_CHECK(expect(p, "{\"k\":12}", "{\"k\":12}")); YAZ_CHECK(expect(p, "{\"k\":-12}", "{\"k\":-12}")); YAZ_CHECK(expect(p, "{\"k\":1.2e6}", "{\"k\":1.2e+06}")); YAZ_CHECK(expect(p, "{\"k\":1e3}", "{\"k\":1000}")); YAZ_CHECK(expect(p, "{\"k\":\"\"}", "{\"k\":\"\"}")); YAZ_CHECK(expect(p, "{\"a\":1,\"b\":2}", "{\"a\":1,\"b\":2}")); YAZ_CHECK(expect(p, "{\"a\":1,\"b\":2,\"c\":3}", "{\"a\":1,\"b\":2,\"c\":3}")); YAZ_CHECK(expect(p, "{\"a\":[]}", "{\"a\":[]}")); YAZ_CHECK(expect(p, "{\"a\":[1]}", "{\"a\":[1]}")); YAZ_CHECK(expect(p, "{\"a\":[1,2]}", "{\"a\":[1,2]}")); YAZ_CHECK(expect(p, "{\"a\":[1,2,3]}", "{\"a\":[1,2,3]}")); YAZ_CHECK(expect(p, "{\"k\":\"\\t\"}", "{\"k\":\"\\t\"}")); YAZ_CHECK(expect(p, "{\"k\":\"\t\"}", "{\"k\":\"\\t\"}")); YAZ_CHECK(expect(p, "{\"k\":\"\\n\"}", "{\"k\":\"\\n\"}")); YAZ_CHECK(expect(p, "{\"k\":\"\n\"}", "{\"k\":\"\\n\"}")); YAZ_CHECK(expect(p, "{\"k\":\"\\r\"}", "{\"k\":\"\\r\"}")); YAZ_CHECK(expect(p, "{\"k\":\"\r\"}", "{\"k\":\"\\r\"}")); YAZ_CHECK(expect(p, "{\"k\":\"\\f\"}", "{\"k\":\"\\f\"}")); YAZ_CHECK(expect(p, "{\"k\":\"\f\"}", "{\"k\":\"\\f\"}")); YAZ_CHECK(expect(p, "{\"k\":\"\\b\"}", "{\"k\":\"\\b\"}")); YAZ_CHECK(expect(p, "{\"k\":\"\b\"}", "{\"k\":\"\\b\"}")); YAZ_CHECK(expect(p, "{\"k\":\"\\u0001\\u0002\"}", "{\"k\":\"\\u0001\\u0002\"}")); json_parser_destroy(p); } static void tst2(void) { struct json_node *n, *n1; n = json_parse("{\"a\":1,\"b\":2,\"c\":[true,false,null]}", 0); YAZ_CHECK(n); if (!n) return; YAZ_CHECK_EQ(json_count_children(n), 3); n1 = json_get_object(n, "a"); YAZ_CHECK(n1 && n1->type == json_node_number && n1->u.number == 1.0); YAZ_CHECK_EQ(json_count_children(n1), 0); n1 = json_get_object(n, "b"); YAZ_CHECK(n1 && n1->type == json_node_number && n1->u.number == 2.0); YAZ_CHECK_EQ(json_count_children(n1), 0); n1 = json_get_object(n, "b"); YAZ_CHECK(n1 && n1->type == json_node_number && n1->u.number == 2.0); YAZ_CHECK_EQ(json_count_children(n1), 0); n1 = json_get_object(n, "c"); YAZ_CHECK(n1 && n1->type == json_node_array); YAZ_CHECK_EQ(json_count_children(n1), 3); n1 = json_get_elem(json_get_object(n, "c"), 0); YAZ_CHECK(n1 && n1->type == json_node_true); n1 = json_get_elem(json_get_object(n, "c"), 1); YAZ_CHECK(n1 && n1->type == json_node_false); n1 = json_get_elem(json_get_object(n, "c"), 2); YAZ_CHECK(n1 && n1->type == json_node_null); n1 = json_get_elem(json_get_object(n, "c"), 3); YAZ_CHECK(n1 == 0); json_remove_node(n); } static int append_check(const char *a, const char *b, const char *exp) { WRBUF w = wrbuf_alloc(); struct json_node *n_a, *n_b; int ret = 0; n_a = json_parse(a, 0); n_b = json_parse(b, 0); json_append_array(json_get_object(n_a, "a"), json_detach_object(n_b, "b")); json_write_wrbuf(n_a, w); if (!strcmp(wrbuf_cstr(w), exp)) ret = 1; wrbuf_destroy(w); json_remove_node(n_a); json_remove_node(n_b); return ret; } static void tst3(void) { YAZ_CHECK(append_check("{\"a\":[1,2,3]}", "{\"b\":[5,6,7]}", "{\"a\":[1,2,3,5,6,7]}")); YAZ_CHECK(append_check("{\"a\":[]}", "{\"b\":[5,6,7]}", "{\"a\":[5,6,7]}")); YAZ_CHECK(append_check("{\"a\":[1,2,3]}", "{\"b\":[]}", "{\"a\":[1,2,3]}")); } int main (int argc, char **argv) { YAZ_CHECK_INIT(argc, argv); tst1(); tst2(); tst3(); YAZ_CHECK_TERM; } /* * Local variables: * c-basic-offset: 4 * c-file-style: "Stroustrup" * indent-tabs-mode: nil * End: * vim: shiftwidth=4 tabstop=8 expandtab */ yaz-4.2.30/test/xml2marc6.xml0000644000175000017500000000212011741237740012641 00000000000000 00366nam a22001698a 4500 11224466 DLC00000000000000.0910710c19910701nju 00010 eng 11224466 DLCDLC123-xyzJack CollinsHow to program a computerPenguin8710p. cm. yaz-4.2.30/test/xml2tmarc8.xml0000644000175000017500000000707711741237740013047 00000000000000 02647nam^a2200469^^^4500UCD-00259230120061209034435.0m d cr bn |||a|bb|920330s1583 enk s 000 0 eng d99851339eoCL0036000039ProQuest Information and Learning. 300 N. Zeeb Rd., Ann Arbor, MI 48106Cu-RivESCu-RivESCStRLINdcrbWaOLNClinton, Atkinson.Clinton, Purser & Arnold, to their countreymen wheresoeuer[electronic resource] :Wherein is described by their own hands their vnfeigned penitence for their offences past: their patience in welcoming their death, & their duetiful minds towardes her most excellent MaiestieClinton, Purser & Arnold, to their countreymen wheresoeverClinton, Purser & Arnold, to their countreymen wheresoeverLondon :Imprinted by Iohn Wolfe and are to be sold [by W. Wright] at the middle shop in the Poultry, ioyning S. Mildreds Church,[1583?][12] pIn verseThe first poem is signed: Thomas Walton alias PurserClinton's full name and bookseller's name from, and publication date conjectured by, STCSignatures: A⁴ B²Reproduction of the original in the Bodleian LibrarySTC (2nd ed.)5431Also issued in print and on microformElectronic reproduction.Mode of access: World Wide Web.Restricted to UC campusesElectronic texts.localPiratesEnglandEarly works to 1800.Walton, Thomas,fl. 1583.autArnold,fl. 1583.autEarly English books onlineMERkmainSCBnnetRestricted to UC campusesSCP UCSDhttp://gateway.proquest.com/openurl?ctx_ver=Z39.88-2003&res_id=xri:eebo&rft_val_fmt=&rft_id=xri:eebo:image:16610Restricted to UC campusesSCP UCSDhttp://gateway.proquest.com/openurl?ctx_ver=Z39.88-2003&res_id=xri:eebo&rft_val_fmt=&rft_id=xri:eebo:image:16610DVXLELECT-GENInternetLAGEinOnline accessRestricted to UC campusesSCP UCSDhttp://gateway.proquest.com/openurl?ctx_ver=Z39.88-2003&res_id=xri:eebo&rft_val_fmt=&rft_id=xri:eebo:image:16610Restricted to UC campuseshttp://gateway.proquest.com/openurl?ctx_ver=Z39.88-2003&res_id=xri:eebo&rft_val_fmt=&rft_id=xri:eebo:image:16610CDLEarly English books, 1475-1640 ;1406:13.DVXL002592301 yaz-4.2.30/test/cql2pqfsample0000644000175000017500000000070411733047144013005 00000000000000# CQL queries for testing. # Read by test_cql2pqf.sh # No blank lines! # # Simple Term a a b "a b" # Index Relation Term title = fish dc.title = fish # Simple Boolean cat or dog cat and fish cat not frog (cat not frog) "cat" not "fish food" xml and "prox///" fred and any ((fred or all)) a or b and c not d # Masking/Truncation *a a* *a* a*a ?a a? ?a? a?a a#a? *a# a#a* a*3 # Escape sequences (sh reads one slash, though) a*\\3 \\*a# \\*a*b# \\" @and yaz-4.2.30/test/tmarc8.xml0000644000175000017500000001014711741237740012234 00000000000000 02647nam^a2200469^^^4500 UCD-002592301 20061209034435.0 m d cr bn |||a|bb| 920330s1583 enk s 000 0 eng d 99851339eo CL0036000039 ProQuest Information and Learning. 300 N. Zeeb Rd., Ann Arbor, MI 48106 Cu-RivES Cu-RivES CStRLIN dcrb WaOLN Clinton, Atkinson. Clinton, Purser & Arnold, to their countreymen wheresoeuer [electronic resource] : Wherein is described by their own hands their vnfeigned penitence for their offences past: their patience in welcoming their death, & their duetiful minds towardes her most excellent Maiestie Clinton, Purser & Arnold, to their countreymen wheresoever Clinton, Purser & Arnold, to their countreymen wheresoever London : Imprinted by Iohn Wolfe and are to be sold [by W. Wright] at the middle shop in the Poultry, ioyning S. Mildreds Church, [1583?] [12] p In verse The first poem is signed: Thomas Walton alias Purser Clinton's full name and bookseller's name from, and publication date conjectured by, STC Signatures: Aâ´ B² Reproduction of the original in the Bodleian Library STC (2nd ed.) 5431 Also issued in print and on microform Electronic reproduction. Mode of access: World Wide Web. Restricted to UC campuses Electronic texts. local Pirates England Early works to 1800. Walton, Thomas, fl. 1583. aut Arnold, fl. 1583. aut Early English books online MER kmain SCB nnet Restricted to UC campuses SCP UCSD http://gateway.proquest.com/openurl?ctx_ver=Z39.88-2003&res_id=xri:eebo&rft_val_fmt=&rft_id=xri:eebo:image:16610 Restricted to UC campuses SCP UCSD http://gateway.proquest.com/openurl?ctx_ver=Z39.88-2003&res_id=xri:eebo&rft_val_fmt=&rft_id=xri:eebo:image:16610 DVXL ELECT-GEN Internet LAGE in Online access Restricted to UC campuses SCP UCSD http://gateway.proquest.com/openurl?ctx_ver=Z39.88-2003&res_id=xri:eebo&rft_val_fmt=&rft_id=xri:eebo:image:16610 Restricted to UC campuses http://gateway.proquest.com/openurl?ctx_ver=Z39.88-2003&res_id=xri:eebo&rft_val_fmt=&rft_id=xri:eebo:image:16610 CDL Early English books, 1475-1640 ; 1406:13. DVXL 002592301 yaz-4.2.30/test/xml2tmarc2.xml.marc0000644000175000017500000000214111741237740013745 0000000000000001121nam0a32002171 450 001002800000004001000028008002800038009001100066039000900077100001900086245005900105260003300164300001000197512007300207531001400280538001900294652001500313666004900328795050600377795002000883000a9 182 502 3b710100fa000rcae000tsufa1995bgblengv0000asgxc000abef000aMimmshGarnet000aCry babyaWarm and soulfuleGarnet Mimms ... [et al.]000aBury St. EdmundsbBGOc1995000n1 cd000aIndspilninger publiceret 1963 (Cry baby) og 1965 (Warm and soulful)000aIndhold:000fBGOgBGOCD268000m78.794v4000msoulmrhythm & bluesnvokalp1960-1969lUSA000Ã¥11aCry babyaNobody but youaUntil you were goneaAnytime you want meaSo closeaFor your precious loveaBaby don't you weepaA ¤quiet placeaCry to meaDon't change your heartaWanting youaThe ¤truth hurtsaI'll take good care of youaLooking for youaIt won't hurt (half as much)aIt was easier to hurt heraThinkin'aProve it to meaMore than a miracleaAs long as I have youaOne girlaThere goes my babyaIt's just a matter of timeaA ¤little bit of soapaLook awayaI'll make it up to you000Ã¥40y0a1 girlyaz-4.2.30/test/test_odrstack.c0000644000175000017500000000315211733047144013325 00000000000000/* This file is part of the YAZ toolkit. * Copyright (C) 1995-2012 Index Data * See the file LICENSE for details. */ #if HAVE_CONFIG_H #include #endif #include #include #include #include /** \brief build a 100 level query */ void test1(void) { ODR odr = odr_createmem(ODR_ENCODE); YAZ_PQF_Parser parser = yaz_pqf_create(); Z_RPNQuery *rpn_query; char qstr[10000]; int i; int ret; YAZ_CHECK(odr); YAZ_CHECK(parser); *qstr = '\0'; for (i = 0; i<100; i++) strcat(qstr, "@and 1 "); strcat(qstr, "1"); rpn_query = yaz_pqf_parse (parser, odr, qstr); YAZ_CHECK(rpn_query); ret = z_RPNQuery(odr, &rpn_query, 0, 0); YAZ_CHECK(ret); yaz_pqf_destroy(parser); odr_destroy(odr); } /** \brief build a circular referenced query */ void test2(void) { ODR odr = odr_createmem(ODR_ENCODE); YAZ_PQF_Parser parser = yaz_pqf_create(); Z_RPNQuery *rpn_query; int ret; YAZ_CHECK(odr); rpn_query = yaz_pqf_parse (parser, odr, "@and @and a b c"); YAZ_CHECK(rpn_query); /* make the circular reference */ rpn_query->RPNStructure->u.complex->s1 = rpn_query->RPNStructure; ret = z_RPNQuery(odr, &rpn_query, 0, 0); /* should fail */ YAZ_CHECK(!ret); yaz_pqf_destroy(parser); odr_destroy(odr); } int main(int argc, char **argv) { YAZ_CHECK_INIT(argc, argv); test1(); test2(); YAZ_CHECK_TERM; } /* * Local variables: * c-basic-offset: 4 * c-file-style: "Stroustrup" * indent-tabs-mode: nil * End: * vim: shiftwidth=4 tabstop=8 expandtab */ yaz-4.2.30/test/xml2marc8.xml0000644000175000017500000001352011741237740012651 00000000000000 02647nam^a2200469^^^4500UCD-00259230120061209034435.0m d cr bn |||a|bb|920330s1583 enk s 000 0 eng d99851339eoCL0036000039ProQuest Information and Learning. 300 N. Zeeb Rd., Ann Arbor, MI 48106Cu-RivESCu-RivESCStRLINdcrbWaOLNClinton, Atkinson.Clinton, Purser & Arnold, to their countreymen wheresoeuer[electronic resource] :Wherein is described by their own hands their vnfeigned penitence for their offences past: their patience in welcoming their death, & their duetiful minds towardes her most excellent MaiestieClinton, Purser & Arnold, to their countreymen wheresoeverClinton, Purser & Arnold, to their countreymen wheresoeverLondon :Imprinted by Iohn Wolfe and are to be sold [by W. Wright] at the middle shop in the Poultry, ioyning S. Mildreds Church,[1583?][12] pIn verseThe first poem is signed: Thomas Walton alias PurserClinton's full name and bookseller's name from, and publication date conjectured by, STCSignatures: A⁴ B²Reproduction of the original in the Bodleian LibrarySTC (2nd ed.)5431Also issued in print and on microformElectronic reproduction.Mode of access: World Wide Web.Restricted to UC campusesElectronic texts.localPiratesEnglandEarly works to 1800.Walton, Thomas,fl. 1583.autArnold,fl. 1583.autEarly English books onlineMERkmainSCBnnetRestricted to UC campusesSCP UCSDhttp://gateway.proquest.com/openurl?ctx_ver=Z39.88-2003&res_id=xri:eebo&rft_val_fmt=&rft_id=xri:eebo:image:16610Restricted to UC campusesSCP UCSDhttp://gateway.proquest.com/openurl?ctx_ver=Z39.88-2003&res_id=xri:eebo&rft_val_fmt=&rft_id=xri:eebo:image:16610DVXLELECT-GENInternetLAGEinOnline accessRestricted to UC campusesSCP UCSDhttp://gateway.proquest.com/openurl?ctx_ver=Z39.88-2003&res_id=xri:eebo&rft_val_fmt=&rft_id=xri:eebo:image:16610Restricted to UC campuseshttp://gateway.proquest.com/openurl?ctx_ver=Z39.88-2003&res_id=xri:eebo&rft_val_fmt=&rft_id=xri:eebo:image:16610CDLEarly English books, 1475-1640 ;1406:13.DVXL002592301 yaz-4.2.30/test/xml2marc1.xml0000644000175000017500000000646411741237740012653 00000000000000 00988nam0a32003011 450 9 181 423 4710100anemu2002useng0axx1-4000-4596-7$14,00DBC200439SlomanLarryOn the road with Bob DylanLarry "Ratso" SlomanRevised editionThree Rivers PressNew YorkThree Rivers Press2002xv, 464 sider, tavlerLarry "Ratso" Slomans meget personlige beretning om Bob Dylans koncertturne i USA i 1975: "The Rolling Thunder revue"På omslaget: With a new introduction by Kinky FriedmanTidligere: 1. udgave. New York, Bantam, 197899.4DylanBob78.90645folkemusikfolkemusikererockmusikrockmusikererockkoncerterUSA1970-1979 yaz-4.2.30/test/xml2tmarc6.xml0000644000175000017500000000113311741237740013030 00000000000000 00366nam a22001698a 4500 11224466 DLC00000000000000.0910710c19910701nju 00010 eng 11224466 DLCDLC123-xyzJack CollinsHow to program a computerPenguin8710p. cm. yaz-4.2.30/test/marc1.xml.marc0000644000175000017500000000173511741237740012765 0000000000000000989nam0a32003011 450 001002800000004001000028008002800038009001100066021002700077032001500104100002100119245005400140250004100194260004000235300002700275504012300302512006100425520005000486652002400536652001600560666001600576666001900592666001500611666001800626666001900644666000900663666001500672000a9 181 423 4b710100fa000rnae000tmuua2002buslengv0000aagxx000a1-4000-4596-7d$14,00000&DBC2004390000aSlomanhLarry000aOn the road with Bob DylaneLarry "Ratso" Sloman000aRevised editionbThree Rivers Press000aNew YorkbThree Rivers Pressc2002000axv, 464 sider, tavler000aLarry "Ratso" Slomans meget personlige beretning om Bob Dylans koncertturne i USA i 1975: "The Rolling Thunder revue"000aPÃ¥ omslaget: With a new introduction by Kinky Friedman000aTidligere: 1. udgave. New York, Bantam, 19780000m99.4aDylanhBob000p78.9064v5000ffolkemusik000ffolkemusikere000frockmusik000frockmusikere000frockkoncerter000eUSA000i1970-1979yaz-4.2.30/test/xml2marc4.xml0000644000175000017500000000104711741237740012646 00000000000000 009140091a22a 22003370 yaz-4.2.30/test/test_retrieval.c0000644000175000017500000003361011733047144013512 00000000000000/* This file is part of the YAZ toolkit. * Copyright (C) 1995-2012 Index Data * See the file LICENSE for details. */ #if HAVE_CONFIG_H #include #endif #include #include #include #include #include #if YAZ_HAVE_XSLT #include #include yaz_retrieval_t conv_configure(const char *xmlstring, WRBUF w) { xmlDocPtr doc = xmlParseMemory(xmlstring, strlen(xmlstring)); if (!doc) { wrbuf_printf(w, "xmlParseMemory"); return 0; } else { xmlNodePtr ptr = xmlDocGetRootElement(doc); yaz_retrieval_t p = yaz_retrieval_create(); if (p) { const char *srcdir = getenv("srcdir"); if (srcdir) yaz_retrieval_set_path(p, srcdir); } if (!ptr) { wrbuf_printf(w, "xmlDocGetRootElement"); yaz_retrieval_destroy(p); p = 0; } else if (!p) { wrbuf_printf(w, "yaz_retrieval_create"); } else { int r = yaz_retrieval_configure(p, ptr); if (r) { wrbuf_puts(w, yaz_retrieval_get_error(p)); yaz_retrieval_destroy(p); p = 0; } } xmlFreeDoc(doc); return p; } } int conv_configure_test(const char *xmlstring, const char *expect_error, yaz_retrieval_t *pt) { WRBUF w = wrbuf_alloc(); int ret; yaz_retrieval_t p = conv_configure(xmlstring, w); if (!p) { if (expect_error && !strcmp(wrbuf_cstr(w), expect_error)) ret = 1; else { ret = 0; printf("%s\n", wrbuf_cstr(w)); } } else { if (expect_error) { ret = 0; yaz_retrieval_destroy(p); } else { if (pt) *pt = p; else yaz_retrieval_destroy(p); ret = 1; } } wrbuf_destroy(w); return ret; } static void tst_configure(void) { YAZ_CHECK(conv_configure_test("", "Expected element ", 0)); YAZ_CHECK(conv_configure_test("", 0, 0)); YAZ_CHECK(conv_configure_test("", "Element :" " expected element , got ", 0)); YAZ_CHECK(conv_configure_test("" "", "Missing 'syntax' attribute", 0)); YAZ_CHECK(conv_configure_test("" "" "" "", "Element : expected attributes " "'syntax', identifier' or 'name', got " "'unknown'", 0)); YAZ_CHECK(conv_configure_test("" "" "" "", "Element : unknown attribute " "value syntax='unknown_synt'", 0)); YAZ_CHECK(conv_configure_test("" "" "", 0, 0)); YAZ_CHECK(conv_configure_test("" "" "", 0, 0)); YAZ_CHECK(conv_configure_test("" "" "", 0, 0)); YAZ_CHECK(conv_configure_test("" "" "" "" "", "Element : expected zero or one element " ", got ", 0)); YAZ_CHECK(conv_configure_test("" "" " " "" "", "Element : expected attributes 'syntax' or 'name," " got 'schema'", 0)); YAZ_CHECK(conv_configure_test("" "" " " "" "", 0, 0)); YAZ_CHECK(conv_configure_test("" "" " " "" "", "Element : " "attribute 'syntax' has invalid value " "'unknown'", 0)); YAZ_CHECK(conv_configure_test("" "" " " "" "", "Element : expected attributes " "'syntax' or 'name, got 'unknown'", 0)); YAZ_CHECK(conv_configure_test("" "" "" "" "" "" "" "", "Element : Unsupported character" " set mapping defined by attribute values", 0)); YAZ_CHECK(conv_configure_test("" "" "" "" "" "" "" "", "Element : Unsupported" " input format defined by attribute value", 0)); YAZ_CHECK(conv_configure_test("" "" "" "" "" "" "" "" "", "Element : " "only one allowed", 0)); YAZ_CHECK(conv_configure_test("" "" "" "" "" "" "" "", 0, 0)); YAZ_CHECK(conv_configure_test( "" "" "" "" "" " " " " " " "" "" " " " " " " "" "" " " " " " " " " "" "", 0, 0)); } #endif int main(int argc, char **argv) { YAZ_CHECK_INIT(argc, argv); yaz_log_xml_errors(0, 0 /* disable it */); #if YAZ_HAVE_XSLT tst_configure(); #endif YAZ_CHECK_TERM; } /* * Local variables: * c-basic-offset: 4 * c-file-style: "Stroustrup" * indent-tabs-mode: nil * End: * vim: shiftwidth=4 tabstop=8 expandtab */ yaz-4.2.30/test/marc2.chr0000644000175000017500000000001311741237740012005 00000000000000iso-8859-1 yaz-4.2.30/test/marccol4.u8.1.lst0000644000175000017500000000234111654451754013241 0000000000000001357nas a2200313 a 4500 001 2007210635 003 DLC 005 20071005153240.0 008 071005c200u9999ja | | d0jpn 010 $a 2007210635 035 $a (OCoLC)173684089 040 $a DLC $c DLC $d DLC 042 $a lc 043 $a a-ja--- 050 00 $a T27.J32 $b S83a 066 $c $1 110 2 $6 880-01 $a SangyoÌ„ Gijutsu SoÌ„goÌ„ KenkyuÌ„jo. $b Shikoku Sangakukan Renkei SentaÌ„. 245 10 $6 880-02 $a Shikoku Sangakukan Renkei Sentā̄ katsudo hokoku. 246 11 $a Activity report 260 $6 880-03 $a Kagawa-ken Takamatsu-shi : $b SangyoÌ„ Gijutsu SoÌ„goÌ„ KenkyuÌ„jo Shikoku Sangakukan Renkei SentaÌ„ 500 $a Description based on: 2005; title from cover. 610 20 $a SangyoÌ„ Gijutsu SoÌ„goÌ„ KenkyuÌ„jo. $b Shikoku Sangakukan Renkei SentaÌ„ $v Periodicals. 650 0 $a Technology $z Japan $v Periodicals. 650 0 $a Technological innovations $z Japan $v Periodicals. 850 $a DLC 880 2 $6 110-01/$1 $a 産業技術ç·åˆç ”究所. $b 四国産学官連æºã‚»ãƒ³ã‚¿ãƒ¼. 880 10 $6 245-02/$1 $a 四国産学官連æºã‚»ãƒ³ã‚¿Ì„̄ー活動報告. 880 $6 260-03/$1 $a 香å·çœŒé«˜æ¾å¸‚ : $b 産業技術ç·åˆç ”究所研究所四国産学官連æºã‚»ãƒ³ã‚¿ãƒ¼. 880 24 $6 610-00/$1 $a 産業技術ç·åˆç ”究所. $b 四国産学官連æºã‚»ãƒ³ã‚¿Ì„̄ー $v Periodicals. yaz-4.2.30/test/test_soap2.c0000644000175000017500000001113511733047144012537 00000000000000/* This file is part of the YAZ toolkit. * Copyright (C) 1995-2012 Index Data * See the file LICENSE for details. */ #if HAVE_CONFIG_H #include #endif #include #include #include #include #if YAZ_HAVE_XML2 #include static void tst_srw(void) { const char *charset = 0; char *content_buf = 0; int content_len; int ret; ODR o = odr_createmem(ODR_ENCODE); Z_SOAP_Handler h[2] = { {"http://www.loc.gov/zing/srw/", 0, (Z_SOAP_fun) yaz_srw_codec}, {0, 0, 0} }; Z_SRW_PDU *sr = yaz_srw_get(o, Z_SRW_searchRetrieve_request); Z_SOAP *p = (Z_SOAP *) odr_malloc(o, sizeof(*p)); YAZ_CHECK(o); YAZ_CHECK(sr); YAZ_CHECK(p); #if 0 sr->u.request->query.cql = "jordb" "\xe6" "r"; #else sr->u.request->query.cql = "jordbaer"; #endif p->which = Z_SOAP_generic; p->u.generic = (Z_SOAP_Generic *) odr_malloc(o, sizeof(*p->u.generic)); p->u.generic->no = 0; p->u.generic->ns = 0; p->u.generic->p = sr; p->ns = "http://schemas.xmlsoap.org/soap/envelope/"; ret = z_soap_codec_enc(o, &p, &content_buf, &content_len, h, charset); odr_destroy(o); YAZ_CHECK(ret == 0); /* codec failed ? */ } #endif static void tst_array_to_uri(void) { ODR odr = odr_createmem(ODR_ENCODE); char **names; char **values; char *query_string; int r; r = yaz_uri_to_array("&", odr, &names, &values); YAZ_CHECK_EQ(r, 0); if (r == 0) { YAZ_CHECK(names[0] == 0); YAZ_CHECK(values[0] == 0); } r = yaz_uri_to_array("&&", odr, &names, &values); YAZ_CHECK_EQ(r, 0); if (r == 0) { yaz_array_to_uri(&query_string, odr, names, values); YAZ_CHECK(!strcmp(query_string, "")); YAZ_CHECK(names[0] == 0); YAZ_CHECK(values[0] == 0); } r = yaz_uri_to_array("a=AA&bb=%42B", odr, &names, &values); YAZ_CHECK_EQ(r, 2); if (r == 2) { YAZ_CHECK(names[0] && !strcmp(names[0], "a")); YAZ_CHECK(values[0] && !strcmp(values[0], "AA")); YAZ_CHECK(names[1] && !strcmp(names[1], "bb")); YAZ_CHECK(values[1] && !strcmp(values[1], "BB")); YAZ_CHECK(names[2] == 0); YAZ_CHECK(values[2] == 0); yaz_array_to_uri(&query_string, odr, names, values); YAZ_CHECK(!strcmp(query_string, "a=AA&bb=BB")); } r = yaz_uri_to_array("a=AA&bb&x", odr, &names, &values); YAZ_CHECK_EQ(r, 3); if (r == 3) { YAZ_CHECK(names[0] && !strcmp(names[0], "a")); YAZ_CHECK(values[0] && !strcmp(values[0], "AA")); YAZ_CHECK(names[1] && !strcmp(names[1], "bb")); YAZ_CHECK(values[1] && !strcmp(values[1], "")); YAZ_CHECK(names[2] && !strcmp(names[2], "x")); YAZ_CHECK(values[2] && !strcmp(values[1], "")); YAZ_CHECK(names[3] == 0); YAZ_CHECK(values[3] == 0); yaz_array_to_uri(&query_string, odr, names, values); YAZ_CHECK(!strcmp(query_string, "a=AA&bb=&x=")); } r = yaz_uri_to_array("a=AA&bb=&x=", odr, &names, &values); YAZ_CHECK_EQ(r, 3); if (r == 3) { YAZ_CHECK(names[0] && !strcmp(names[0], "a")); YAZ_CHECK(values[0] && !strcmp(values[0], "AA")); YAZ_CHECK(names[1] && !strcmp(names[1], "bb")); YAZ_CHECK(values[1] && !strcmp(values[1], "")); YAZ_CHECK(names[2] && !strcmp(names[2], "x")); YAZ_CHECK(values[2] && !strcmp(values[1], "")); YAZ_CHECK(names[3] == 0); YAZ_CHECK(values[3] == 0); yaz_array_to_uri(&query_string, odr, names, values); YAZ_CHECK(!strcmp(query_string, "a=AA&bb=&x=")); } r = yaz_uri_to_array("a=AA&&&bb&x&&", odr, &names, &values); YAZ_CHECK_EQ(r, 3); if (r == 3) { YAZ_CHECK(names[0] && !strcmp(names[0], "a")); YAZ_CHECK(values[0] && !strcmp(values[0], "AA")); YAZ_CHECK(names[1] && !strcmp(names[1], "bb")); YAZ_CHECK(values[1] && !strcmp(values[1], "")); YAZ_CHECK(names[2] && !strcmp(names[2], "x")); YAZ_CHECK(values[2] && !strcmp(values[2], "")); YAZ_CHECK(names[3] == 0); YAZ_CHECK(values[3] == 0); yaz_array_to_uri(&query_string, odr, names, values); YAZ_CHECK(!strcmp(query_string, "a=AA&bb=&x=")); } odr_destroy(odr); } int main(int argc, char **argv) { YAZ_CHECK_INIT(argc, argv); #if YAZ_HAVE_XML2 LIBXML_TEST_VERSION; tst_srw(); #endif tst_array_to_uri(); YAZ_CHECK_TERM; } /* * Local variables: * c-basic-offset: 4 * c-file-style: "Stroustrup" * indent-tabs-mode: nil * End: * vim: shiftwidth=4 tabstop=8 expandtab */ yaz-4.2.30/test/test_icu.1.output0000644000175000017500000000017211733047144013547 000000000000001 1 'børn' 'Børn' 2 2 'le' 'Le' 3 2 'carre' 'Carre' 4 3 'le' 'Le' 5 3 'carre' 'Carre' 6 4 'le' 'Le' 7 4 'carre' 'Carre' yaz-4.2.30/test/marc1.chr0000644000175000017500000000001311741237740012004 00000000000000iso-8859-1 yaz-4.2.30/test/test_icu.c0000644000175000017500000006204611733047144012302 00000000000000/* This file is part of the YAZ toolkit. * Copyright (C) 1995-2012 Index Data * See the file LICENSE for details. */ /* DO NOT EDIT THIS FILE IF YOUR EDITOR DOES NOT SUPPORT UTF-8 */ #if HAVE_CONFIG_H #include "config.h" #endif #define USE_TIMING 0 #if USE_TIMING #include #endif #include #include #include #if YAZ_HAVE_ICU #include #include #if YAZ_POSIX_THREADS #include #endif #include #include #define MAX_KEY_SIZE 256 struct icu_termmap { uint8_t sort_key[MAX_KEY_SIZE]; /* standard C string '\0' terminated */ char disp_term[MAX_KEY_SIZE]; /* standard C utf-8 string */ }; static int icu_termmap_cmp(const void *vp1, const void *vp2) { struct icu_termmap *itmp1 = *(struct icu_termmap **) vp1; struct icu_termmap *itmp2 = *(struct icu_termmap **) vp2; int cmp = 0; cmp = strcmp((const char *)itmp1->sort_key, (const char *)itmp2->sort_key); return cmp; } static int test_icu_casemap(const char * locale, char action, const char * src8cstr, const char * chk8cstr) { int success = 0; UErrorCode status = U_ZERO_ERROR; struct icu_buf_utf8 * src8 = icu_buf_utf8_create(0); struct icu_buf_utf8 * dest8 = icu_buf_utf8_create(0); struct icu_buf_utf16 * src16 = icu_buf_utf16_create(0); struct icu_buf_utf16 * dest16 = icu_buf_utf16_create(0); int src8cstr_len = strlen(src8cstr); int chk8cstr_len = strlen(chk8cstr); /* converting to UTF16 */ icu_utf16_from_utf8_cstr(src16, src8cstr, &status); /* perform case mapping */ icu_utf16_casemap(dest16, src16, locale, action, &status); /* converting to UTF8 */ icu_utf16_to_utf8(dest8, dest16, &status); /* determine success */ if (dest8->utf8 && (dest8->utf8_len == strlen(chk8cstr)) && !strcmp(chk8cstr, (const char *) dest8->utf8)) success = 1; else success = 0; /* report failures */ if (!success) { yaz_log(YLOG_WARN, "test_icu_casemap failed"); yaz_log(YLOG_LOG, "Original string: '%s' (%d)", src8cstr, src8cstr_len); yaz_log(YLOG_LOG, "icu_casemap '%s:%c' '%s' (%d)", locale, action, dest8->utf8, dest8->utf8_len); yaz_log(YLOG_LOG, "expected string: '%s' (%d)", chk8cstr, chk8cstr_len); } /* clean the buffers */ icu_buf_utf8_destroy(src8); icu_buf_utf8_destroy(dest8); icu_buf_utf16_destroy(src16); icu_buf_utf16_destroy(dest16); return success; } static void check_icu_casemap(void) { /* Locale 'en' */ /* successful tests */ YAZ_CHECK(test_icu_casemap("en", 'l', "A ReD fOx hunTS sQUirriLs", "a red fox hunts squirrils")); YAZ_CHECK(test_icu_casemap("en", 'u', "A ReD fOx hunTS sQUirriLs", "A RED FOX HUNTS SQUIRRILS")); YAZ_CHECK(test_icu_casemap("en", 'f', "A ReD fOx hunTS sQUirriLs", "a red fox hunts squirrils")); YAZ_CHECK(test_icu_casemap("en", 't', "A ReD fOx hunTS sQUirriLs", "A Red Fox Hunts Squirrils")); /* Locale 'da' */ /* success expected */ YAZ_CHECK(test_icu_casemap("da", 'l', "Ã¥h ÆbLE, øs fLØde i Ã…en efter bLÃ¥BærGRødeN", "Ã¥h æble, øs fløde i Ã¥en efter blÃ¥bærgrøden")); YAZ_CHECK(test_icu_casemap("da", 'u', "Ã¥h ÆbLE, øs fLØde i Ã…en efter bLÃ¥BærGRødeN", "Ã…H ÆBLE, ØS FLØDE I Ã…EN EFTER BLÃ…BÆRGRØDEN")); YAZ_CHECK(test_icu_casemap("da", 'f', "Ã¥h ÆbLE, øs fLØde i Ã…en efter bLÃ¥BærGRødeN", "Ã¥h æble, øs fløde i Ã¥en efter blÃ¥bærgrøden")); YAZ_CHECK(test_icu_casemap("da", 't', "Ã¥h ÆbLE, øs fLØde i Ã…en efter bLÃ¥BærGRødeN", "Ã…h Æble, Øs Fløde I Ã…en Efter BlÃ¥bærgrøden")); /* Locale 'de' */ /* success expected */ YAZ_CHECK(test_icu_casemap("de", 'l', "zWÖlf ärgerliche Würste rollen ÜBer die StRAße", "zwölf ärgerliche würste rollen über die straße")); YAZ_CHECK(test_icu_casemap("de", 'u', "zWÖlf ärgerliche Würste rollen ÜBer die StRAße", "ZWÖLF ÄRGERLICHE WÜRSTE ROLLEN ÜBER DIE STRASSE")); YAZ_CHECK(test_icu_casemap("de", 'f', "zWÖlf ärgerliche Würste rollen ÜBer die StRAße", "zwölf ärgerliche würste rollen über die strasse")); YAZ_CHECK(test_icu_casemap("de", 't', "zWÖlf ärgerliche Würste rollen ÜBer die StRAße", "Zwölf Ärgerliche Würste Rollen Über Die Straße")); } static int test_icu_sortmap(const char * locale, int src_list_len, const char ** src_list, const char ** chk_list) { int success = 1; UErrorCode status = U_ZERO_ERROR; struct icu_buf_utf8 * buf8 = icu_buf_utf8_create(0); struct icu_buf_utf16 * buf16 = icu_buf_utf16_create(0); int i; struct icu_termmap * list[src_list_len]; UCollator *coll = ucol_open(locale, &status); icu_check_status(status); if (U_FAILURE(status)) return 0; /* assigning display terms and sort keys using buf 8 and buf16 */ for (i = 0; i < src_list_len; i++) { list[i] = (struct icu_termmap *) malloc(sizeof(struct icu_termmap)); /* copy display term */ strcpy(list[i]->disp_term, src_list[i]); /* transforming to UTF16 */ icu_utf16_from_utf8_cstr(buf16, list[i]->disp_term, &status); icu_check_status(status); /* computing sortkeys */ icu_sortkey8_from_utf16(coll, buf8, buf16, &status); icu_check_status(status); /* assigning sortkeys */ memcpy(list[i]->sort_key, buf8->utf8, buf8->utf8_len); } /* do the sorting */ qsort(list, src_list_len, sizeof(struct icu_termmap *), icu_termmap_cmp); /* checking correct sorting */ for (i = 0; i < src_list_len; i++) { if (0 != strcmp(list[i]->disp_term, chk_list[i])){ success = 0; } } if (!success) { yaz_log(YLOG_LOG, "ERROR"); yaz_log(YLOG_LOG, "Input str:'%s':", locale); for (i = 0; i < src_list_len; i++) { yaz_log(YLOG_LOG, " '%s'", list[i]->disp_term); } yaz_log(YLOG_LOG, "ICU sort: '%s':", locale); for (i = 0; i < src_list_len; i++) { yaz_log(YLOG_LOG, " '%s'", list[i]->disp_term); } yaz_log(YLOG_LOG, "Expected: '%s':", locale); for (i = 0; i < src_list_len; i++) { yaz_log(YLOG_LOG, " '%s'", chk_list[i]); } } for (i = 0; i < src_list_len; i++) free(list[i]); ucol_close(coll); icu_buf_utf8_destroy(buf8); icu_buf_utf16_destroy(buf16); return success; } static void check_icu_sortmap(void) { /* successful tests */ size_t en_1_len = 6; const char * en_1_src[6] = {"z", "K", "a", "A", "Z", "k"}; const char * en_1_cck[6] = {"a", "A", "k", "K", "z", "Z"}; YAZ_CHECK(test_icu_sortmap("en", en_1_len, en_1_src, en_1_cck)); YAZ_CHECK(test_icu_sortmap("en_AU", en_1_len, en_1_src, en_1_cck)); YAZ_CHECK(test_icu_sortmap("en_CA", en_1_len, en_1_src, en_1_cck)); YAZ_CHECK(test_icu_sortmap("en_GB", en_1_len, en_1_src, en_1_cck)); YAZ_CHECK(test_icu_sortmap("en_US", en_1_len, en_1_src, en_1_cck)); /* successful tests */ { size_t da_1_len = 6; const char * da_1_src[6] = {"z", "Ã¥", "o", "æ", "a", "ø"}; const char * da_1_cck[6] = {"a", "o", "z", "æ", "ø", "Ã¥"}; YAZ_CHECK(test_icu_sortmap("da", da_1_len, da_1_src, da_1_cck)); YAZ_CHECK(test_icu_sortmap("da_DK", da_1_len, da_1_src, da_1_cck)); } /* successful tests */ { size_t de_1_len = 9; const char * de_1_src[9] = {"u", "ä", "o", "t", "s", "ß", "ü", "ö", "a"}; const char * de_1_cck[9] = {"a","ä", "o", "ö", "s", "ß", "t", "u", "ü"}; YAZ_CHECK(test_icu_sortmap("de", de_1_len, de_1_src, de_1_cck)); YAZ_CHECK(test_icu_sortmap("de_AT", de_1_len, de_1_src, de_1_cck)); YAZ_CHECK(test_icu_sortmap("de_DE", de_1_len, de_1_src, de_1_cck)); } } static int test_icu_normalizer(const char * rules8cstr, const char * src8cstr, const char * chk8cstr) { int success = 0; UErrorCode status = U_ZERO_ERROR; struct icu_buf_utf16 * src16 = icu_buf_utf16_create(0); struct icu_buf_utf16 * dest16 = icu_buf_utf16_create(0); struct icu_buf_utf8 * dest8 = icu_buf_utf8_create(0); struct icu_transform * transform = icu_transform_create(rules8cstr, 'f', 0, &status); icu_check_status(status); icu_utf16_from_utf8_cstr(src16, src8cstr, &status); icu_check_status(status); icu_transform_trans(transform, dest16, src16, &status); icu_check_status(status); icu_utf16_to_utf8(dest8, dest16, &status); icu_check_status(status); if (!strcmp((const char *) dest8->utf8, (const char *) chk8cstr)) success = 1; else { success = 0; yaz_log(YLOG_LOG, "Normalization"); yaz_log(YLOG_LOG, " Rules: '%s'", rules8cstr); yaz_log(YLOG_LOG, " Input: '%s'", src8cstr); yaz_log(YLOG_LOG, " Normalized: '%s'", dest8->utf8); yaz_log(YLOG_LOG, " Expected: '%s'", chk8cstr); } icu_transform_destroy(transform); icu_buf_utf16_destroy(src16); icu_buf_utf16_destroy(dest16); icu_buf_utf8_destroy(dest8); return success; } static void check_icu_normalizer(void) { YAZ_CHECK(test_icu_normalizer("[:Punctuation:] Any-Remove", "Don't shoot!", "Dont shoot")); YAZ_CHECK(test_icu_normalizer("[:Control:] Any-Remove", "Don't\n shoot!", "Don't shoot!")); YAZ_CHECK(test_icu_normalizer("[:Decimal_Number:] Any-Remove", "This is 4 you!", "This is you!")); YAZ_CHECK(test_icu_normalizer("Lower; [:^Letter:] Remove", "Don't shoot!", "dontshoot")); YAZ_CHECK(test_icu_normalizer("[:^Number:] Remove", "Monday 15th of April", "15")); YAZ_CHECK(test_icu_normalizer("Lower;" "[[:WhiteSpace:][:Punctuation:]] Remove", " word4you? ", "word4you")); YAZ_CHECK(test_icu_normalizer("NFD; [:Nonspacing Mark:] Remove; NFC", "à côté de l'alcôve ovoïde", "a cote de l'alcove ovoide")); } static int test_icu_tokenizer(const char * locale, char action, const char * src8cstr, int count) { int success = 1; UErrorCode status = U_ZERO_ERROR; struct icu_buf_utf16 * src16 = icu_buf_utf16_create(0); struct icu_buf_utf16 * tkn16 = icu_buf_utf16_create(0); struct icu_buf_utf8 * tkn8 = icu_buf_utf8_create(0); struct icu_tokenizer * tokenizer = 0; /* transforming to UTF16 */ icu_utf16_from_utf8_cstr(src16, src8cstr, &status); icu_check_status(status); /* set up tokenizer */ tokenizer = icu_tokenizer_create(locale, action, &status); icu_check_status(status); YAZ_CHECK(tokenizer); /* attach text buffer to tokenizer */ icu_tokenizer_attach(tokenizer, src16, &status); icu_check_status(status); /* perform work on tokens */ while (icu_tokenizer_next_token(tokenizer, tkn16, &status)) { icu_check_status(status); /* converting to UTF8 */ icu_utf16_to_utf8(tkn8, tkn16, &status); } if (count != icu_tokenizer_token_count(tokenizer)) { success = 0; yaz_log(YLOG_LOG, "Tokenizer '%s:%c' Error:", locale, action); yaz_log(YLOG_LOG, " Input: '%s'", src8cstr); yaz_log(YLOG_LOG, " Tokens: %d", icu_tokenizer_token_count(tokenizer)); yaz_log(YLOG_LOG, " Expected: %d", count); } icu_tokenizer_destroy(tokenizer); icu_buf_utf16_destroy(src16); icu_buf_utf16_destroy(tkn16); icu_buf_utf8_destroy(tkn8); return success; } static void check_icu_tokenizer(void) { const char * en_str = "O Romeo, Romeo! wherefore art thou Romeo?"; YAZ_CHECK(test_icu_tokenizer("en", 's', en_str, 2)); YAZ_CHECK(test_icu_tokenizer("en", 'l', en_str, 7)); YAZ_CHECK(test_icu_tokenizer("en", 'w', en_str, 16)); YAZ_CHECK(test_icu_tokenizer("en", 'c', en_str, 41)); { const char * da_str = "BlÃ¥bærtærte. Denne kage stammer fra Finland. " "Den er med blÃ¥bær, men alle sommerens forskellige bær kan bruges."; YAZ_CHECK(test_icu_tokenizer("da", 's', da_str, 3)); YAZ_CHECK(test_icu_tokenizer("dar", 'l', da_str, 17)); YAZ_CHECK(test_icu_tokenizer("da", 'w', da_str, 37)); YAZ_CHECK(test_icu_tokenizer("da", 'c', da_str, 110)); } } static void check_icu_chain(void) { const char * en_str = "O Romeo, Romeo! wherefore art thou\t Romeo?"; UErrorCode status = U_ZERO_ERROR; struct icu_chain * chain = 0; const char * xml_str = "" "" "" "" "" "" ""; xmlDoc *doc = xmlParseMemory(xml_str, strlen(xml_str)); xmlNode *xml_node = xmlDocGetRootElement(doc); YAZ_CHECK(xml_node); chain = icu_chain_xml_config(xml_node, 0, &status); xmlFreeDoc(doc); YAZ_CHECK(chain); if (!chain) return; YAZ_CHECK(icu_chain_assign_cstr(chain, en_str, &status)); while (icu_chain_next_token(chain, &status)) { yaz_log(YLOG_LOG, "%d '%s' '%s'", icu_chain_token_number(chain), icu_chain_token_norm(chain), icu_chain_token_display(chain)); } YAZ_CHECK_EQ(icu_chain_token_number(chain), 7); YAZ_CHECK(icu_chain_assign_cstr(chain, "what is this?", &status)); while (icu_chain_next_token(chain, &status)) { yaz_log(YLOG_LOG, "%d '%s' '%s'", icu_chain_token_number(chain), icu_chain_token_norm(chain), icu_chain_token_display(chain)); } YAZ_CHECK_EQ(icu_chain_token_number(chain), 3); icu_chain_destroy(chain); } static void check_bug_1140(void) { UErrorCode status = U_ZERO_ERROR; struct icu_chain * chain = 0; const char * xml_str = "" /* if the first rule is normalize instead. Then it works */ #if 0 "" #endif "" "" "" "" ""; xmlDoc *doc = xmlParseMemory(xml_str, strlen(xml_str)); xmlNode *xml_node = xmlDocGetRootElement(doc); YAZ_CHECK(xml_node); chain = icu_chain_xml_config(xml_node, 0, &status); xmlFreeDoc(doc); YAZ_CHECK(chain); if (!chain) return; YAZ_CHECK(icu_chain_assign_cstr( chain, "O Romeo, Romeo! wherefore art thou\t Romeo?", &status)); while (icu_chain_next_token(chain, &status)) { ; /* printf("%d '%s' '%s'\n", icu_chain_token_number(chain), icu_chain_token_norm(chain), icu_chain_token_display(chain)); */ } YAZ_CHECK_EQ(icu_chain_token_number(chain), 7); YAZ_CHECK(icu_chain_assign_cstr(chain, "what is this?", &status)); while (icu_chain_next_token(chain, &status)) { ; /* printf("%d '%s' '%s'\n", icu_chain_token_number(chain), icu_chain_token_norm(chain), icu_chain_token_display(chain)); */ } /* we expect 'what' 'is' 'this', i.e. 3 tokens */ YAZ_CHECK_EQ(icu_chain_token_number(chain), 3); icu_chain_destroy(chain); } static void check_chain_empty_token(void) { UErrorCode status = U_ZERO_ERROR; struct icu_chain * chain = 0; const char * xml_str = "" "" "" ""; xmlDoc *doc = xmlParseMemory(xml_str, strlen(xml_str)); xmlNode *xml_node = xmlDocGetRootElement(doc); YAZ_CHECK(xml_node); chain = icu_chain_xml_config(xml_node, 0, &status); xmlFreeDoc(doc); YAZ_CHECK(chain); YAZ_CHECK(icu_chain_assign_cstr( chain, "a string with 15 tokenss and 8 displays", &status)); while (icu_chain_next_token(chain, &status)) { ; /* printf("%d '%s' '%s'\n", icu_chain_token_number(chain), icu_chain_token_norm(chain), icu_chain_token_display(chain)); */ } YAZ_CHECK_EQ(icu_chain_token_number(chain), 15); icu_chain_destroy(chain); } static void check_chain_empty_chain(void) { UErrorCode status = U_ZERO_ERROR; struct icu_chain * chain = 0; const char * xml_str = "" ""; const char * src8 = "some 5487 weired !¤%&(/& sTuFf"; char * dest8 = 0; xmlDoc *doc = xmlParseMemory(xml_str, strlen(xml_str)); xmlNode *xml_node = xmlDocGetRootElement(doc); YAZ_CHECK(xml_node); chain = icu_chain_xml_config(xml_node, 0, &status); xmlFreeDoc(doc); YAZ_CHECK(chain); YAZ_CHECK(icu_chain_assign_cstr( chain, src8, &status)); while (icu_chain_next_token(chain, &status)) { ; /* printf("%d '%s' '%s'\n", icu_chain_token_number(chain), icu_chain_token_norm(chain), icu_chain_token_display(chain)); */ } YAZ_CHECK_EQ(icu_chain_token_number(chain), 1); dest8 = (char *) icu_chain_token_norm(chain); YAZ_CHECK_EQ(strcmp(src8, dest8), 0); icu_chain_destroy(chain); } static void check_icu_iter1(void) { UErrorCode status = U_ZERO_ERROR; struct icu_chain * chain = 0; xmlNode *xml_node; yaz_icu_iter_t iter; const char * xml_str = "" "" "" ""; xmlDoc *doc = xmlParseMemory(xml_str, strlen(xml_str)); YAZ_CHECK(doc); if (!doc) return; xml_node = xmlDocGetRootElement(doc); YAZ_CHECK(xml_node); if (!xml_node) return ; chain = icu_chain_xml_config(xml_node, 1, &status); xmlFreeDoc(doc); YAZ_CHECK(chain); iter = icu_iter_create(chain); icu_iter_first(iter, "a string with 15 tokens and 8 displays"); YAZ_CHECK(iter); if (!iter) return; while (icu_iter_next(iter)) { yaz_log(YLOG_LOG, "[%s]", icu_iter_get_norm(iter)); } icu_iter_destroy(iter); icu_chain_destroy(chain); } static int test_iter(struct icu_chain *chain, const char *input, const char *expected) { yaz_icu_iter_t iter = icu_iter_create(chain); WRBUF result, second, sort_result; int success = 1; if (!iter) { yaz_log(YLOG_WARN, "test_iter: input=%s !iter", input); return 0; } if (icu_iter_next(iter)) { yaz_log(YLOG_WARN, "test_iter: expecting 0 before icu_iter_first"); return 0; } sort_result = wrbuf_alloc(); result = wrbuf_alloc(); icu_iter_first(iter, input); while (icu_iter_next(iter)) { const char *sort_str = icu_iter_get_sortkey(iter); if (sort_str) { wrbuf_puts(sort_result, "["); wrbuf_puts_escaped(sort_result, sort_str); wrbuf_puts(sort_result, "]"); } else { wrbuf_puts(sort_result, "[NULL]"); } wrbuf_puts(result, "["); wrbuf_puts(result, icu_iter_get_norm(iter)); wrbuf_puts(result, "]"); } yaz_log(YLOG_LOG, "sortkey=%s", wrbuf_cstr(sort_result)); second = wrbuf_alloc(); icu_iter_first(iter, input); while (icu_iter_next(iter)) { wrbuf_puts(second, "["); wrbuf_puts(second, icu_iter_get_norm(iter)); wrbuf_puts(second, "]"); } icu_iter_destroy(iter); if (strcmp(expected, wrbuf_cstr(result))) { yaz_log(YLOG_WARN, "test_iter: input=%s expected=%s got=%s", input, expected, wrbuf_cstr(result)); success = 0; } if (strcmp(expected, wrbuf_cstr(second))) { yaz_log(YLOG_WARN, "test_iter: input=%s expected=%s got=%s (2nd)", input, expected, wrbuf_cstr(second)); success = 0; } wrbuf_destroy(result); wrbuf_destroy(second); wrbuf_destroy(sort_result); return success; } static void *iter_thread(void *p) { struct icu_chain *chain = (struct icu_chain *) p; int i; for (i = 0; i < 1000; i++) { YAZ_CHECK(test_iter(chain, "Adobe Acrobat Reader, 1991-1999.", "[adobe][acrobat][reader][1991][][1999][]")); } return 0; } static void check_iter_threads(struct icu_chain *chain) { #if YAZ_POSIX_THREADS #define NO_THREADS 1 pthread_t t[NO_THREADS]; int i; for (i = 0; i < NO_THREADS; i++) pthread_create(t + i, 0, iter_thread, chain); for (i = 0; i < NO_THREADS; i++) pthread_join(t[i], 0); #endif } static void check_icu_iter2(void) { UErrorCode status = U_ZERO_ERROR; struct icu_chain * chain = 0; xmlNode *xml_node; const char * xml_str = "" "" "" "" "" "" "" ""; xmlDoc *doc = xmlParseMemory(xml_str, strlen(xml_str)); YAZ_CHECK(doc); if (!doc) return; xml_node = xmlDocGetRootElement(doc); YAZ_CHECK(xml_node); if (!xml_node) return ; chain = icu_chain_xml_config(xml_node, 1, &status); xmlFreeDoc(doc); YAZ_CHECK(chain); if (!chain) return; YAZ_CHECK(test_iter(chain, "Adobe Acrobat Reader, 1991-1999.", "[adobe][acrobat][reader][1991][][1999][]")); YAZ_CHECK(test_iter(chain, "ÎόταÏης, Γιάννης Σωτ", "[νόταÏης][γιάννης][σωτ]")); check_iter_threads(chain); icu_chain_destroy(chain); } static void check_icu_iter3(void) { UErrorCode status = U_ZERO_ERROR; struct icu_chain * chain = 0; xmlNode *xml_node; const char * xml_str = "\n" "\n" "\n" "\n" "\n" "\n" "\n"; xmlDoc *doc = xmlParseMemory(xml_str, strlen(xml_str)); YAZ_CHECK(doc); if (!doc) return; xml_node = xmlDocGetRootElement(doc); YAZ_CHECK(xml_node); if (!xml_node) return ; chain = icu_chain_xml_config(xml_node, 1, &status); xmlFreeDoc(doc); YAZ_CHECK(chain); if (!chain) return; YAZ_CHECK(test_iter(chain, "Adobe Acrobat Reader, 1991-1999.", "[adobeacrobatreader19911999]")); YAZ_CHECK(test_iter(chain, "ÎόταÏης, Γιάννης Σωτ", "[νοταÏηςγιαννηςσωτ]")); icu_chain_destroy(chain); } #endif /* YAZ_HAVE_ICU */ int main(int argc, char **argv) { YAZ_CHECK_INIT(argc, argv); YAZ_CHECK_LOG(); #if YAZ_HAVE_ICU check_icu_casemap(); check_icu_sortmap(); check_icu_normalizer(); check_icu_tokenizer(); check_icu_chain(); check_chain_empty_token(); check_chain_empty_chain(); check_icu_iter1(); check_icu_iter2(); check_icu_iter3(); check_bug_1140(); u_cleanup(); #else /* YAZ_HAVE_ICU */ yaz_log(YLOG_LOG, "ICU unit tests omitted"); YAZ_CHECK(0 == 0); #endif /* YAZ_HAVE_ICU */ YAZ_CHECK_TERM; } /* * Local variables: * c-basic-offset: 4 * c-file-style: "Stroustrup" * indent-tabs-mode: nil * End: * vim: shiftwidth=4 tabstop=8 expandtab */ yaz-4.2.30/test/marc7.xml.marc0000644000175000017500000000604511741237740012772 0000000000000003109cam a2200349 i 4500001001300000003000400013005001700017008004100034035001000075035001000085035001000095040001300105906004500118010001700163245005200180260002100232300002100253500004300274500017600317500020000493500016100693500019500854500017801049500022001227500020501447500019901652500017701851500021402028500021502242500016102457500014102618 77123332 DLC20051218154744.0981008b2001 ilu 000 0 eng  a57779 a90490 a93202 aDLCcDLC a0bundcorignewduencipf19gy-gencatlg a 77123332 00aVoyager Diacritic test -- New input 001 (SBIE). any :bny,c2001. a100 p. ;c12 cm. aNew copy imported from file (8/12/99). aVOYAGER COLUMN 0 (NEW): Degree sign (°); Phono Copyright mark (â„—); Copyright mark (©); Sharp (♯); Inverted Question mark (¿); Inverted Exclamation mark (¡). aVOYAGER COLUMN 1: Script L (â„“); Polish L (Å); Scandanavian O (Ø); D with Crossbar (Ä); Icelandic Thorn (Þ); AE Digraph (Æ); OE Digraph (Å’); Miagkii Znak (ʹ); Dot at Midline (·). aVOYAGER COLUMN 2: Musical Flat (â™­); Patent Mark (®); Plus or Minus (±); O Hook (Æ ); U Hook (Ư); Alif (ʼ); alpha α; Ayn (Ê»); Polish l (Å‚). aVOYAGER COLUMN 3: Scandanavian o (ø); d with crossbar (Ä‘); Icelandic Thorn (þ); ae Digraph (æ); oe Digraph (Å“); Tverdii Znak (ʺ); Turkish i (ı); British Pound (£); eth (ð). aVOYAGER COLUMN 4: Dagger (DO NOT USE); o Hook (Æ¡); u Hook (ư); Beta β; Gamma γ; Superscript 0 (â°); Superscript 1 (¹); Superscript 2 (²); Superscript 3 (³). aVOYAGER COLUMN 5: Superscript 4 (â´); Superscript 5 (âµ); Superscript 6 (â¶); Superscript 7 (â·); Superscript 8 (â¸); Superscript 9 (â¹); Superscript + (âº); Superscript - (â»); Superscript ( (â½). aVOYAGER COLUMN 6: Superscript ) (â¾); Subscript 0 (â‚€); Subscript 1 (â‚); Subscript 2 (â‚‚); Subscript 3 (₃); Subscript 4 (â‚„); Subscript 5 (â‚…); Subscript 6 (₆); Subscript 7 (₇). aVOYAGER COLUMN 7: Subscript 8 (₈); Subscript 9 (₉); Subscript + (₊); Subscript - (â‚‹); Subscript ( (â‚); Subscript ) (₎); Pseudo Question Mark (ỏ); Grave (oÌ€); Acute (oÌ). aVOYAGER COLUMN 8: Circumflex (oÌ‚); Tilde (õ); Macron (oÌ„); Breve (ŏ); Superior Dot (ȯ); Umlaut (ö); Hacek (oÌŒ); Circle Above (oÌŠ); Ligature left (oÍ¡). aVOYAGER COLUMN 9: Ligature right (o) ; High Comma off center (oÌ•); Double Acute (oÌ‹); Candrabindu (oÌ); Cedilla (o̧); Right Hook (ǫ); Dot Below (oÌ£); Double Dot Below (o̤); Circle Below (oÌ¥). aVOYAGER COLUMN 10: Double Underscore (o̳); Underscore (o̲); Left Hook (o̦); Right Cedilla (oÌœ); Upadhmaniya (oÌ®); Double Tilde 1st half (oÍ ); Double Tilde 2nd half (o) ; High Comma centered (oÌ“). aVOYAGER PC Keyboard: Spacing Circumflex (^); Spacing Underscore (_); Spacing Grave (`); Open Curly Bracket ({); Close Curly Bracket (}); Spacing Tilde (~). aStandard PC Keyboard: 1234567890-= !@#$%^&*()_+ qwertyuiop[]\ QWERTYUIOP{}| asdfghjkl;' ASDFGHJKL:" zxcvbnm,./ ZXCVBNM<>?yaz-4.2.30/test/test_icu.0.output0000644000175000017500000000020011733047144013536 000000000000001 1 'børn' 'Børn' 2 2 'le' 'Le' 3 2 'carré' 'Carré' 4 3 'le' 'Le' 5 3 'carre' 'Carre' 6 4 'le' 'Le' 7 4 'carreÌ' 'CarreÌ' yaz-4.2.30/test/marc5.xml.marc0000644000175000017500000000075411741237740012771 0000000000000000492nam a22001455a 450000100100000000500170001000800410002710000520006824501040012025000140022426000230023830000160026165000510027765000180032800027748520051026111436.0050413s1894 gr 000 0 gre d1 aΜαÏοÏδης, Κωνσταντίνος Ιω10aΕλληνικόν κÏυπτογÏαφικόν λεξικόν /cΚωνστ. Ι. ΜαÏοÏδης. η εκδ. aΑθήνα,c1894. a248 σελ. 0aGreek language, ModernxDialectsvDictionaries 0aCryptography.yaz-4.2.30/test/test_oid.c0000644000175000017500000000421311733047144012265 00000000000000/* This file is part of the YAZ toolkit. * Copyright (C) 1995-2012 Index Data * See the file LICENSE for details. */ #if HAVE_CONFIG_H #include #endif #include #include #include #include #include static void tst(void) { char oid_buf[OID_STR_MAX]; const char *n; yaz_oid_db_t db; const Odr_oid *c_oid; Odr_oid *oid; NMEM nmem = nmem_create(); ODR odr = odr_createmem(ODR_ENCODE); db = yaz_oid_std(); YAZ_CHECK(db); c_oid = yaz_string_to_oid(db, CLASS_ATTSET, "Bib-1"); YAZ_CHECK(c_oid && oid_oidcmp(c_oid, yaz_oid_attset_bib_1) == 0); c_oid = yaz_string_to_oid(db, CLASS_GENERAL, "Bib-1"); YAZ_CHECK(c_oid && oid_oidcmp(c_oid, yaz_oid_attset_bib_1) == 0); c_oid = yaz_string_to_oid(db, CLASS_ATTSET, "unknown"); YAZ_CHECK(c_oid == 0); oid = yaz_string_to_oid_nmem(db, CLASS_ATTSET, "1.2.840.10003.3.1", nmem); YAZ_CHECK(oid && !oid_oidcmp(oid, yaz_oid_attset_bib_1)); oid = yaz_string_to_oid_nmem(db, CLASS_ATTSET, "unknown", nmem); YAZ_CHECK(oid == 0); oid = yaz_string_to_oid_odr(db, CLASS_ATTSET, "1.2.840.10003.3.1", odr); YAZ_CHECK(oid && !oid_oidcmp(oid, yaz_oid_attset_bib_1)); oid = yaz_string_to_oid_odr(db, CLASS_ATTSET, "unknown", odr); YAZ_CHECK(oid == 0); n = yaz_oid_to_string(db, yaz_oid_attset_bib_1, 0); YAZ_CHECK(n && !strcmp(n, "Bib-1")); n = oid_name_to_dotstring(CLASS_ATTSET, "Bib-1", oid_buf); YAZ_CHECK(n && !strcmp(n, "1.2.840.10003.3.1")); n = oid_name_to_dotstring(CLASS_DIAGSET, "Bib-1", oid_buf); YAZ_CHECK(n && !strcmp(n, "1.2.840.10003.4.1")); n = oid_name_to_dotstring(CLASS_DIAGSET, "unknown", oid_buf); YAZ_CHECK(!n); n = oid_name_to_dotstring(CLASS_DIAGSET, "1.2.840.10003.3.1", oid_buf); YAZ_CHECK(!n); nmem_destroy(nmem); odr_destroy(odr); } int main (int argc, char **argv) { YAZ_CHECK_INIT(argc, argv); YAZ_CHECK_LOG(); tst(); YAZ_CHECK_TERM; } /* * Local variables: * c-basic-offset: 4 * c-file-style: "Stroustrup" * indent-tabs-mode: nil * End: * vim: shiftwidth=4 tabstop=8 expandtab */ yaz-4.2.30/test/test_match_glob.c0000644000175000017500000000325411733047144013615 00000000000000/* This file is part of the YAZ toolkit. * Copyright (C) 1995-2012 Index Data * See the file LICENSE for details. */ #if HAVE_CONFIG_H #include #endif #include #include #include #include void tst1(void) { YAZ_CHECK_EQ(yaz_match_glob("a", "a"), 1); YAZ_CHECK_EQ(yaz_match_glob("", ""), 1); YAZ_CHECK_EQ(yaz_match_glob("a", ""), 0); YAZ_CHECK_EQ(yaz_match_glob("", "a"), 0); YAZ_CHECK_EQ(yaz_match_glob("a", "b"), 0); YAZ_CHECK_EQ(yaz_match_glob("b", "a"), 0); YAZ_CHECK_EQ(yaz_match_glob("?", "a"), 1); YAZ_CHECK_EQ(yaz_match_glob("a", "?"), 0); YAZ_CHECK_EQ(yaz_match_glob("?", "aa"), 0); YAZ_CHECK_EQ(yaz_match_glob("?a", "aa"), 1); YAZ_CHECK_EQ(yaz_match_glob("a?", "aa"), 1); YAZ_CHECK_EQ(yaz_match_glob("??", "aa"), 1); YAZ_CHECK_EQ(yaz_match_glob("*", ""), 1); YAZ_CHECK_EQ(yaz_match_glob("*", "a"), 1); YAZ_CHECK_EQ(yaz_match_glob("**", "a"), 1); YAZ_CHECK_EQ(yaz_match_glob("*a", "a"), 1); YAZ_CHECK_EQ(yaz_match_glob("a*", "a"), 1); YAZ_CHECK_EQ(yaz_match_glob("b*", "a"), 0); YAZ_CHECK_EQ(yaz_match_glob("*b", "a"), 0); YAZ_CHECK_EQ(yaz_match_glob("**b", "a"), 0); YAZ_CHECK_EQ(yaz_match_glob("*b*", "a"), 0); YAZ_CHECK_EQ(yaz_match_glob("*:w", "title:w"), 1); YAZ_CHECK_EQ(yaz_match_glob("title:w", "title:w"), 1); YAZ_CHECK_EQ(yaz_match_glob("title:*", "title:w"), 1); } int main(int argc, char **argv) { YAZ_CHECK_INIT(argc, argv); tst1(); YAZ_CHECK_TERM; } /* * Local variables: * c-basic-offset: 4 * c-file-style: "Stroustrup" * indent-tabs-mode: nil * End: * vim: shiftwidth=4 tabstop=8 expandtab */ yaz-4.2.30/test/test_nmem.c0000644000175000017500000000733611733047144012457 00000000000000/* This file is part of the YAZ toolkit. * Copyright (C) 1995-2012 Index Data * See the file LICENSE for details. */ #if HAVE_CONFIG_H #include #endif #include #include #include #include #include void tst_nmem_malloc(void) { NMEM n; int j; char *cp; n = nmem_create(); YAZ_CHECK(n); for (j = 1; j<500; j++) { cp = (char *) nmem_malloc(n, j); YAZ_CHECK(cp); if ((int) sizeof(long) >= j) *(long*) cp = 123L; #if HAVE_LONG_LONG if ((int) sizeof(long long) >= j) *(long long*) cp = 123L; #endif if ((int) sizeof(double) >= j) *(double*) cp = 12.2; } for (j = 2000; j<20000; j+= 2000) { cp = (char *) nmem_malloc(n, j); YAZ_CHECK(cp); } nmem_destroy(n); } void tst_nmem_strsplit(void) { NMEM nmem = nmem_create(); int num = 0; char **array = 0; nmem_strsplit(nmem, ",", "", &array, &num); YAZ_CHECK(num == 0); nmem_strsplitx(nmem, ",", "", &array, &num, 0); YAZ_CHECK(num == 1); YAZ_CHECK(num > 0 && !strcmp(array[0], "")); nmem_strsplit(nmem, ",", ",,", &array, &num); YAZ_CHECK(num == 0); nmem_strsplitx(nmem, ",", ",,", &array, &num, 0); YAZ_CHECK(num == 3); YAZ_CHECK(num > 0 && !strcmp(array[0], "")); YAZ_CHECK(num > 1 && !strcmp(array[1], "")); YAZ_CHECK(num > 2 && !strcmp(array[2], "")); nmem_strsplit(nmem, ",", ",a,b,,cd", &array, &num); YAZ_CHECK(num == 3); YAZ_CHECK(num > 0 && !strcmp(array[0], "a")); YAZ_CHECK(num > 1 && !strcmp(array[1], "b")); YAZ_CHECK(num > 2 && !strcmp(array[2], "cd")); nmem_strsplitx(nmem, ",", ",a,b,,cd", &array, &num, 0); YAZ_CHECK(num == 5); YAZ_CHECK(num > 0 && !strcmp(array[0], "")); YAZ_CHECK(num > 1 && !strcmp(array[1], "a")); YAZ_CHECK(num > 2 && !strcmp(array[2], "b")); YAZ_CHECK(num > 3 && !strcmp(array[3], "")); YAZ_CHECK(num > 4 && !strcmp(array[4], "cd")); nmem_strsplit_escape(nmem, ",", ",a,b,,cd", &array, &num, 0, '\\'); YAZ_CHECK(num == 5); YAZ_CHECK(num > 0 && !strcmp(array[0], "")); YAZ_CHECK(num > 1 && !strcmp(array[1], "a")); YAZ_CHECK(num > 2 && !strcmp(array[2], "b")); YAZ_CHECK(num > 3 && !strcmp(array[3], "")); YAZ_CHECK(num > 4 && !strcmp(array[4], "cd")); nmem_strsplit_escape(nmem, ",", ",a,b\\,,cd", &array, &num, 0, '\\'); YAZ_CHECK(num == 4); YAZ_CHECK(num > 0 && !strcmp(array[0], "")); YAZ_CHECK(num > 1 && !strcmp(array[1], "a")); YAZ_CHECK(num > 2 && !strcmp(array[2], "b,")); YAZ_CHECK(num > 3 && !strcmp(array[3], "cd")); nmem_strsplit_escape(nmem, ",", "\\,a,b\\,,c\\d", &array, &num, 0, '\\'); YAZ_CHECK(num == 3); YAZ_CHECK(num > 0 && !strcmp(array[0], ",a")); YAZ_CHECK(num > 1 && !strcmp(array[1], "b,")); YAZ_CHECK(num > 2 && !strcmp(array[2], "cd")); nmem_strsplit_escape2(nmem, ",", "\\,a,b\\,\\,c\\\\\\|d", &array, &num, 0, '\\', 1); YAZ_CHECK(num == 2); YAZ_CHECK(num > 0 && !strcmp(array[0], ",a")); YAZ_CHECK(num > 1 && !strcmp(array[1], "b,,c\\|d")); nmem_strsplit_escape2(nmem, ",", "\\,a,b\\,\\,c\\\\\\|d", &array, &num, 0, '\\', 0); YAZ_CHECK(num == 2); YAZ_CHECK(num > 0 && !strcmp(array[0], "\\,a")); YAZ_CHECK(num > 1 && !strcmp(array[1], "b\\,\\,c\\\\\\|d")); nmem_destroy(nmem); } int main (int argc, char **argv) { YAZ_CHECK_INIT(argc, argv); YAZ_CHECK_LOG(); tst_nmem_malloc(); tst_nmem_strsplit(); YAZ_CHECK_TERM; } /* * Local variables: * c-basic-offset: 4 * c-file-style: "Stroustrup" * indent-tabs-mode: nil * End: * vim: shiftwidth=4 tabstop=8 expandtab */ yaz-4.2.30/test/xml2tmarc8.xml.marc0000644000175000017500000000512311741237740013756 0000000000000002643nam^a2200469^^^4500001001400000005001700014006001900031007001500050008004100065035001500106037009000121040004500211100002300256245028100279246006300560246006300623260014400686300001100830500001300841500005700854500009300911500002501004500005701029510002401086530004201110533008901152655002901241650004301270700003601313700002801349793003101377852001501408852001401423856015401437856015401591852003001745852002801775856015401803856014901957830004702106901002002153UCD-00259230120061209034435.0m d cr bn |||a|bb|920330s1583 enk s 000 0 eng d a99851339eo aCL0036000039bProQuest Information and Learning. 300 N. Zeeb Rd., Ann Arbor, MI 48106 aCu-RivEScCu-RivESdCStRLINedcrbdWaOLN1 aClinton, Atkinson.00aClinton, Purser & Arnold, to their countreymen wheresoeuerh[electronic resource] :bWherein is described by their own hands their vnfeigned penitence for their offences past: their patience in welcoming their death, & their duetiful minds towardes her most excellent Maiestie2 aClinton, Purser & Arnold, to their countreymen wheresoever2 aClinton, Purser & Arnold, to their countreymen wheresoever aLondon :bImprinted by Iohn Wolfe and are to be sold [by W. Wright] at the middle shop in the Poultry, ioyning S. Mildreds Church,c[1583?] a[12] p aIn verse aThe first poem is signed: Thomas Walton alias Purser aClinton's full name and bookseller's name from, and publication date conjectured by, STC aSignatures: Aâ´ B² aReproduction of the original in the Bodleian Library4 aSTC (2nd ed.)c5431 aAlso issued in print and on microform aElectronic reproduction.nMode of access: World Wide Web.nRestricted to UC campuses 7aElectronic texts.2local 0aPirateszEnglandvEarly works to 1800.1 aWalton, Thomas,dfl. 1583.4aut1 aArnold,dfl. 1583.4aut0 aEarly English books online aMERbkmain aSCBbnnet40zRestricted to UC campusesxSCP UCSDuhttp://gateway.proquest.com/openurl?ctx_ver=Z39.88-2003&res_id=xri:eebo&rft_val_fmt=&rft_id=xri:eebo:image:1661040zRestricted to UC campusesxSCP UCSDuhttp://gateway.proquest.com/openurl?ctx_ver=Z39.88-2003&res_id=xri:eebo&rft_val_fmt=&rft_id=xri:eebo:image:16610 aDVXLbELECT-GENhInternet aLAGEbin3Online access40zRestricted to UC campusesxSCP UCSDuhttp://gateway.proquest.com/openurl?ctx_ver=Z39.88-2003&res_id=xri:eebo&rft_val_fmt=&rft_id=xri:eebo:image:1661040zRestricted to UC campusesuhttp://gateway.proquest.com/openurl?ctx_ver=Z39.88-2003&res_id=xri:eebo&rft_val_fmt=&rft_id=xri:eebo:image:16610xCDL 0aEarly English books, 1475-1640 ;v1406:13. aDVXLb002592301yaz-4.2.30/test/marc4.chr0000644000175000017500000000001311741237740012007 00000000000000iso-8859-1 yaz-4.2.30/test/marc8.chr0000644000175000017500000000000711741237740012016 00000000000000marc-8 yaz-4.2.30/test/test_wrbuf.c0000644000175000017500000000356111733047144012644 00000000000000/* This file is part of the YAZ toolkit. * Copyright (C) 1995-2012 Index Data * See the file LICENSE for details. */ #if HAVE_CONFIG_H #include #endif #include #include #include #include static void tstwrbuf(void) { int step; WRBUF wr; wr = 0; wrbuf_destroy(wr); wr = wrbuf_alloc(); YAZ_CHECK(wr); wrbuf_destroy(wr); wr = wrbuf_alloc(); YAZ_CHECK(wr); for (step = 1; step < 65; step++) { int i, j, k; int len; char buf[64]; char *cp; for (j = 1; j?yaz-4.2.30/test/xml2marc2.xml.marc0000644000175000017500000000214111741237740013561 0000000000000001121nam0a32002171 450 001002800000004001000028008002800038009001100066039000900077100001900086245005900105260003300164300001000197512007300207531001400280538001900294652001500313666004900328795050600377795002000883000a9 182 502 3b710100fa000rcae000tsufa1995bgblengv0000asgxc000abef000aMimmshGarnet000aCry babyaWarm and soulfuleGarnet Mimms ... [et al.]000aBury St. EdmundsbBGOc1995000n1 cd000aIndspilninger publiceret 1963 (Cry baby) og 1965 (Warm and soulful)000aIndhold:000fBGOgBGOCD268000m78.794v4000msoulmrhythm & bluesnvokalp1960-1969lUSA000Ã¥11aCry babyaNobody but youaUntil you were goneaAnytime you want meaSo closeaFor your precious loveaBaby don't you weepaA ¤quiet placeaCry to meaDon't change your heartaWanting youaThe ¤truth hurtsaI'll take good care of youaLooking for youaIt won't hurt (half as much)aIt was easier to hurt heraThinkin'aProve it to meaMore than a miracleaAs long as I have youaOne girlaThere goes my babyaIt's just a matter of timeaA ¤little bit of soapaLook awayaI'll make it up to you000Ã¥40y0a1 girlyaz-4.2.30/test/test_icu.2.output0000644000175000017500000000004111733047144013543 000000000000001 1 '‘a' ' '' 2 2 '“a'' ' '' yaz-4.2.30/test/test_libstemmer.c0000644000175000017500000000366211733047144013664 00000000000000/* This file is part of the YAZ toolkit. * Copyright (C) 1995-2012 Index Data * See the file LICENSE for details. */ #if HAVE_CONFIG_H #include "config.h" #endif #include #include #include #include #if YAZ_HAVE_ICU #include int test_stemmer_stem(yaz_stemmer_p stemmer, const char* to_stem, const char *expected) { struct icu_buf_utf16 *src = icu_buf_utf16_create(0); struct icu_buf_utf16 *dst = icu_buf_utf16_create(0); struct icu_buf_utf8 *dst8 = icu_buf_utf8_create(0); int rc = 0; UErrorCode status; const char *result; icu_utf16_from_utf8_cstr(src, to_stem, &status); yaz_stemmer_stem(stemmer, dst, src, &status); if (status == U_ZERO_ERROR) { icu_utf16_to_utf8(dst8, dst, &status); result = icu_buf_utf8_to_cstr(dst8); rc = strcmp(result, expected) == 0; } icu_buf_utf8_destroy(dst8); icu_buf_utf16_destroy(src); icu_buf_utf16_destroy(dst); return rc; } static void tst(void) { UErrorCode status; //== U_ZERO_ERROR; yaz_stemmer_p stemmer = yaz_stemmer_create("en", "porter", &status); YAZ_CHECK(stemmer); /* fail */ YAZ_CHECK(test_stemmer_stem(stemmer, "beer", "water") == 0 ); /* Same */ YAZ_CHECK(test_stemmer_stem(stemmer, "adadwwr", "adadwwr")); /* Remove S */ YAZ_CHECK(test_stemmer_stem(stemmer, "beers", "beer")); YAZ_CHECK(test_stemmer_stem(stemmer, "persons", "person")); /* Remove s and ing */ YAZ_CHECK(test_stemmer_stem(stemmer, "runs", "run")); YAZ_CHECK(test_stemmer_stem(stemmer, "running", "run")); yaz_stemmer_destroy(stemmer); } #endif int main (int argc, char **argv) { YAZ_CHECK_INIT(argc, argv); #if YAZ_HAVE_ICU tst(); #endif YAZ_CHECK_TERM; } /* * Local variables: * c-basic-offset: 4 * c-file-style: "Stroustrup" * indent-tabs-mode: nil * End: * vim: shiftwidth=4 tabstop=8 expandtab */ yaz-4.2.30/test/tmarc9.xml0000644000175000017500000000751311741237740012240 00000000000000 02075cas a22005055a 4500 2005336282 DLC 20070911033614.0 070910c20059999mr uu p f0 0ara 2005336282 -3-7-0709110002-p----- (OCoLC)170490164 7 und serials u ncip 19 n-oclcserc DLC DLC DLC ara fre lc f-mr--- IN PROCESS (3 880-01 QadÌ£āʼ al-usrah : majallah mutakhasÌ£sÌ£isÌ£ah / WizaÌ„rat al-Ê»Adl. Justice de la famille 880-02 Majallat QadÌ£āʼ al-usrah <2006> 880-03 al-RabaÌ„tÌ£ : JamÊ»iÌ„yat Nashr al-MaÊ»luÌ„mah al-QaÌ„nuÌ„niÌ„yah wa-al-QadÌ£āʼiÌ„yah, 2005- v. : ill. ; 24 cm. Irregular (semiannual) 880-04 al-Ê»Adad 1. (YuÌ„lyuÌ„z 2005)- 880-05 ManshuÌ„raÌ„t JamÊ»iÌ„yat Nashr al-MaÊ»luÌ„mah al-QaÌ„nuÌ„niÌ„yah wa-al-QadÌ£āʼiÌ„yah Some issues have also a distinctive title. Latest issue consulted: al-Ê»Adad 3. (Dujanbir 2006). Chiefly in Arabic; some French. Domestic relations (Islamic law) Morocco. Divorce (Islamic law) Marriage law Morocco. Law reports, digests, etc. Morocco. 880-06 JamÊ»iÌ„yat Nashr al-MaÊ»luÌ„mah al-QaÌ„nuÌ„niÌ„yah wa-al-QadÌ£āʼiÌ„yah. 880-07 Morocco. WizaÌ„rat al-Ê»Adl. DLC 245-01/(3/r قضاء الأسرة : مجلة متخصصة / وزارة العدل. 246-02/(3/r مجلة قضاء الأسرة <2006> 260-03/(3/r الرباط : جمعية نشر المعلومة القانونية والقضائية، 2005- 362-04/(3/r العدد 1. (يوليوز 2005)- 490-05/(3/r منشورات جمعية نشر المعلومة القانونية والقضائية 710-06/(3/r جمعية نشر المعلومة القانونية والقضائية. 710-07/(3/r Morocco. وزارة العدل. LC Cairo Office [we 45] yaz-4.2.30/test/xml2tmarc7.xml.marc0000644000175000017500000000604511741237740013761 0000000000000003109cam a2200349 i 4500001001300000003000400013005001700017008004100034035001000075035001000085035001000095040001300105906004500118010001700163245005200180260002100232300002100253500004300274500017600317500020000493500016100693500019500854500017801049500022001227500020501447500019901652500017701851500021402028500021502242500016102457500014102618 77123332 DLC20051218154744.0981008b2001 ilu 000 0 eng  a57779 a90490 a93202 aDLCcDLC a0bundcorignewduencipf19gy-gencatlg a 77123332 00aVoyager Diacritic test -- New input 001 (SBIE). any :bny,c2001. a100 p. ;c12 cm. aNew copy imported from file (8/12/99). aVOYAGER COLUMN 0 (NEW): Degree sign (°); Phono Copyright mark (â„—); Copyright mark (©); Sharp (♯); Inverted Question mark (¿); Inverted Exclamation mark (¡). aVOYAGER COLUMN 1: Script L (â„“); Polish L (Å); Scandanavian O (Ø); D with Crossbar (Ä); Icelandic Thorn (Þ); AE Digraph (Æ); OE Digraph (Å’); Miagkii Znak (ʹ); Dot at Midline (·). aVOYAGER COLUMN 2: Musical Flat (â™­); Patent Mark (®); Plus or Minus (±); O Hook (Æ ); U Hook (Ư); Alif (ʼ); alpha α; Ayn (Ê»); Polish l (Å‚). aVOYAGER COLUMN 3: Scandanavian o (ø); d with crossbar (Ä‘); Icelandic Thorn (þ); ae Digraph (æ); oe Digraph (Å“); Tverdii Znak (ʺ); Turkish i (ı); British Pound (£); eth (ð). aVOYAGER COLUMN 4: Dagger (DO NOT USE); o Hook (Æ¡); u Hook (ư); Beta β; Gamma γ; Superscript 0 (â°); Superscript 1 (¹); Superscript 2 (²); Superscript 3 (³). aVOYAGER COLUMN 5: Superscript 4 (â´); Superscript 5 (âµ); Superscript 6 (â¶); Superscript 7 (â·); Superscript 8 (â¸); Superscript 9 (â¹); Superscript + (âº); Superscript - (â»); Superscript ( (â½). aVOYAGER COLUMN 6: Superscript ) (â¾); Subscript 0 (â‚€); Subscript 1 (â‚); Subscript 2 (â‚‚); Subscript 3 (₃); Subscript 4 (â‚„); Subscript 5 (â‚…); Subscript 6 (₆); Subscript 7 (₇). aVOYAGER COLUMN 7: Subscript 8 (₈); Subscript 9 (₉); Subscript + (₊); Subscript - (â‚‹); Subscript ( (â‚); Subscript ) (₎); Pseudo Question Mark (ỏ); Grave (oÌ€); Acute (oÌ). aVOYAGER COLUMN 8: Circumflex (oÌ‚); Tilde (õ); Macron (oÌ„); Breve (ŏ); Superior Dot (ȯ); Umlaut (ö); Hacek (oÌŒ); Circle Above (oÌŠ); Ligature left (oÍ¡). aVOYAGER COLUMN 9: Ligature right (o) ; High Comma off center (oÌ•); Double Acute (oÌ‹); Candrabindu (oÌ); Cedilla (o̧); Right Hook (ǫ); Dot Below (oÌ£); Double Dot Below (o̤); Circle Below (oÌ¥). aVOYAGER COLUMN 10: Double Underscore (o̳); Underscore (o̲); Left Hook (o̦); Right Cedilla (oÌœ); Upadhmaniya (oÌ®); Double Tilde 1st half (oÍ ); Double Tilde 2nd half (o) ; High Comma centered (oÌ“). aVOYAGER PC Keyboard: Spacing Circumflex (^); Spacing Underscore (_); Spacing Grave (`); Open Curly Bracket ({); Close Curly Bracket (}); Spacing Tilde (~). aStandard PC Keyboard: 1234567890-= !@#$%^&*()_+ qwertyuiop[]\ QWERTYUIOP{}| asdfghjkl;' ASDFGHJKL:" zxcvbnm,./ ZXCVBNM<>?yaz-4.2.30/test/marccol3.u8.2.lst0000644000175000017500000000227311654451754013245 0000000000000001373cam a2200349ua 4500 001 82129893 003 DLC 005 20070808062021.0 008 841102s1980 cc a 000 0 chi 035 $a (DLC)5011703 010 $a 82129893 035 $a (CStRLIN)DCLP84-B3561 040 $a DLC-R $c DLC-R $d CStRLIN $d DLC 050 00 $a TL546.7 $b .S48 1980 066 $c $1 082 00 $a 629.4 $2 19 100 1 $6 880-01 $a Shen, Guoliang. 245 10 $6 880-02 $a Yu zhou hang xing he shu li hua / $c Shen Guoliang wen ; Chen Genxiang tu. 250 $6 880-03 $a Di 1 ban. 260 $6 880-04 $a [Canton] : $b Guangdong ren min chu ban she : $b Guangdong sheng xin hua shu dian fa xing, $c 1980. 300 $a 199 p. : $b ill. ; $c 19 cm. 440 0 $6 880-05 $a Ke xue zhi shi pu ji cong shu 650 0 $a Astronautics $x Popular works. 700 1 $6 880-06 $a Chen, Genxiang. 880 1 $6 100-01/1 $a 沈 国良. 880 10 $6 245-02/1 $a 宇宙 航行 和 数ç†åŒ– / $c 沈 国良 文 ; 陈 根祥 图. 880 $6 250-03/1 $a 第1版. 880 $6 260-04/1 $a [Canton] : $b 广东 人民 出版社 : $b 广东çœã€€æ–°è¯ã€€æ›¸åº— å‘行, $c 1980. 880 0 $6 440-05/1 $a 科学 知识 普åŠã€€ä¸›ä¹¦ 880 1 $6 700-06/1 $a 陈 根祥. 906 $a 0 $b cbc $c orignew $d u $e ncip $f 19 $g y-rlinjack 985 $a spacingreload yaz-4.2.30/test/xml2tmarc3.xml.marc0000644000175000017500000000162211741237740013751 0000000000000000914naa a2200337 450 001001700000004000900017008002400026009001000050041000800060041000800068097000700076245003300083300002600116557003300142630001600175630001300191633001000204633000900214648006100223648001600284648005400300J01000600354BAS000500360LKR004200365CAT003000407CAT003000437CAT003000467CAT003900497CAT002600536UID001400562 aa00001508fa airn a1991bxxlnortav9 aagxx anor deng00a06 aByfornyelse ved Ibsen-Ringen bfarvefotobplanbsnit aByggekunstj1991v1/2k41-45 fbyfornyelse fsanering fNorge fOslo aTelje Torp Aasen ArkitektkontorcKristian Augustsgate 7B aEng, Dagfin ranlund, TomcKristian AugustsgatecPilestredet 19 aa 0 aITMlARK50b0000145y1991i1/2k41-45 abc20020111lARK01h2002 abc20020111lARK01h2116 abc20021002lARK01h1000 aICLLOADb00c20021122lARK01h1948 c20030618lARK01h1330 aa00001508yaz-4.2.30/test/test_odrcodec.c0000644000175000017500000000160311733064253013274 00000000000000/** \file test_odrcodec.c \brief ASN.1 Module test_odrcodec Generated automatically by YAZ ASN.1 Compiler 0.4 */ #if HAVE_CONFIG_H #include #endif #include int yc_MySequence(ODR o, Yc_MySequence **p, int opt, const char *name) { if (!odr_sequence_begin(o, p, sizeof(**p), name)) return odr_missing(o, opt, name) && odr_ok (o); return odr_implicit_tag(o, odr_integer, &(*p)->first, ODR_CONTEXT, 1, 0, "first") && odr_implicit_tag(o, odr_octetstring, &(*p)->second, ODR_CONTEXT, 2, 0, "second") && odr_implicit_tag(o, odr_bool, &(*p)->third, ODR_CONTEXT, 3, 0, "third") && odr_implicit_tag(o, odr_null, &(*p)->fourth, ODR_CONTEXT, 4, 0, "fourth") && odr_implicit_tag(o, odr_integer, &(*p)->fifth, ODR_CONTEXT, 5, 0, "fifth") && odr_implicit_tag(o, odr_oid, &(*p)->myoid, ODR_CONTEXT, 6, 0, "myoid") && odr_sequence_end(o); } yaz-4.2.30/test/xml2marc9.xml.marc0000644000175000017500000000430411741237740013573 0000000000000002244cas a22005055a 4500001001300000003000400013005001700017008004100034010001700075012003100092035002100123906004500144040001800189041001300207042000700220043001200227050001500239066000700254245008700261246002600348246004900374260011100423300002500534310002700559362004400586490010100630500004700731500005800778546003600836650004700872650002600919650002700945650004100972710008801013710004201101850000801143880009001151880005601241880011501297880005201412880010501464880009101569880005001660936002801710 2005336282DLC20070911033614.0070910c20059999mr uu p f0 0ara  a 2005336282 a-3-7-0709110002-p-----  a(OCoLC)170490164 a7bundcserialsduencipf19gn-oclcserc aDLCcDLCdDLC0 aaraafre alc af-mr---00aIN PROCESS c(3006880-01aQadÌ£āʼ al-usrah :bmajallah mutakhasÌ£sÌ£isÌ£ah /cWizaÌ„rat al-Ê»Adl.13aJustice de la famille136880-02aMajallat QadÌ£āʼ al-usrahf<2006> 6880-03aal-RabaÌ„tÌ£ :bJamÊ»iÌ„yat Nashr al-MaÊ»luÌ„mah al-QaÌ„nuÌ„niÌ„yah wa-al-QadÌ£āʼiÌ„yah,c2005- av. :bill. ;c24 cm. aIrregular (semiannual)0 6880-04aal-Ê»Adad 1. (YuÌ„lyuÌ„z 2005)-0 6880-05aManshuÌ„raÌ„t JamÊ»iÌ„yat Nashr al-MaÊ»luÌ„mah al-QaÌ„nuÌ„niÌ„yah wa-al-QadÌ£āʼiÌ„yah aSome issues have also a distinctive title. aLatest issue consulted: al-Ê»Adad 3. (Dujanbir 2006). aChiefly in Arabic; some French. 0aDomestic relations (Islamic law)zMorocco. 0aDivorce (Islamic law) 0aMarriage lawzMorocco. 0aLaw reports, digests, etc.zMorocco.2 6880-06aJamÊ»iÌ„yat Nashr al-MaÊ»luÌ„mah al-QaÌ„nuÌ„niÌ„yah wa-al-QadÌ£āʼiÌ„yah.1 6880-07aMorocco.bWizaÌ„rat al-Ê»Adl. aDLC006245-01/(3/raقضاء الأسرة :bمجلة متخصصة /cوزارة العدل.136246-02/(3/raمجلة قضاء الأسرةf<2006> 6260-03/(3/raالرباط :bجمعية نشر المعلومة القانونية والقضائية،c2005-0 6362-04/(3/raالعدد 1. (يوليوز 2005)-0 6490-05/(3/raمنشورات جمعية نشر المعلومة القانونية والقضائية2 6710-06/(3/raجمعية نشر المعلومة القانونية والقضائية.1 6710-07/(3/raMorocco.bوزارة العدل. aLC Cairo Office [we 45]yaz-4.2.30/test/tmarc5.xml.marc0000644000175000017500000000075411741237740013155 0000000000000000492nam a22001455a 450000100100000000500170001000800410002710000520006824501040012025000140022426000230023830000160026165000510027765000180032800027748520051026111436.0050413s1894 gr 000 0 gre d1 aΜαÏοÏδης, Κωνσταντίνος Ιω10aΕλληνικόν κÏυπτογÏαφικόν λεξικόν /cΚωνστ. Ι. ΜαÏοÏδης. η εκδ. aΑθήνα,c1894. a248 σελ. 0aGreek language, ModernxDialectsvDictionaries 0aCryptography.yaz-4.2.30/test/test_xml_include.xml0000644000175000017500000000001411733047144014366 00000000000000some yaz-4.2.30/test/Makefile.in0000644000175000017500000011616511741237726012374 00000000000000# Makefile.in generated by automake 1.11.3 from Makefile.am. # @configure_input@ # Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, # 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011 Free Software # Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ VPATH = @srcdir@ pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ check_PROGRAMS = test_ccl$(EXEEXT) test_comstack$(EXEEXT) \ test_cql2ccl$(EXEEXT) test_filepath$(EXEEXT) \ test_file_glob$(EXEEXT) test_iconv$(EXEEXT) test_icu$(EXEEXT) \ test_json$(EXEEXT) test_libstemmer$(EXEEXT) test_log$(EXEEXT) \ test_log_thread$(EXEEXT) test_match_glob$(EXEEXT) \ test_matchstr$(EXEEXT) test_mutex$(EXEEXT) test_nmem$(EXEEXT) \ test_odr$(EXEEXT) test_odrstack$(EXEEXT) test_oid$(EXEEXT) \ test_options$(EXEEXT) test_pquery$(EXEEXT) \ test_query_charset$(EXEEXT) test_record_conv$(EXEEXT) \ test_rpn2cql$(EXEEXT) test_rpn2solr$(EXEEXT) \ test_retrieval$(EXEEXT) test_shared_ptr$(EXEEXT) \ test_soap1$(EXEEXT) test_soap2$(EXEEXT) test_solr$(EXEEXT) \ test_sortspec$(EXEEXT) test_timing$(EXEEXT) \ test_tpath$(EXEEXT) test_wrbuf$(EXEEXT) test_xmalloc$(EXEEXT) \ test_xml_include$(EXEEXT) test_xmlquery$(EXEEXT) subdir = test DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/m4/ac_check_icu.m4 \ $(top_srcdir)/m4/acx_pthread.m4 $(top_srcdir)/m4/libtool.m4 \ $(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \ $(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \ $(top_srcdir)/m4/yaz.m4 $(top_srcdir)/m4/yaz_libxml2.m4 \ $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/include/config.h CONFIG_CLEAN_VPATH_FILES = am_test_ccl_OBJECTS = test_ccl.$(OBJEXT) test_ccl_OBJECTS = $(am_test_ccl_OBJECTS) test_ccl_LDADD = $(LDADD) test_ccl_DEPENDENCIES = ../src/libyaz.la am_test_comstack_OBJECTS = test_comstack.$(OBJEXT) test_comstack_OBJECTS = $(am_test_comstack_OBJECTS) test_comstack_LDADD = $(LDADD) test_comstack_DEPENDENCIES = ../src/libyaz.la am_test_cql2ccl_OBJECTS = test_cql2ccl.$(OBJEXT) test_cql2ccl_OBJECTS = $(am_test_cql2ccl_OBJECTS) test_cql2ccl_LDADD = $(LDADD) test_cql2ccl_DEPENDENCIES = ../src/libyaz.la am_test_file_glob_OBJECTS = test_file_glob.$(OBJEXT) test_file_glob_OBJECTS = $(am_test_file_glob_OBJECTS) test_file_glob_LDADD = $(LDADD) test_file_glob_DEPENDENCIES = ../src/libyaz.la am_test_filepath_OBJECTS = test_filepath.$(OBJEXT) test_filepath_OBJECTS = $(am_test_filepath_OBJECTS) test_filepath_LDADD = $(LDADD) test_filepath_DEPENDENCIES = ../src/libyaz.la am_test_iconv_OBJECTS = test_iconv.$(OBJEXT) test_iconv_OBJECTS = $(am_test_iconv_OBJECTS) test_iconv_LDADD = $(LDADD) test_iconv_DEPENDENCIES = ../src/libyaz.la am_test_icu_OBJECTS = test_icu.$(OBJEXT) test_icu_OBJECTS = $(am_test_icu_OBJECTS) am__DEPENDENCIES_1 = test_icu_DEPENDENCIES = ../src/libyaz_icu.la ../src/libyaz.la \ $(am__DEPENDENCIES_1) am_test_json_OBJECTS = test_json.$(OBJEXT) test_json_OBJECTS = $(am_test_json_OBJECTS) test_json_LDADD = $(LDADD) test_json_DEPENDENCIES = ../src/libyaz.la am_test_libstemmer_OBJECTS = test_libstemmer.$(OBJEXT) test_libstemmer_OBJECTS = $(am_test_libstemmer_OBJECTS) test_libstemmer_DEPENDENCIES = ../src/libyaz_icu.la ../src/libyaz.la \ $(am__DEPENDENCIES_1) am_test_log_OBJECTS = test_log.$(OBJEXT) test_log_OBJECTS = $(am_test_log_OBJECTS) test_log_LDADD = $(LDADD) test_log_DEPENDENCIES = ../src/libyaz.la am_test_log_thread_OBJECTS = test_log_thread.$(OBJEXT) test_log_thread_OBJECTS = $(am_test_log_thread_OBJECTS) test_log_thread_LDADD = $(LDADD) test_log_thread_DEPENDENCIES = ../src/libyaz.la am_test_match_glob_OBJECTS = test_match_glob.$(OBJEXT) test_match_glob_OBJECTS = $(am_test_match_glob_OBJECTS) test_match_glob_LDADD = $(LDADD) test_match_glob_DEPENDENCIES = ../src/libyaz.la am_test_matchstr_OBJECTS = test_matchstr.$(OBJEXT) test_matchstr_OBJECTS = $(am_test_matchstr_OBJECTS) test_matchstr_LDADD = $(LDADD) test_matchstr_DEPENDENCIES = ../src/libyaz.la am_test_mutex_OBJECTS = test_mutex.$(OBJEXT) test_mutex_OBJECTS = $(am_test_mutex_OBJECTS) test_mutex_LDADD = $(LDADD) test_mutex_DEPENDENCIES = ../src/libyaz.la am_test_nmem_OBJECTS = test_nmem.$(OBJEXT) test_nmem_OBJECTS = $(am_test_nmem_OBJECTS) test_nmem_LDADD = $(LDADD) test_nmem_DEPENDENCIES = ../src/libyaz.la am_test_odr_OBJECTS = test_odrcodec.$(OBJEXT) test_odr.$(OBJEXT) test_odr_OBJECTS = $(am_test_odr_OBJECTS) test_odr_LDADD = $(LDADD) test_odr_DEPENDENCIES = ../src/libyaz.la am_test_odrstack_OBJECTS = test_odrstack.$(OBJEXT) test_odrstack_OBJECTS = $(am_test_odrstack_OBJECTS) test_odrstack_LDADD = $(LDADD) test_odrstack_DEPENDENCIES = ../src/libyaz.la am_test_oid_OBJECTS = test_oid.$(OBJEXT) test_oid_OBJECTS = $(am_test_oid_OBJECTS) test_oid_LDADD = $(LDADD) test_oid_DEPENDENCIES = ../src/libyaz.la am_test_options_OBJECTS = test_options.$(OBJEXT) test_options_OBJECTS = $(am_test_options_OBJECTS) test_options_LDADD = $(LDADD) test_options_DEPENDENCIES = ../src/libyaz.la am_test_pquery_OBJECTS = test_pquery.$(OBJEXT) test_pquery_OBJECTS = $(am_test_pquery_OBJECTS) test_pquery_LDADD = $(LDADD) test_pquery_DEPENDENCIES = ../src/libyaz.la am_test_query_charset_OBJECTS = test_query_charset.$(OBJEXT) test_query_charset_OBJECTS = $(am_test_query_charset_OBJECTS) test_query_charset_LDADD = $(LDADD) test_query_charset_DEPENDENCIES = ../src/libyaz.la am_test_record_conv_OBJECTS = test_record_conv.$(OBJEXT) test_record_conv_OBJECTS = $(am_test_record_conv_OBJECTS) test_record_conv_LDADD = $(LDADD) test_record_conv_DEPENDENCIES = ../src/libyaz.la am_test_retrieval_OBJECTS = test_retrieval.$(OBJEXT) test_retrieval_OBJECTS = $(am_test_retrieval_OBJECTS) test_retrieval_LDADD = $(LDADD) test_retrieval_DEPENDENCIES = ../src/libyaz.la am_test_rpn2cql_OBJECTS = test_rpn2cql.$(OBJEXT) test_rpn2cql_OBJECTS = $(am_test_rpn2cql_OBJECTS) test_rpn2cql_LDADD = $(LDADD) test_rpn2cql_DEPENDENCIES = ../src/libyaz.la am_test_rpn2solr_OBJECTS = test_rpn2solr.$(OBJEXT) test_rpn2solr_OBJECTS = $(am_test_rpn2solr_OBJECTS) test_rpn2solr_LDADD = $(LDADD) test_rpn2solr_DEPENDENCIES = ../src/libyaz.la am_test_shared_ptr_OBJECTS = test_shared_ptr.$(OBJEXT) test_shared_ptr_OBJECTS = $(am_test_shared_ptr_OBJECTS) test_shared_ptr_LDADD = $(LDADD) test_shared_ptr_DEPENDENCIES = ../src/libyaz.la am_test_soap1_OBJECTS = test_soap1.$(OBJEXT) test_soap1_OBJECTS = $(am_test_soap1_OBJECTS) test_soap1_LDADD = $(LDADD) test_soap1_DEPENDENCIES = ../src/libyaz.la am_test_soap2_OBJECTS = test_soap2.$(OBJEXT) test_soap2_OBJECTS = $(am_test_soap2_OBJECTS) test_soap2_LDADD = $(LDADD) test_soap2_DEPENDENCIES = ../src/libyaz.la am_test_solr_OBJECTS = test_solr.$(OBJEXT) test_solr_OBJECTS = $(am_test_solr_OBJECTS) test_solr_LDADD = $(LDADD) test_solr_DEPENDENCIES = ../src/libyaz.la am_test_sortspec_OBJECTS = test_sortspec.$(OBJEXT) test_sortspec_OBJECTS = $(am_test_sortspec_OBJECTS) test_sortspec_LDADD = $(LDADD) test_sortspec_DEPENDENCIES = ../src/libyaz.la am_test_timing_OBJECTS = test_timing.$(OBJEXT) test_timing_OBJECTS = $(am_test_timing_OBJECTS) test_timing_LDADD = $(LDADD) test_timing_DEPENDENCIES = ../src/libyaz.la am_test_tpath_OBJECTS = test_tpath.$(OBJEXT) test_tpath_OBJECTS = $(am_test_tpath_OBJECTS) test_tpath_LDADD = $(LDADD) test_tpath_DEPENDENCIES = ../src/libyaz.la am_test_wrbuf_OBJECTS = test_wrbuf.$(OBJEXT) test_wrbuf_OBJECTS = $(am_test_wrbuf_OBJECTS) test_wrbuf_LDADD = $(LDADD) test_wrbuf_DEPENDENCIES = ../src/libyaz.la am_test_xmalloc_OBJECTS = test_xmalloc.$(OBJEXT) test_xmalloc_OBJECTS = $(am_test_xmalloc_OBJECTS) test_xmalloc_LDADD = $(LDADD) test_xmalloc_DEPENDENCIES = ../src/libyaz.la am_test_xml_include_OBJECTS = test_xml_include.$(OBJEXT) test_xml_include_OBJECTS = $(am_test_xml_include_OBJECTS) test_xml_include_LDADD = $(LDADD) test_xml_include_DEPENDENCIES = ../src/libyaz.la am_test_xmlquery_OBJECTS = test_xmlquery.$(OBJEXT) test_xmlquery_OBJECTS = $(am_test_xmlquery_OBJECTS) test_xmlquery_LDADD = $(LDADD) test_xmlquery_DEPENDENCIES = ../src/libyaz.la DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir)/include depcomp = $(SHELL) $(top_srcdir)/config/depcomp am__depfiles_maybe = depfiles am__mv = mv -f COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \ $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) LTCOMPILE = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \ --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \ $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) CCLD = $(CC) LINK = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \ --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) \ $(LDFLAGS) -o $@ SOURCES = $(test_ccl_SOURCES) $(test_comstack_SOURCES) \ $(test_cql2ccl_SOURCES) $(test_file_glob_SOURCES) \ $(test_filepath_SOURCES) $(test_iconv_SOURCES) \ $(test_icu_SOURCES) $(test_json_SOURCES) \ $(test_libstemmer_SOURCES) $(test_log_SOURCES) \ $(test_log_thread_SOURCES) $(test_match_glob_SOURCES) \ $(test_matchstr_SOURCES) $(test_mutex_SOURCES) \ $(test_nmem_SOURCES) $(test_odr_SOURCES) \ $(test_odrstack_SOURCES) $(test_oid_SOURCES) \ $(test_options_SOURCES) $(test_pquery_SOURCES) \ $(test_query_charset_SOURCES) $(test_record_conv_SOURCES) \ $(test_retrieval_SOURCES) $(test_rpn2cql_SOURCES) \ $(test_rpn2solr_SOURCES) $(test_shared_ptr_SOURCES) \ $(test_soap1_SOURCES) $(test_soap2_SOURCES) \ $(test_solr_SOURCES) $(test_sortspec_SOURCES) \ $(test_timing_SOURCES) $(test_tpath_SOURCES) \ $(test_wrbuf_SOURCES) $(test_xmalloc_SOURCES) \ $(test_xml_include_SOURCES) $(test_xmlquery_SOURCES) DIST_SOURCES = $(test_ccl_SOURCES) $(test_comstack_SOURCES) \ $(test_cql2ccl_SOURCES) $(test_file_glob_SOURCES) \ $(test_filepath_SOURCES) $(test_iconv_SOURCES) \ $(test_icu_SOURCES) $(test_json_SOURCES) \ $(test_libstemmer_SOURCES) $(test_log_SOURCES) \ $(test_log_thread_SOURCES) $(test_match_glob_SOURCES) \ $(test_matchstr_SOURCES) $(test_mutex_SOURCES) \ $(test_nmem_SOURCES) $(test_odr_SOURCES) \ $(test_odrstack_SOURCES) $(test_oid_SOURCES) \ $(test_options_SOURCES) $(test_pquery_SOURCES) \ $(test_query_charset_SOURCES) $(test_record_conv_SOURCES) \ $(test_retrieval_SOURCES) $(test_rpn2cql_SOURCES) \ $(test_rpn2solr_SOURCES) $(test_shared_ptr_SOURCES) \ $(test_soap1_SOURCES) $(test_soap2_SOURCES) \ $(test_solr_SOURCES) $(test_sortspec_SOURCES) \ $(test_timing_SOURCES) $(test_tpath_SOURCES) \ $(test_wrbuf_SOURCES) $(test_xmalloc_SOURCES) \ $(test_xml_include_SOURCES) $(test_xmlquery_SOURCES) ETAGS = etags CTAGS = ctags am__tty_colors = \ red=; grn=; lgn=; blu=; std= DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ AMTAR = @AMTAR@ AR = @AR@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CYGPATH_W = @CYGPATH_W@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DLLTOOL = @DLLTOOL@ DSSSL_DIR = @DSSSL_DIR@ DSYMUTIL = @DSYMUTIL@ DTD_DIR = @DTD_DIR@ DUMPBIN = @DUMPBIN@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ FGREP = @FGREP@ GREP = @GREP@ HTML_COMPILE = @HTML_COMPILE@ ICU_CFLAGS = @ICU_CFLAGS@ ICU_CONFIG = @ICU_CONFIG@ ICU_CPPFLAGS = @ICU_CPPFLAGS@ ICU_CXXFLAGS = @ICU_CXXFLAGS@ ICU_LIBS = @ICU_LIBS@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ LD = @LD@ LDFLAGS = @LDFLAGS@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ LIPO = @LIPO@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ MAKEINFO = @MAKEINFO@ MANIFEST_TOOL = @MANIFEST_TOOL@ MAN_COMPILE = @MAN_COMPILE@ MKDIR_P = @MKDIR_P@ NM = @NM@ NMEDIT = @NMEDIT@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ OTOOL = @OTOOL@ OTOOL64 = @OTOOL64@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ PDF_COMPILE = @PDF_COMPILE@ PTHREAD_CC = @PTHREAD_CC@ PTHREAD_CFLAGS = @PTHREAD_CFLAGS@ PTHREAD_LIBS = @PTHREAD_LIBS@ RANLIB = @RANLIB@ READLINE_LIBS = @READLINE_LIBS@ SED = @SED@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ SSL_CFLAGS = @SSL_CFLAGS@ SSL_LIBS = @SSL_LIBS@ STRIP = @STRIP@ TCLSH = @TCLSH@ TCPD_LIBS = @TCPD_LIBS@ TKL_COMPILE = @TKL_COMPILE@ VERSION = @VERSION@ VERSION_HEX = @VERSION_HEX@ VERSION_SHA1 = @VERSION_SHA1@ WIN_FILEVERSION = @WIN_FILEVERSION@ XML2_CFLAGS = @XML2_CFLAGS@ XSLTPROC_COMPILE = @XSLTPROC_COMPILE@ XSL_DIR = @XSL_DIR@ YACC = @YACC@ YAZ_CONFIG_CFLAGS = @YAZ_CONFIG_CFLAGS@ YAZ_CONF_CFLAGS = @YAZ_CONF_CFLAGS@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_ct_AR = @ac_ct_AR@ ac_ct_CC = @ac_ct_CC@ ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ acx_pthread_config = @acx_pthread_config@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ pkgconfigpath = @pkgconfigpath@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ check_SCRIPTS = test_marc.sh test_marccol.sh test_cql2xcql.sh \ test_cql2pqf.sh test_icu.sh TESTS = $(check_PROGRAMS) $(check_SCRIPTS) EXTRA_DIST = tstodr.asn test_odrcodec.c test_odrcodec.h cql2xcqlsample \ cql2pqf-order.txt cql2pqfsample \ $(check_SCRIPTS) \ marccol1.u8.marc marccol1.u8.1.lst marccol1.u8.2.lst \ marccol2.u8.marc marccol2.u8.1.lst marccol2.u8.2.lst \ marccol3.u8.marc marccol3.u8.1.lst marccol3.u8.2.lst \ marccol4.u8.marc marccol4.u8.1.lst marccol4.u8.2.lst \ marccol5.u8.marc marccol5.u8.1.lst marccol5.u8.2.lst \ test_icu.0.xml test_icu.0.input test_icu.0.output \ test_icu.1.xml test_icu.1.input test_icu.1.output \ test_icu.2.xml test_icu.2.input test_icu.2.output \ test_icu.3.xml test_icu.3.input test_icu.3.output \ test_record_conv.xsl test_xml_include.xml YAZCOMP = ../util/yaz-asncomp YAZCOMPLINE = $(YAZCOMP) -d z.tcl -i yaz -I../include $(YCFLAGS) AM_CPPFLAGS = -I$(top_srcdir)/include $(XML2_CFLAGS) $(ICU_CPPFLAGS) LDADD = ../src/libyaz.la test_icu_LDADD = ../src/libyaz_icu.la ../src/libyaz.la $(ICU_LIBS) test_libstemmer_LDADD = ../src/libyaz_icu.la ../src/libyaz.la $(ICU_LIBS) CONFIG_CLEAN_FILES = *.log test_cql2ccl_SOURCES = test_cql2ccl.c test_xmalloc_SOURCES = test_xmalloc.c test_iconv_SOURCES = test_iconv.c test_nmem_SOURCES = test_nmem.c test_matchstr_SOURCES = test_matchstr.c test_wrbuf_SOURCES = test_wrbuf.c test_odr_SOURCES = test_odrcodec.c test_odrcodec.h test_odr.c test_odrstack_SOURCES = test_odrstack.c test_ccl_SOURCES = test_ccl.c test_log_SOURCES = test_log.c test_mutex_SOURCES = test_mutex.c test_soap1_SOURCES = test_soap1.c test_soap2_SOURCES = test_soap2.c test_solr_SOURCES = test_solr.c test_sortspec_SOURCES = test_sortspec.c test_log_thread_SOURCES = test_log_thread.c test_xmlquery_SOURCES = test_xmlquery.c test_options_SOURCES = test_options.c test_pquery_SOURCES = test_pquery.c test_comstack_SOURCES = test_comstack.c test_filepath_SOURCES = test_filepath.c test_oid_SOURCES = test_oid.c test_record_conv_SOURCES = test_record_conv.c test_retrieval_SOURCES = test_retrieval.c test_tpath_SOURCES = test_tpath.c test_timing_SOURCES = test_timing.c test_query_charset_SOURCES = test_query_charset.c test_icu_SOURCES = test_icu.c test_match_glob_SOURCES = test_match_glob.c test_rpn2cql_SOURCES = test_rpn2cql.c test_rpn2solr_SOURCES = test_rpn2solr.c test_json_SOURCES = test_json.c test_xml_include_SOURCES = test_xml_include.c test_file_glob_SOURCES = test_file_glob.c test_shared_ptr_SOURCES = test_shared_ptr.c test_libstemmer_SOURCES = test_libstemmer.c all: all-am .SUFFIXES: .SUFFIXES: .c .lo .o .obj $(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu test/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --gnu test/Makefile .PRECIOUS: Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): clean-checkPROGRAMS: @list='$(check_PROGRAMS)'; test -n "$$list" || exit 0; \ echo " rm -f" $$list; \ rm -f $$list || exit $$?; \ test -n "$(EXEEXT)" || exit 0; \ list=`for p in $$list; do echo "$$p"; done | sed 's/$(EXEEXT)$$//'`; \ echo " rm -f" $$list; \ rm -f $$list test_ccl$(EXEEXT): $(test_ccl_OBJECTS) $(test_ccl_DEPENDENCIES) $(EXTRA_test_ccl_DEPENDENCIES) @rm -f test_ccl$(EXEEXT) $(LINK) $(test_ccl_OBJECTS) $(test_ccl_LDADD) $(LIBS) test_comstack$(EXEEXT): $(test_comstack_OBJECTS) $(test_comstack_DEPENDENCIES) $(EXTRA_test_comstack_DEPENDENCIES) @rm -f test_comstack$(EXEEXT) $(LINK) $(test_comstack_OBJECTS) $(test_comstack_LDADD) $(LIBS) test_cql2ccl$(EXEEXT): $(test_cql2ccl_OBJECTS) $(test_cql2ccl_DEPENDENCIES) $(EXTRA_test_cql2ccl_DEPENDENCIES) @rm -f test_cql2ccl$(EXEEXT) $(LINK) $(test_cql2ccl_OBJECTS) $(test_cql2ccl_LDADD) $(LIBS) test_file_glob$(EXEEXT): $(test_file_glob_OBJECTS) $(test_file_glob_DEPENDENCIES) $(EXTRA_test_file_glob_DEPENDENCIES) @rm -f test_file_glob$(EXEEXT) $(LINK) $(test_file_glob_OBJECTS) $(test_file_glob_LDADD) $(LIBS) test_filepath$(EXEEXT): $(test_filepath_OBJECTS) $(test_filepath_DEPENDENCIES) $(EXTRA_test_filepath_DEPENDENCIES) @rm -f test_filepath$(EXEEXT) $(LINK) $(test_filepath_OBJECTS) $(test_filepath_LDADD) $(LIBS) test_iconv$(EXEEXT): $(test_iconv_OBJECTS) $(test_iconv_DEPENDENCIES) $(EXTRA_test_iconv_DEPENDENCIES) @rm -f test_iconv$(EXEEXT) $(LINK) $(test_iconv_OBJECTS) $(test_iconv_LDADD) $(LIBS) test_icu$(EXEEXT): $(test_icu_OBJECTS) $(test_icu_DEPENDENCIES) $(EXTRA_test_icu_DEPENDENCIES) @rm -f test_icu$(EXEEXT) $(LINK) $(test_icu_OBJECTS) $(test_icu_LDADD) $(LIBS) test_json$(EXEEXT): $(test_json_OBJECTS) $(test_json_DEPENDENCIES) $(EXTRA_test_json_DEPENDENCIES) @rm -f test_json$(EXEEXT) $(LINK) $(test_json_OBJECTS) $(test_json_LDADD) $(LIBS) test_libstemmer$(EXEEXT): $(test_libstemmer_OBJECTS) $(test_libstemmer_DEPENDENCIES) $(EXTRA_test_libstemmer_DEPENDENCIES) @rm -f test_libstemmer$(EXEEXT) $(LINK) $(test_libstemmer_OBJECTS) $(test_libstemmer_LDADD) $(LIBS) test_log$(EXEEXT): $(test_log_OBJECTS) $(test_log_DEPENDENCIES) $(EXTRA_test_log_DEPENDENCIES) @rm -f test_log$(EXEEXT) $(LINK) $(test_log_OBJECTS) $(test_log_LDADD) $(LIBS) test_log_thread$(EXEEXT): $(test_log_thread_OBJECTS) $(test_log_thread_DEPENDENCIES) $(EXTRA_test_log_thread_DEPENDENCIES) @rm -f test_log_thread$(EXEEXT) $(LINK) $(test_log_thread_OBJECTS) $(test_log_thread_LDADD) $(LIBS) test_match_glob$(EXEEXT): $(test_match_glob_OBJECTS) $(test_match_glob_DEPENDENCIES) $(EXTRA_test_match_glob_DEPENDENCIES) @rm -f test_match_glob$(EXEEXT) $(LINK) $(test_match_glob_OBJECTS) $(test_match_glob_LDADD) $(LIBS) test_matchstr$(EXEEXT): $(test_matchstr_OBJECTS) $(test_matchstr_DEPENDENCIES) $(EXTRA_test_matchstr_DEPENDENCIES) @rm -f test_matchstr$(EXEEXT) $(LINK) $(test_matchstr_OBJECTS) $(test_matchstr_LDADD) $(LIBS) test_mutex$(EXEEXT): $(test_mutex_OBJECTS) $(test_mutex_DEPENDENCIES) $(EXTRA_test_mutex_DEPENDENCIES) @rm -f test_mutex$(EXEEXT) $(LINK) $(test_mutex_OBJECTS) $(test_mutex_LDADD) $(LIBS) test_nmem$(EXEEXT): $(test_nmem_OBJECTS) $(test_nmem_DEPENDENCIES) $(EXTRA_test_nmem_DEPENDENCIES) @rm -f test_nmem$(EXEEXT) $(LINK) $(test_nmem_OBJECTS) $(test_nmem_LDADD) $(LIBS) test_odr$(EXEEXT): $(test_odr_OBJECTS) $(test_odr_DEPENDENCIES) $(EXTRA_test_odr_DEPENDENCIES) @rm -f test_odr$(EXEEXT) $(LINK) $(test_odr_OBJECTS) $(test_odr_LDADD) $(LIBS) test_odrstack$(EXEEXT): $(test_odrstack_OBJECTS) $(test_odrstack_DEPENDENCIES) $(EXTRA_test_odrstack_DEPENDENCIES) @rm -f test_odrstack$(EXEEXT) $(LINK) $(test_odrstack_OBJECTS) $(test_odrstack_LDADD) $(LIBS) test_oid$(EXEEXT): $(test_oid_OBJECTS) $(test_oid_DEPENDENCIES) $(EXTRA_test_oid_DEPENDENCIES) @rm -f test_oid$(EXEEXT) $(LINK) $(test_oid_OBJECTS) $(test_oid_LDADD) $(LIBS) test_options$(EXEEXT): $(test_options_OBJECTS) $(test_options_DEPENDENCIES) $(EXTRA_test_options_DEPENDENCIES) @rm -f test_options$(EXEEXT) $(LINK) $(test_options_OBJECTS) $(test_options_LDADD) $(LIBS) test_pquery$(EXEEXT): $(test_pquery_OBJECTS) $(test_pquery_DEPENDENCIES) $(EXTRA_test_pquery_DEPENDENCIES) @rm -f test_pquery$(EXEEXT) $(LINK) $(test_pquery_OBJECTS) $(test_pquery_LDADD) $(LIBS) test_query_charset$(EXEEXT): $(test_query_charset_OBJECTS) $(test_query_charset_DEPENDENCIES) $(EXTRA_test_query_charset_DEPENDENCIES) @rm -f test_query_charset$(EXEEXT) $(LINK) $(test_query_charset_OBJECTS) $(test_query_charset_LDADD) $(LIBS) test_record_conv$(EXEEXT): $(test_record_conv_OBJECTS) $(test_record_conv_DEPENDENCIES) $(EXTRA_test_record_conv_DEPENDENCIES) @rm -f test_record_conv$(EXEEXT) $(LINK) $(test_record_conv_OBJECTS) $(test_record_conv_LDADD) $(LIBS) test_retrieval$(EXEEXT): $(test_retrieval_OBJECTS) $(test_retrieval_DEPENDENCIES) $(EXTRA_test_retrieval_DEPENDENCIES) @rm -f test_retrieval$(EXEEXT) $(LINK) $(test_retrieval_OBJECTS) $(test_retrieval_LDADD) $(LIBS) test_rpn2cql$(EXEEXT): $(test_rpn2cql_OBJECTS) $(test_rpn2cql_DEPENDENCIES) $(EXTRA_test_rpn2cql_DEPENDENCIES) @rm -f test_rpn2cql$(EXEEXT) $(LINK) $(test_rpn2cql_OBJECTS) $(test_rpn2cql_LDADD) $(LIBS) test_rpn2solr$(EXEEXT): $(test_rpn2solr_OBJECTS) $(test_rpn2solr_DEPENDENCIES) $(EXTRA_test_rpn2solr_DEPENDENCIES) @rm -f test_rpn2solr$(EXEEXT) $(LINK) $(test_rpn2solr_OBJECTS) $(test_rpn2solr_LDADD) $(LIBS) test_shared_ptr$(EXEEXT): $(test_shared_ptr_OBJECTS) $(test_shared_ptr_DEPENDENCIES) $(EXTRA_test_shared_ptr_DEPENDENCIES) @rm -f test_shared_ptr$(EXEEXT) $(LINK) $(test_shared_ptr_OBJECTS) $(test_shared_ptr_LDADD) $(LIBS) test_soap1$(EXEEXT): $(test_soap1_OBJECTS) $(test_soap1_DEPENDENCIES) $(EXTRA_test_soap1_DEPENDENCIES) @rm -f test_soap1$(EXEEXT) $(LINK) $(test_soap1_OBJECTS) $(test_soap1_LDADD) $(LIBS) test_soap2$(EXEEXT): $(test_soap2_OBJECTS) $(test_soap2_DEPENDENCIES) $(EXTRA_test_soap2_DEPENDENCIES) @rm -f test_soap2$(EXEEXT) $(LINK) $(test_soap2_OBJECTS) $(test_soap2_LDADD) $(LIBS) test_solr$(EXEEXT): $(test_solr_OBJECTS) $(test_solr_DEPENDENCIES) $(EXTRA_test_solr_DEPENDENCIES) @rm -f test_solr$(EXEEXT) $(LINK) $(test_solr_OBJECTS) $(test_solr_LDADD) $(LIBS) test_sortspec$(EXEEXT): $(test_sortspec_OBJECTS) $(test_sortspec_DEPENDENCIES) $(EXTRA_test_sortspec_DEPENDENCIES) @rm -f test_sortspec$(EXEEXT) $(LINK) $(test_sortspec_OBJECTS) $(test_sortspec_LDADD) $(LIBS) test_timing$(EXEEXT): $(test_timing_OBJECTS) $(test_timing_DEPENDENCIES) $(EXTRA_test_timing_DEPENDENCIES) @rm -f test_timing$(EXEEXT) $(LINK) $(test_timing_OBJECTS) $(test_timing_LDADD) $(LIBS) test_tpath$(EXEEXT): $(test_tpath_OBJECTS) $(test_tpath_DEPENDENCIES) $(EXTRA_test_tpath_DEPENDENCIES) @rm -f test_tpath$(EXEEXT) $(LINK) $(test_tpath_OBJECTS) $(test_tpath_LDADD) $(LIBS) test_wrbuf$(EXEEXT): $(test_wrbuf_OBJECTS) $(test_wrbuf_DEPENDENCIES) $(EXTRA_test_wrbuf_DEPENDENCIES) @rm -f test_wrbuf$(EXEEXT) $(LINK) $(test_wrbuf_OBJECTS) $(test_wrbuf_LDADD) $(LIBS) test_xmalloc$(EXEEXT): $(test_xmalloc_OBJECTS) $(test_xmalloc_DEPENDENCIES) $(EXTRA_test_xmalloc_DEPENDENCIES) @rm -f test_xmalloc$(EXEEXT) $(LINK) $(test_xmalloc_OBJECTS) $(test_xmalloc_LDADD) $(LIBS) test_xml_include$(EXEEXT): $(test_xml_include_OBJECTS) $(test_xml_include_DEPENDENCIES) $(EXTRA_test_xml_include_DEPENDENCIES) @rm -f test_xml_include$(EXEEXT) $(LINK) $(test_xml_include_OBJECTS) $(test_xml_include_LDADD) $(LIBS) test_xmlquery$(EXEEXT): $(test_xmlquery_OBJECTS) $(test_xmlquery_DEPENDENCIES) $(EXTRA_test_xmlquery_DEPENDENCIES) @rm -f test_xmlquery$(EXEEXT) $(LINK) $(test_xmlquery_OBJECTS) $(test_xmlquery_LDADD) $(LIBS) mostlyclean-compile: -rm -f *.$(OBJEXT) distclean-compile: -rm -f *.tab.c @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test_ccl.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test_comstack.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test_cql2ccl.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test_file_glob.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test_filepath.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test_iconv.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test_icu.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test_json.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test_libstemmer.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test_log.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test_log_thread.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test_match_glob.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test_matchstr.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test_mutex.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test_nmem.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test_odr.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test_odrcodec.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test_odrstack.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test_oid.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test_options.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test_pquery.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test_query_charset.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test_record_conv.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test_retrieval.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test_rpn2cql.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test_rpn2solr.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test_shared_ptr.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test_soap1.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test_soap2.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test_solr.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test_sortspec.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test_timing.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test_tpath.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test_wrbuf.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test_xmalloc.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test_xml_include.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test_xmlquery.Po@am__quote@ .c.o: @am__fastdepCC_TRUE@ $(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< @am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(COMPILE) -c $< .c.obj: @am__fastdepCC_TRUE@ $(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'` @am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(COMPILE) -c `$(CYGPATH_W) '$<'` .c.lo: @am__fastdepCC_TRUE@ $(LTCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< @am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(LTCOMPILE) -c -o $@ $< mostlyclean-libtool: -rm -f *.lo clean-libtool: -rm -rf .libs _libs ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES) list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in files) print i; }; }'`; \ mkid -fID $$unique tags: TAGS TAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) set x; \ here=`pwd`; \ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in files) print i; }; }'`; \ shift; \ if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ test -n "$$unique" || unique=$$empty_fix; \ if test $$# -gt 0; then \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ "$$@" $$unique; \ else \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ $$unique; \ fi; \ fi ctags: CTAGS CTAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in files) print i; }; }'`; \ test -z "$(CTAGS_ARGS)$$unique" \ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ $$unique GTAGS: here=`$(am__cd) $(top_builddir) && pwd` \ && $(am__cd) $(top_srcdir) \ && gtags -i $(GTAGS_ARGS) "$$here" distclean-tags: -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags check-TESTS: $(TESTS) @failed=0; all=0; xfail=0; xpass=0; skip=0; \ srcdir=$(srcdir); export srcdir; \ list=' $(TESTS) '; \ $(am__tty_colors); \ if test -n "$$list"; then \ for tst in $$list; do \ if test -f ./$$tst; then dir=./; \ elif test -f $$tst; then dir=; \ else dir="$(srcdir)/"; fi; \ if $(TESTS_ENVIRONMENT) $${dir}$$tst; then \ all=`expr $$all + 1`; \ case " $(XFAIL_TESTS) " in \ *[\ \ ]$$tst[\ \ ]*) \ xpass=`expr $$xpass + 1`; \ failed=`expr $$failed + 1`; \ col=$$red; res=XPASS; \ ;; \ *) \ col=$$grn; res=PASS; \ ;; \ esac; \ elif test $$? -ne 77; then \ all=`expr $$all + 1`; \ case " $(XFAIL_TESTS) " in \ *[\ \ ]$$tst[\ \ ]*) \ xfail=`expr $$xfail + 1`; \ col=$$lgn; res=XFAIL; \ ;; \ *) \ failed=`expr $$failed + 1`; \ col=$$red; res=FAIL; \ ;; \ esac; \ else \ skip=`expr $$skip + 1`; \ col=$$blu; res=SKIP; \ fi; \ echo "$${col}$$res$${std}: $$tst"; \ done; \ if test "$$all" -eq 1; then \ tests="test"; \ All=""; \ else \ tests="tests"; \ All="All "; \ fi; \ if test "$$failed" -eq 0; then \ if test "$$xfail" -eq 0; then \ banner="$$All$$all $$tests passed"; \ else \ if test "$$xfail" -eq 1; then failures=failure; else failures=failures; fi; \ banner="$$All$$all $$tests behaved as expected ($$xfail expected $$failures)"; \ fi; \ else \ if test "$$xpass" -eq 0; then \ banner="$$failed of $$all $$tests failed"; \ else \ if test "$$xpass" -eq 1; then passes=pass; else passes=passes; fi; \ banner="$$failed of $$all $$tests did not behave as expected ($$xpass unexpected $$passes)"; \ fi; \ fi; \ dashes="$$banner"; \ skipped=""; \ if test "$$skip" -ne 0; then \ if test "$$skip" -eq 1; then \ skipped="($$skip test was not run)"; \ else \ skipped="($$skip tests were not run)"; \ fi; \ test `echo "$$skipped" | wc -c` -le `echo "$$banner" | wc -c` || \ dashes="$$skipped"; \ fi; \ report=""; \ if test "$$failed" -ne 0 && test -n "$(PACKAGE_BUGREPORT)"; then \ report="Please report to $(PACKAGE_BUGREPORT)"; \ test `echo "$$report" | wc -c` -le `echo "$$banner" | wc -c` || \ dashes="$$report"; \ fi; \ dashes=`echo "$$dashes" | sed s/./=/g`; \ if test "$$failed" -eq 0; then \ col="$$grn"; \ else \ col="$$red"; \ fi; \ echo "$${col}$$dashes$${std}"; \ echo "$${col}$$banner$${std}"; \ test -z "$$skipped" || echo "$${col}$$skipped$${std}"; \ test -z "$$report" || echo "$${col}$$report$${std}"; \ echo "$${col}$$dashes$${std}"; \ test "$$failed" -eq 0; \ else :; fi distdir: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done $(MAKE) $(AM_MAKEFLAGS) \ top_distdir="$(top_distdir)" distdir="$(distdir)" \ dist-hook check-am: all-am $(MAKE) $(AM_MAKEFLAGS) $(check_PROGRAMS) $(check_SCRIPTS) $(MAKE) $(AM_MAKEFLAGS) check-TESTS check: check-am all-am: Makefile installdirs: install: install-am install-exec: install-exec-am install-data: install-data-am uninstall: uninstall-am install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-am install-strip: if test -z '$(STRIP)'; then \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ install; \ else \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ fi mostlyclean-generic: clean-generic: distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." clean: clean-am clean-am: clean-checkPROGRAMS clean-generic clean-libtool \ mostlyclean-am distclean: distclean-am -rm -rf ./$(DEPDIR) -rm -f Makefile distclean-am: clean-am distclean-compile distclean-generic \ distclean-tags dvi: dvi-am dvi-am: html: html-am html-am: info: info-am info-am: install-data-am: install-dvi: install-dvi-am install-dvi-am: install-exec-am: install-html: install-html-am install-html-am: install-info: install-info-am install-info-am: install-man: install-pdf: install-pdf-am install-pdf-am: install-ps: install-ps-am install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-am -rm -rf ./$(DEPDIR) -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-am mostlyclean-am: mostlyclean-compile mostlyclean-generic \ mostlyclean-libtool pdf: pdf-am pdf-am: ps: ps-am ps-am: uninstall-am: .MAKE: check-am install-am install-strip .PHONY: CTAGS GTAGS all all-am check check-TESTS check-am clean \ clean-checkPROGRAMS clean-generic clean-libtool ctags \ dist-hook distclean distclean-compile distclean-generic \ distclean-libtool distclean-tags distdir dvi dvi-am html \ html-am info info-am install install-am install-data \ install-data-am install-dvi install-dvi-am install-exec \ install-exec-am install-html install-html-am install-info \ install-info-am install-man install-pdf install-pdf-am \ install-ps install-ps-am install-strip installcheck \ installcheck-am installdirs maintainer-clean \ maintainer-clean-generic mostlyclean mostlyclean-compile \ mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \ tags uninstall uninstall-am dist-hook: mkdir -p $(distdir)/cql cp $(srcdir)/cql/*.err $(srcdir)/cql/*.out $(distdir)/cql mkdir -p $(distdir)/cql2pqf cp $(srcdir)/cql2pqf/*.err $(srcdir)/cql2pqf/*.out $(distdir)/cql2pqf cp $(srcdir)/marc?.chr $(distdir) cp $(srcdir)/marc?.marc $(distdir) cp $(srcdir)/marc?.xml $(distdir) cp $(srcdir)/*.xml.marc $(distdir) cp $(srcdir)/xml2marc?.xml $(distdir) cp $(srcdir)/tmarc?.xml $(distdir) cp $(srcdir)/xml2tmarc?.xml $(distdir) # Rule for generating codecs for our small ASN.1 spec test_odrcodec.c test_odrcodec.h: tstodr.asn $(YAZCOMP) cd $(srcdir); $(YAZCOMP) tstodr.asn # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: yaz-4.2.30/test/xml2tmarc4.xml.marc0000644000175000017500000000003211741237740013744 00000000000000000260091a2200025003370 yaz-4.2.30/test/marc6.xml.marc0000644000175000017500000000055611741237740012772 0000000000000000366nam a22001698a 4500001001300000003000400013005001700017008004100034010001700075040001300092050001200105100001700117245003000134260001200164263000900176300001100185 11224466 DLC00000000000000.0910710c19910701nju 00010 eng  a 11224466  aDLCcDLC00a123-xyz10aJack Collins10aHow to program a computer1 aPenguin a8710 ap. cm.yaz-4.2.30/test/tmarc1.xml0000644000175000017500000000432511741237740012226 00000000000000 00988nam0a32003011 450 9 181 423 4 710100 a n e m u 2002 us eng 0 a xx 1-4000-4596-7 $14,00 DBC200439 Sloman Larry On the road with Bob Dylan Larry "Ratso" Sloman Revised edition Three Rivers Press New York Three Rivers Press 2002 xv, 464 sider, tavler Larry "Ratso" Slomans meget personlige beretning om Bob Dylans koncertturne i USA i 1975: "The Rolling Thunder revue" PÃ¥ omslaget: With a new introduction by Kinky Friedman Tidligere: 1. udgave. New York, Bantam, 1978 99.4 Dylan Bob 78.9064 5 folkemusik folkemusikere rockmusik rockmusikere rockkoncerter USA 1970-1979 yaz-4.2.30/test/test_solr.c0000644000175000017500000003261311733047144012476 00000000000000/* This file is part of the YAZ toolkit. * Copyright (C) 1995-2012 Index Data * See the file LICENSE for details. */ #if HAVE_CONFIG_H #include #endif #include #include #if YAZ_HAVE_XML2 #include #endif #include #include #include #if YAZ_HAVE_XML2 int compare_solr_req(ODR odr, Z_SRW_PDU *sr, const char *charset, const char *expect) { int r; Z_GDU *gdu = 0; YAZ_CHECK(sr); if (!sr) return 0; gdu = z_get_HTTP_Request_host_path(odr, "localhost", "Default"); YAZ_CHECK(gdu); if (!gdu) return 0; yaz_solr_encode_request(gdu->u.HTTP_Request, sr, odr, charset); r = z_GDU(odr, &gdu, 0, 0); YAZ_CHECK(r); if (r) { int len = 0; char *buf = odr_getbuf(odr, &len, 0); if (buf) { if (len == strlen(expect) && !memcmp(buf, expect, len)) { odr_reset(odr); return 1; } yaz_log(YLOG_WARN, "Expect:\n%s\n", expect); yaz_log(YLOG_WARN, "Got:\n%.*s\n", len, buf); } } odr_reset(odr); return 0; } #endif void tst_encoding(void) { #if YAZ_HAVE_XML2 ODR odr = odr_createmem(ODR_ENCODE); { Z_SRW_PDU *sr = yaz_srw_get_pdu(odr, Z_SRW_searchRetrieve_request, "1.2"); YAZ_CHECK(compare_solr_req( odr, sr, 0, "GET Default/select? HTTP/1.1\r\n" "User-Agent: YAZ/" YAZ_VERSION "\r\n" "Host: localhost\r\n" "Content-Type: text/xml\r\n\r\n")); } { Z_SRW_PDU *sr = yaz_srw_get_pdu(odr, Z_SRW_searchRetrieve_request, "1.2"); YAZ_CHECK(compare_solr_req( odr, sr, "utf-8", "GET Default/select? HTTP/1.1\r\n" "User-Agent: YAZ/" YAZ_VERSION "\r\n" "Host: localhost\r\n" "Content-Type: text/xml; charset=utf-8\r\n\r\n")); } { Z_SRW_PDU *sr = yaz_srw_get_pdu(odr, Z_SRW_searchRetrieve_request, "1.2"); sr->u.request->query_type = Z_SRW_query_type_cql; sr->u.request->query.cql = "title:solr"; sr->u.request->startRecord = odr_intdup(odr, 3); sr->u.request->maximumRecords = odr_intdup(odr, 10); YAZ_CHECK(compare_solr_req( odr, sr, 0, "GET Default/select?q=title%3Asolr&start=2&rows=10" " HTTP/1.1\r\n" "User-Agent: YAZ/" YAZ_VERSION "\r\n" "Host: localhost\r\n" "Content-Type: text/xml\r\n\r\n")); } { Z_SRW_PDU *sr = yaz_srw_get_pdu(odr, Z_SRW_searchRetrieve_request, "1.2"); sr->u.request->query_type = Z_SRW_query_type_cql; sr->u.request->query.cql = "title:solr"; sr->u.request->startRecord = odr_intdup(odr, 3); sr->u.request->maximumRecords = odr_intdup(odr, 10); sr->u.request->facetList = yaz_pqf_parse_facet_list( odr, "@attr 1=date @attr 2=0, @attr 1=title_exact @attr 3=17"); YAZ_CHECK(compare_solr_req( odr, sr, 0, "GET Default/select?q=title%3Asolr&start=2&rows=10" "&facet=true&facet.mincount=1&facet.field=date" "&facet.field=title_exact&f.title_exact.facet.limit=17" " HTTP/1.1\r\n" "User-Agent: YAZ/" YAZ_VERSION "\r\n" "Host: localhost\r\n" "Content-Type: text/xml\r\n\r\n")); } odr_destroy(odr); /* YAZ_HAVE_XML2 */ #endif } int check_response(ODR o, const char *content, Z_SRW_searchRetrieveResponse **p) { int r; Z_GDU *gdu; Z_SRW_PDU *sr_p; char *http_response = odr_malloc(o, strlen(content) + 300); strcpy(http_response, "HTTP/1.1 200 OK\r\n" "Last-Modified: Wed, 13 Apr 2011 08:30:59 GMT\r\n" "ETag: \"MjcyMWE5M2JiNDgwMDAwMFNvbHI=\"\r\n" "Content-Type: text/xml; charset=utf-8\r\n"); sprintf(http_response + strlen(http_response), "Content-Length: %d\r\n\r\n", (int) strlen(content)); strcat(http_response, content); odr_setbuf(o, http_response, strlen(http_response), 0); r = z_GDU(o, &gdu, 0, 0); if (!r || gdu->which != Z_GDU_HTTP_Response) return 0; r = yaz_solr_decode_response(o, gdu->u.HTTP_Response, &sr_p); if (r) return 0; if (sr_p->which != Z_SRW_searchRetrieve_response) return 0; *p = sr_p->u.response; return 1; } void tst_decoding(void) { #if YAZ_HAVE_XML2 ODR odr = odr_createmem(ODR_DECODE); Z_SRW_searchRetrieveResponse *response; YAZ_CHECK(check_response( odr, "\n" "\n" "0" "1" "0@attr 1=title solr" "0" "\n" "\n", &response)); YAZ_CHECK_EQ(*response->numberOfRecords, 91); YAZ_CHECK_EQ(response->num_records, 0); YAZ_CHECK(response->records == 0); YAZ_CHECK_EQ(response->num_diagnostics, 0); YAZ_CHECK(response->diagnostics == 0); YAZ_CHECK(response->nextRecordPosition == 0); YAZ_CHECK(response->facetList == 0); odr_reset(odr); YAZ_CHECK( check_response( odr, "" "" "02" "true" "10" "@attr 1=title solr" "5" "date" "1" "" "Alenius, Hans," "1937-" "" "1969" " 73857731 " " 73857731 " "book" "book" "" "20 cm." "140, (1) p." "illus." "" "" "" "1969." "Norstedt," "Stockholm," "PhotographyArtistic" "Photography, Artistic." "PhotographyArtistic" "(OCoLC)36247690" "Solring.Solring." "" "" "Solring." "" "" "" "50000000004" "44" "3" "", &response)); #if HAVE_LONG_LONG YAZ_CHECK(*response->numberOfRecords == 91000000000LL); #endif YAZ_CHECK_EQ(response->num_records, 1); YAZ_CHECK(response->records); if (response->records) { const char *doc = "Alenius, Hans," "1937-" "" "1969" " 73857731 " " 73857731 " "book" "book" "" "20 cm." "140, (1) p." "illus." "" "" "" "1969." "Norstedt," "Stockholm," "PhotographyArtistic" "Photography, Artistic." "PhotographyArtistic" "(OCoLC)36247690" "Solring.Solring." "" "" "Solring." ""; Z_SRW_record *record = response->records; YAZ_CHECK(record->recordData_len == strlen(doc) && !memcmp(record->recordData_buf, doc, record->recordData_len)); } YAZ_CHECK_EQ(response->num_diagnostics, 0); YAZ_CHECK(response->diagnostics == 0); YAZ_CHECK(response->nextRecordPosition == 0); YAZ_CHECK(response->facetList); if (response->facetList) { Z_FacetList *facetList = response->facetList; YAZ_CHECK(facetList->num == 1); if (facetList->num == 1) { Z_FacetField *facetField = facetList->elements[0]; int i; YAZ_CHECK(facetField->num_terms == 5); if (facetField->num_terms == 5) { for (i = 0; i < facetField->num_terms; i++) { YAZ_CHECK( facetField->terms[i] && facetField->terms[i]->term && facetField->terms[i]->term->which == Z_Term_general); } #if HAVE_LONG_LONG YAZ_CHECK(*facetField->terms[0]->count == 5000000000LL); #endif YAZ_CHECK(facetField->terms[0]->term->u.general->len == 4 && !memcmp(facetField->terms[0]->term->u.general->buf, "1978", 4)); YAZ_CHECK(*facetField->terms[1]->count == 4); YAZ_CHECK(facetField->terms[1]->term->u.general->len == 4 && !memcmp(facetField->terms[1]->term->u.general->buf, "1983", 4)); YAZ_CHECK(*facetField->terms[2]->count == 4); YAZ_CHECK(facetField->terms[2]->term->u.general->len == 4 && !memcmp(facetField->terms[2]->term->u.general->buf, "1987", 4)); YAZ_CHECK(*facetField->terms[3]->count == 4); YAZ_CHECK(facetField->terms[3]->term->u.general->len == 4 && !memcmp(facetField->terms[3]->term->u.general->buf, "1988", 4)); YAZ_CHECK(*facetField->terms[4]->count == 3); YAZ_CHECK(facetField->terms[4]->term->u.general->len == 4 && !memcmp(facetField->terms[4]->term->u.general->buf, "2003", 4)); } } } odr_reset(odr); odr_destroy(odr); #endif } int main(int argc, char **argv) { YAZ_CHECK_INIT(argc, argv); #if YAZ_HAVE_XML2 LIBXML_TEST_VERSION; #endif tst_encoding(); tst_decoding(); YAZ_CHECK_TERM; } /* * Local variables: * c-basic-offset: 4 * c-file-style: "Stroustrup" * indent-tabs-mode: nil * End: * vim: shiftwidth=4 tabstop=8 expandtab */ yaz-4.2.30/test/tmarc2.xml0000644000175000017500000000467111741237740012233 00000000000000 01116nam0a32002171 450 9 182 502 3 710100 a c e s f 1995 gb eng 0 s xc bef Mimms Garnet Cry baby Warm and soulful Garnet Mimms ... [et al.] Bury St. Edmunds BGO 1995 1 cd Indspilninger publiceret 1963 (Cry baby) og 1965 (Warm and soulful) Indhold: BGO BGOCD268 78.794 4 soul rhythm & blues vokal 1960-1969 USA 11 Cry baby Nobody but you Until you were gone Anytime you want me So close For your precious love Baby don't you weep A ¤quiet place Cry to me Don't change your heart Wanting you The ¤truth hurts I'll take good care of you Looking for you It won't hurt (half as much) It was easier to hurt her Thinkin' Prove it to me More than a miracle As long as I have you One girl There goes my baby It's just a matter of time A ¤little bit of soap Look away I'll make it up to you 40 0 1 girl yaz-4.2.30/test/marc6.chr0000644000175000017500000000000711741237740012014 00000000000000marc-8 yaz-4.2.30/test/test_xmlquery.c0000644000175000017500000002051011733047144013376 00000000000000/* This file is part of the YAZ toolkit. * Copyright (C) 1995-2012 Index Data * See the file LICENSE for details. */ #if HAVE_CONFIG_H #include #endif #include #include #include #include #include #include #include #if YAZ_HAVE_XML2 #include #include #endif enum pqf2xml_status { PQF_FAILED, QUERY2XML_FAILED, XML_NO_MATCH, XML_MATCH, XML_NO_ERROR }; enum pqf2xml_status pqf2xml_text(const char *pqf, const char *expect_xml, const char *expect_pqf) { YAZ_PQF_Parser parser = yaz_pqf_create(); ODR odr = odr_createmem(ODR_ENCODE); Z_RPNQuery *rpn; enum pqf2xml_status status = XML_NO_ERROR; YAZ_CHECK(parser); YAZ_CHECK(odr); rpn = yaz_pqf_parse(parser, odr, pqf); yaz_pqf_destroy(parser); if (!rpn) status = PQF_FAILED; else { #if YAZ_HAVE_XML2 xmlDocPtr doc = 0; yaz_rpnquery2xml(rpn, &doc); if (!doc) status = QUERY2XML_FAILED; else { char *buf_out; int len_out; xmlDocDumpMemory(doc, (xmlChar **) &buf_out, &len_out); if (len_out == (int) strlen(expect_xml) && memcmp(buf_out, expect_xml, len_out) == 0) { Z_Query *query2 = 0; int error_code = 0; const char *addinfo = 0; const xmlNode *root_element = xmlDocGetRootElement(doc); ODR odr2 = odr_createmem(ODR_ENCODE); yaz_xml2query(root_element, &query2, odr2, &error_code, &addinfo); if (error_code || !query2) status = XML_NO_MATCH; else { WRBUF w = wrbuf_alloc(); yaz_query_to_wrbuf(w, query2); if (!expect_pqf || strcmp(expect_pqf, wrbuf_cstr(w)) == 0) status = XML_MATCH; else { status = XML_NO_MATCH; printf("Result: %s\n", wrbuf_cstr(w)); } wrbuf_destroy(w); } odr_destroy(odr2); } else { printf("%.*s\n", len_out, buf_out); status = XML_NO_MATCH; } xmlFreeDoc(doc); xmlFree(buf_out); } #else status = QUERY2XML_FAILED; #endif } odr_destroy(odr); return status; } static void tst(void) { YAZ_CHECK_EQ(pqf2xml_text("@attr 1=4 bad query", "", 0), PQF_FAILED); #if YAZ_HAVE_XML2 YAZ_CHECK_EQ(pqf2xml_text( "@attr 1=4 computer", "\n" "" "" "computer" "\n", "RPN @attrset Bib-1 @attr 1=4 computer" ), XML_MATCH); YAZ_CHECK_EQ(pqf2xml_text( "@attr 2=1 @attr 1=title computer", "\n" "" "" "" "computer" "\n", "RPN @attrset Bib-1 @attr 1=title @attr 2=1 computer" ), XML_MATCH); YAZ_CHECK_EQ(pqf2xml_text( "@attr 2=1 @attr exp1 1=1 computer", "\n" "" "" "" "computer" "\n", "RPN @attrset Bib-1 @attr Exp-1 1=1 @attr 2=1 computer" ), XML_MATCH); YAZ_CHECK_EQ(pqf2xml_text( "@and a b", "\n" "" "" "a" "b" "\n", "RPN @attrset Bib-1 @and a b" ), XML_MATCH); YAZ_CHECK_EQ(pqf2xml_text( "@or @and a b c", "\n" "" "" "" "a" "b" "c" "\n", "RPN @attrset Bib-1 @or @and a b c" ), XML_MATCH); YAZ_CHECK_EQ(pqf2xml_text( "@set abe", "\n" "" "abe\n", "RPN @attrset Bib-1 @set abe" ), XML_MATCH); YAZ_CHECK_EQ(pqf2xml_text( /* exclusion, distance, ordered, relationtype, knownunit, proxunit */ "@prox 0 3 1 2 k 2 a b", "\n" "" "" "a" "b" "\n", "RPN @attrset Bib-1 @prox 0 3 1 2 k 2 a b" ), XML_MATCH); YAZ_CHECK_EQ(pqf2xml_text( "@term numeric 32", "\n" "" "" "32" "\n", "RPN @attrset Bib-1 @term numeric 32" ), XML_MATCH); YAZ_CHECK_EQ(pqf2xml_text( "@term string computer", "\n" "" "" "computer" "\n", "RPN @attrset Bib-1 @term string computer" ), XML_MATCH); YAZ_CHECK_EQ(pqf2xml_text( "@term null void", "\n" "" "" "" "\n", "RPN @attrset Bib-1 @term null x" ), XML_MATCH); YAZ_CHECK_EQ(pqf2xml_text( "@attrset gils @attr 4=2 x", "\n" "" "" "" "x" "\n", "RPN @attrset GILS @attr 4=2 x" ), XML_MATCH); #endif } int main (int argc, char **argv) { YAZ_CHECK_INIT(argc, argv); tst(); YAZ_CHECK_TERM; } /* * Local variables: * c-basic-offset: 4 * c-file-style: "Stroustrup" * indent-tabs-mode: nil * End: * vim: shiftwidth=4 tabstop=8 expandtab */ yaz-4.2.30/test/marccol2.u8.2.lst0000644000175000017500000000561111654451754013243 0000000000000003091cam a2200337 i 4500 001 12683849 005 20051218154744.0 008 981008b2001 ilu 000 0 eng 035 $a 57779 035 $a 90490 035 $a 93202 040 $a DLC $c DLC 906 $a 0 $b und $c orignew $d u $e ncip $f 19 $g y-gencatlg 010 $a 77123332 245 00 $a Voyager Diacritic test -- New input 001 (SBIE) 260 $a ny $b ny, $c 2001. 300 $a p. $c cm. 500 $a New copy imported from file (8/12/99) 500 $a VOYAGER COLUMN 0 (NEW): Degree sign (°); Phono Copyright mark (â„—); Copyright mark (©); Sharp (♯); Inverted Question mark (¿); Inverted Exclamation mark (¡) 500 $a VOYAGER COLUMN 1: Script L (â„“); Polish L (Å); Scandanavian O (Ø); D with Crossbar (Ä); Icelandic Thorn (Þ); AE Digraph (Æ); OE Digraph (Å’); Miagkii Znak (ʹ); Dot at Midline (·) 500 $a VOYAGER COLUMN 2: Musical Flat (â™­); Patent Mark (®); Plus or Minus (±); O Hook (Æ ); U Hook (Ư); Alif (ʼ); alpha (DO NOT USE); Ayn (Ê»); Polish l (Å‚) 500 $a VOYAGER COLUMN 3: Scandanavian o (ø); d with crossbar (Ä‘); Icelandic Thorn (þ); ae Digraph (æ); oe Digraph (Å“); Tverdii Znak (ʺ); Turkish i (ı); British Pound (£); eth (ð) 500 $a VOYAGER COLUMN 4: Dagger (DO NOT USE); o Hook (Æ¡); u Hook (ư); Beta (DO NOT USE); Gamma (DO NOT USE); Superscript 0 (â°); Superscript 1 (¹); Superscript 2 (²); Superscript 3 (³) 500 $a VOYAGER COLUMN 5: Superscript 4 (â´); Superscript 5 (âµ); Superscript 6 (â¶); Superscript 7 (â·); Superscript 8 (â¸); Superscript 9 (â¹); Superscript + (âº); Superscript - (â»); Superscript ( (â½); 500 $a VOYAGER COLUMN 6: Superscript ) (â¾); Subscript 0 (â‚€); Subscript 1 (â‚); Subscript 2 (â‚‚); Subscript 3 (₃); Subscript 4 (â‚„); Subscript 5 (â‚…); Subscript 6 (₆); Subscript 7 (₇) 500 $a VOYAGER COLUMN 7: Subscript 8 (₈); Subscript 9 (₉); Subscript + (₊); Subscript - (â‚‹); Subscript ( (â‚); Subscript ) (₎); Pseudo Question Mark (ỏ); Grave (oÌ€); Acute (oÌ) 500 $a VOYAGER COLUMN 8: Circumflex (oÌ‚); Tilde (õ); Macron (oÌ„); Breve (ŏ); Superior Dot (ȯ); Umlaut (ö); Hacek (oÌŒ); Circle Above (oÌŠ); Ligature left (oÍ¡) 500 $a VOYAGER COLUMN 9: Ligature right (o) ; High Comma off center (oÌ•); Double Acute (oÌ‹); Candrabindu (oÌ); Cedilla (o̧); Right Hook (ǫ); Dot Below (oÌ£); Double Dot Below (o̤); Circle Below (oÌ¥) 500 $a VOYAGER COLUMN 10: Double Underscore (o̳); Underscore (o̲); Left Hook (o̦); Right Cedilla (oÌœ); Upadhmaniya (oÌ®); Double Tilde 1st half (oÍ ); Double Tilde 2nd half (o) ; High Comma centered (oÌ“) 500 $a VOYAGER PC Keyboard: Spacing Circumflex (^); Spacing Underscore (_); Spacing Grave (`); Open Curly Bracket ({); Close Curly Bracket (}); Spacing Tilde (~) 500 $a Standard PC Keyboard: 1234567890-= !@#$%^&*()_+ qwertyuiop[]\ QWERTYUIOP{}| asdfghjkl;' ASDFGHJKL:" zxcvbnm,./ ZXCVBNM<>? yaz-4.2.30/test/marc2.marc0000644000175000017500000000213411741237740012161 0000000000000001116nam0 32002171 45 001002800000004001000028008002800038009001100066039000900077100001900086245005900105260003300164300001000197512007300207531001400280538001900294652001500313666004900328795050200377795001900879000a9 182 502 3b710100fa000rcae000tsufa1995bgblengv0000asgxc000abef000aMimmshGarnet000aCry babyaWarm and soulfuleGarnet Mimms ... [et al.]000aBury St. EdmundsbBGOc1995000n1 cd000aIndspilninger publiceret 1963 (Cry baby) og 1965 (Warm and soulful)000aIndhold:000fBGOgBGOCD268000m78.794v4000msoulmrhythm & bluesnvokalp1960-1969lUSA000å11aCry babyaNobody but youaUntil you were goneaAnytime you want meaSo closeaFor your precious loveaBaby don't you weepaA ¤quiet placeaCry to meaDon't change your heartaWanting youaThe ¤truth hurtsaI'll take good care of youaLooking for youaIt won't hurt (half as much)aIt was easier to hurt heraThinkin'aProve it to meaMore than a miracleaAs long as I have youaOne girlaThere goes my babyaIt's just a matter of timeaA ¤little bit of soapaLook awayaI'll make it up to you000å40y0a1 girlyaz-4.2.30/test/test_pquery.c0000644000175000017500000000467611733047144013054 00000000000000/* This file is part of the YAZ toolkit. * Copyright (C) 1995-2012 Index Data * See the file LICENSE for details. */ #if HAVE_CONFIG_H #include #endif #include #include #include #include #include #include #include int expect_pqf(const char *pqf, const char *expect_pqf, int expect_error) { YAZ_PQF_Parser parser = yaz_pqf_create(); int res = 0; ODR odr = odr_createmem(ODR_ENCODE); Z_RPNQuery *rpn; if (!parser) return 0; if (!odr) return 0; rpn = yaz_pqf_parse(parser, odr, pqf); if (!rpn) { const char *msg; size_t offset; int got_error = yaz_pqf_error (parser, &msg, &offset); if (expect_error == got_error) res = 1; } else if (expect_error == YAZ_PQF_ERROR_NONE) { WRBUF wrbuf = wrbuf_alloc(); if (wrbuf) { yaz_rpnquery_to_wrbuf(wrbuf, rpn); if (!strcmp(wrbuf_cstr(wrbuf), expect_pqf)) { res = 1; } wrbuf_destroy(wrbuf); } } yaz_pqf_destroy(parser); odr_destroy(odr); return res; } static void tst(void) { YAZ_CHECK(expect_pqf("a", "@attrset Bib-1 a", YAZ_PQF_ERROR_NONE)); YAZ_CHECK(expect_pqf("@attr 1=4 a", "@attrset Bib-1 @attr 1=4 a", YAZ_PQF_ERROR_NONE)); YAZ_CHECK(expect_pqf("@attr 1=title a", "@attrset Bib-1 @attr 1=title a", YAZ_PQF_ERROR_NONE)); YAZ_CHECK(expect_pqf("a b", "", YAZ_PQF_ERROR_EXTRA)); YAZ_CHECK(expect_pqf("@and a", "", YAZ_PQF_ERROR_MISSING)); YAZ_CHECK(expect_pqf("@attr p=q a", "", YAZ_PQF_ERROR_BAD_INTEGER)); YAZ_CHECK(expect_pqf("@prox 0 0 0 0 k 0 a b", "@attrset Bib-1 @prox 0 0 0 0 k 0 a b", YAZ_PQF_ERROR_NONE)); YAZ_CHECK(expect_pqf("@prox 0 0 0 0 3 0 a b", "", YAZ_PQF_ERROR_PROXIMITY)); YAZ_CHECK(expect_pqf("@attr 1=12345678901 x", "@attrset Bib-1 @attr 1=12345678901 x", YAZ_PQF_ERROR_NONE)); YAZ_CHECK(expect_pqf("@attr 1=1234567890.1 x", "@attrset Bib-1 @attr 1=1234567890.1 x", YAZ_PQF_ERROR_NONE)); } int main (int argc, char **argv) { YAZ_CHECK_INIT(argc, argv); tst(); YAZ_CHECK_TERM; } /* * Local variables: * c-basic-offset: 4 * c-file-style: "Stroustrup" * indent-tabs-mode: nil * End: * vim: shiftwidth=4 tabstop=8 expandtab */ yaz-4.2.30/test/xml2marc5.xml0000644000175000017500000000311611741237740012646 00000000000000 00492nam a22001455a 450000027748520051026111436.0050413s1894 gr 000 0 gre dΜαρούδης, Κωνσταντίνος ΙωΕλληνικόν κρυπτογραφικόν λεξικόν /Κωνστ. Ι. Μαρούδης. εκδ.Αθήνα,1894.248 σελ.Greek language, ModernDialectsDictionariesCryptography. yaz-4.2.30/test/marc3.xml0000644000175000017500000001031111741237740012034 00000000000000 00914naa a2200337 450 a00001508 a i n 1991 xx nor a 9 a xx nor eng 06 Byfornyelse ved Ibsen-Ringen farvefoto plan snit Byggekunst 1991 1/2 41-45 byfornyelse sanering Norge Oslo Telje Torp Aasen Arkitektkontor Kristian Augustsgate 7B Eng, Dagfin anlund, Tom Kristian Augustsgate Pilestredet 19 a ITM ARK50 0000145 1991 1/2 41-45 20020111 ARK01 2002 20020111 ARK01 2116 20021002 ARK01 1000 ICLLOAD 00 20021122 ARK01 1948 20030618 ARK01 1330 a00001508 yaz-4.2.30/test/test_icu.3.input0000644000175000017500000000002511733047144013345 00000000000000men running he runs yaz-4.2.30/test/test_xmalloc.c0000644000175000017500000000201111733047144013143 00000000000000/* This file is part of the YAZ toolkit. * Copyright (C) 1995-2012 Index Data * See the file LICENSE for details. */ #if HAVE_CONFIG_H #include #endif #include #include #include #include void tst(void) { char *p = 0; p = (char *) xmalloc(10); YAZ_CHECK(p); p = (char *) xrealloc(p, 20); YAZ_CHECK(p); xfree(p); p = xstrdup("hello"); YAZ_CHECK(p); if (!p) return; YAZ_CHECK(!strcmp(p, "hello")); xfree(p); p = xstrndup("hello", 2); YAZ_CHECK(p); if (!p) return; YAZ_CHECK(!strcmp(p, "he")); xfree(p); p = xstrndup("hello", 6); YAZ_CHECK(p); if (!p) return; YAZ_CHECK(!strcmp(p, "hello")); xfree(p); } int main (int argc, char **argv) { YAZ_CHECK_INIT(argc, argv); tst(); YAZ_CHECK_TERM; } /* * Local variables: * c-basic-offset: 4 * c-file-style: "Stroustrup" * indent-tabs-mode: nil * End: * vim: shiftwidth=4 tabstop=8 expandtab */ yaz-4.2.30/test/xml2tmarc5.xml0000644000175000017500000000215011741237740013027 00000000000000 00492nam a22001455a 450000027748520051026111436.0050413s1894 gr 000 0 gre dΜαρούδης, Κωνσταντίνος ΙωΕλληνικόν κρυπτογραφικόν λεξικόν /Κωνστ. Ι. Μαρούδης. εκδ.Αθήνα,1894.248 σελ.Greek language, ModernDialectsDictionariesCryptography. yaz-4.2.30/test/marc5.marc0000644000175000017500000000075411741237740012172 0000000000000000492nam a22001455a 450000100100000000500170001000800410002710000520006824501040012025000140022426000230023830000160026165000510027765000180032800027748520051026111436.0050413s1894 gr 000 0 gre d1 aΜαÏοÏδης, Κωνσταντίνος Ιω10aΕλληνικόν κÏυπτογÏαφικόν λεξικόν /cΚωνστ. Ι. ΜαÏοÏδης. 2η εκδ. aΑθήνα,c1894. a248 σελ. 0aGreek language, ModernxDialectsvDictionaries 0aCryptography.yaz-4.2.30/test/test_shared_ptr.c0000644000175000017500000000163711733047144013654 00000000000000/* This file is part of the YAZ toolkit. * Copyright (C) 1995-2012 Index Data * See the file LICENSE for details. */ /** * \file test_shared_ptr.c * \brief test shared pointer */ #if HAVE_CONFIG_H #include #endif #include #include #include #include #include #include YAZ_SHPTR_TYPE(WRBUF) static void test(void) { WRBUF w = wrbuf_alloc(); WRBUF_shptr_t t = 0; YAZ_SHPTR_INIT(t, w); YAZ_CHECK(t); YAZ_SHPTR_INC(t); YAZ_CHECK(t); YAZ_SHPTR_DEC(t, wrbuf_destroy); YAZ_CHECK(t); YAZ_SHPTR_DEC(t, wrbuf_destroy); YAZ_CHECK(!t); } int main (int argc, char **argv) { YAZ_CHECK_INIT(argc, argv); test(); YAZ_CHECK_TERM; } /* * Local variables: * c-basic-offset: 4 * c-file-style: "Stroustrup" * indent-tabs-mode: nil * End: * vim: shiftwidth=4 tabstop=8 expandtab */ yaz-4.2.30/test/test_query_charset.c0000644000175000017500000000410711733047144014372 00000000000000/* This file is part of the YAZ toolkit. * Copyright (C) 1995-2012 Index Data * See the file LICENSE for details. */ #if HAVE_CONFIG_H #include #endif #include #include #include #include #include #include #include enum query_charset_status { NO_ERROR, PQF_FAILED, MATCH, NO_MATCH, CONV_FAILED }; enum query_charset_status t(yaz_iconv_t cd, const char *pqf, const char *expect_pqf) { YAZ_PQF_Parser parser = yaz_pqf_create(); ODR odr = odr_createmem(ODR_ENCODE); Z_RPNQuery *rpn; enum query_charset_status status = NO_ERROR; YAZ_CHECK(parser); YAZ_CHECK(odr); rpn = yaz_pqf_parse(parser, odr, pqf); yaz_pqf_destroy(parser); if (!rpn) status = PQF_FAILED; else { WRBUF w = wrbuf_alloc(); Z_RPNQuery *r2 = yaz_copy_z_RPNQuery(rpn, odr); YAZ_CHECK(r2); YAZ_CHECK(r2 != rpn); yaz_query_charset_convert_rpnquery(rpn, odr, cd); yaz_rpnquery_to_wrbuf(w, rpn); if (!expect_pqf || strcmp(expect_pqf, wrbuf_cstr(w)) == 0) status = MATCH; else { status = NO_MATCH; printf("Result: %s\n", wrbuf_cstr(w)); } wrbuf_destroy(w); } odr_destroy(odr); return status; } static void tst(void) { yaz_iconv_t cd = yaz_iconv_open("iso-8859-1", "utf-8"); YAZ_CHECK(cd); if (!cd) return; YAZ_CHECK_EQ(t(cd, "@attr 1=4 bad query", 0), PQF_FAILED); YAZ_CHECK_EQ(t(cd, "@attr 1=4 ok", "@attrset Bib-1 @attr 1=4 ok"), MATCH); /* m followed by latin smaller letter ae */ YAZ_CHECK_EQ(t(cd, "@attr 1=4 m\xc3\xa6", "@attrset Bib-1 @attr 1=4 m\xe6"), MATCH); yaz_iconv_close(cd); } int main (int argc, char **argv) { YAZ_CHECK_INIT(argc, argv); tst(); YAZ_CHECK_TERM; } /* * Local variables: * c-basic-offset: 4 * c-file-style: "Stroustrup" * indent-tabs-mode: nil * End: * vim: shiftwidth=4 tabstop=8 expandtab */ yaz-4.2.30/test/xml2marc3.xml0000644000175000017500000000734111741237740012650 00000000000000 00914naa a2200337 450 a00001508ain1991xxnora9axxnoreng06Byfornyelse ved Ibsen-RingenfarvefotoplansnitByggekunst19911/241-45byfornyelsesaneringNorgeOsloTelje Torp Aasen ArkitektkontorKristian Augustsgate 7BEng, Dagfinanlund, TomKristian AugustsgatePilestredet 19aITMARK50000014519911/241-4520020111ARK01200220020111ARK01211620021002ARK011000ICLLOAD0020021122ARK01194820030618ARK011330a00001508 yaz-4.2.30/test/test_ccl.c0000644000175000017500000003656511733047144012272 00000000000000/* This file is part of the YAZ toolkit. * Copyright (C) 1995-2012 Index Data * See the file LICENSE for details. */ #if HAVE_CONFIG_H #include #endif #include #include #include #include static int tst_ccl_query(CCL_bibset bibset, const char *query, const char *result) { CCL_parser parser = ccl_parser_create(bibset); int ret = 0; if (parser && bibset) { struct ccl_rpn_node *rpn; rpn = ccl_parser_find_str(parser, query); if (rpn) { /* parse ok. check that result is there and match */ WRBUF wrbuf = wrbuf_alloc(); ccl_pquery(wrbuf, rpn); /* check expect a result and that it matches */ if (result && !strcmp(wrbuf_cstr(wrbuf), result)) ret = 1; else { yaz_log(YLOG_WARN, "%s: result does not match", query); yaz_log(YLOG_WARN, " expected %s", result); yaz_log(YLOG_WARN, " got %s", wrbuf_cstr(wrbuf)); ret = 0; } ccl_rpn_delete(rpn); wrbuf_destroy(wrbuf); } else { if (result) { yaz_log(YLOG_WARN, "%s: parse failed", query); ret = 0; } else ret = 1; } } ccl_parser_destroy (parser); return ret; } void tst1(int pass) { CCL_bibset bibset = ccl_qual_mk(); char tstline[128]; YAZ_CHECK(bibset); if (!bibset) return; if (pass == 1) { CCL_bibset nbibset = ccl_qual_dup(bibset); ccl_qual_rm(&bibset); bibset = nbibset; } switch(pass) { case 0: ccl_qual_fitem(bibset, "u=4 s=pw t=l,r", "ti"); ccl_qual_fitem(bibset, "1=1016 s=al,pw t=r", "term"); ccl_qual_fitem(bibset, "t=x", "reg"); ccl_qual_fitem(bibset, "t=z", "z"); ccl_qual_fitem(bibset, "1=/my/title", "dc.title"); ccl_qual_fitem(bibset, "r=r", "date"); ccl_qual_fitem(bibset, "r=o", "x"); ccl_qual_fitem(bibset, "dc.title", "title"); ccl_qual_fitem(bibset, "term dc.title", "comb"); break; case 1: strcpy(tstline, "ti u=4 s=pw t=l,r"); ccl_qual_line(bibset, tstline); strcpy(tstline, "term 1=1016 s=al,pw t=r # default term"); ccl_qual_line(bibset, tstline); strcpy(tstline, "reg t=x"); ccl_qual_line(bibset, tstline); strcpy(tstline, "z t=z"); ccl_qual_line(bibset, tstline); strcpy(tstline, "dc.title 1=/my/title"); ccl_qual_line(bibset, tstline); strcpy(tstline, "date r=r # ordered relation"); ccl_qual_line(bibset, tstline); strcpy(tstline, "x r=o # ordered relation"); ccl_qual_line(bibset, tstline); strcpy(tstline, "title dc.title # alias"); ccl_qual_line(bibset, tstline); strcpy(tstline, "comb term dc.title # combination"); ccl_qual_line(bibset, tstline); break; case 2: ccl_qual_buf(bibset, "ti u=4 s=pw t=l,r\n" "term 1=1016 s=al,pw t=r\r\n" "\n" "reg t=x\r\n" "z t=z\r\n" "dc.title 1=/my/title\n" "date r=r\n" "x r=o\n" "title dc.title\n" "comb term dc.title\n" ); break; case 3: #if YAZ_HAVE_XML2 if (1) { xmlDocPtr doc; int r; const char *addinfo = 0; const char *xml_str = "\n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" "\n"; doc = xmlParseMemory(xml_str, strlen(xml_str)); YAZ_CHECK(doc); r = ccl_xml_config(bibset, xmlDocGetRootElement(doc), &addinfo); YAZ_CHECK_EQ(r, 0); xmlFreeDoc(doc); } break; #else return; #endif default: YAZ_CHECK(0); return; } YAZ_CHECK(tst_ccl_query(bibset, "x1", "@attr 4=2 @attr 1=1016 x1 ")); YAZ_CHECK(tst_ccl_query(bibset, "k\xc3\xb8" "benhavn", "@attr 4=2 @attr 1=1016 k\xc3\xb8" "benhavn ")); YAZ_CHECK(tst_ccl_query(bibset, "k\xf8" "benhavn", "@attr 4=2 @attr 1=1016 ""k\xf8" "benhavn ")); YAZ_CHECK(tst_ccl_query(bibset, "(((((x1)))))", "@attr 4=2 @attr 1=1016 x1 ")); YAZ_CHECK(tst_ccl_query(bibset, "x1 and x2", "@and " "@attr 4=2 @attr 1=1016 x1 " "@attr 4=2 @attr 1=1016 x2 ")); YAZ_CHECK(tst_ccl_query(bibset, "ti=x3", "@attr 4=2 @attr 1=4 x3 ")); YAZ_CHECK(tst_ccl_query(bibset, "dc.title=x4", "@attr 1=/my/title x4 ")); YAZ_CHECK(tst_ccl_query(bibset, "dc.title=(x4)", "@attr 1=/my/title x4 ")); YAZ_CHECK(tst_ccl_query(bibset, "x1 and", 0)); YAZ_CHECK(tst_ccl_query(bibset, "tix=x5", 0)); YAZ_CHECK(tst_ccl_query(bibset, "a%b", "@prox 0 1 0 2 k 2 " "@attr 4=2 @attr 1=1016 a " "@attr 4=2 @attr 1=1016 b ")); YAZ_CHECK(tst_ccl_query(bibset, "a%(b)", "@prox 0 1 0 2 k 2 " "@attr 4=2 @attr 1=1016 a " "@attr 4=2 @attr 1=1016 b ")); YAZ_CHECK(tst_ccl_query(bibset, "(a)%(b)", "@prox 0 1 0 2 k 2 " "@attr 4=2 @attr 1=1016 a " "@attr 4=2 @attr 1=1016 b ")); YAZ_CHECK(tst_ccl_query(bibset, "a%1b", "@prox 0 1 0 2 k 2 " "@attr 4=2 @attr 1=1016 a " "@attr 4=2 @attr 1=1016 b ")); YAZ_CHECK(tst_ccl_query(bibset, "a%2b", "@prox 0 2 0 2 k 2 " "@attr 4=2 @attr 1=1016 a " "@attr 4=2 @attr 1=1016 b ")); YAZ_CHECK(tst_ccl_query(bibset, "(a)%2(b)", "@prox 0 2 0 2 k 2 " "@attr 4=2 @attr 1=1016 a " "@attr 4=2 @attr 1=1016 b ")); YAZ_CHECK(tst_ccl_query(bibset, "a%19b", "@prox 0 19 0 2 k 2 " "@attr 4=2 @attr 1=1016 a " "@attr 4=2 @attr 1=1016 b ")); YAZ_CHECK(tst_ccl_query(bibset, "spid%æserne", "@prox 0 1 0 2 k 2 " "@attr 4=2 @attr 1=1016 spid " "@attr 4=2 @attr 1=1016 æserne ")); YAZ_CHECK(tst_ccl_query(bibset, "a!b", "@prox 0 1 1 2 k 2 " "@attr 4=2 @attr 1=1016 a " "@attr 4=2 @attr 1=1016 b ")); YAZ_CHECK(tst_ccl_query(bibset, "a!2b", "@prox 0 2 1 2 k 2 " "@attr 4=2 @attr 1=1016 a " "@attr 4=2 @attr 1=1016 b ")); YAZ_CHECK(tst_ccl_query(bibset, "a% (b or dc.title=c)", "@prox 0 1 0 2 k 2 " "@attr 4=2 @attr 1=1016 a " "@or @attr 4=2 @attr 1=1016 b " "@attr 4=2 @attr 1=1016 @attr 1=/my/title c ")); YAZ_CHECK(tst_ccl_query(bibset, "(a b) % (c)", "@prox 0 1 0 2 k 2 @and " "@attr 4=2 @attr 1=1016 a @attr 4=2 @attr 1=1016 b " "@attr 4=2 @attr 1=1016 c " )); YAZ_CHECK(tst_ccl_query(bibset, "date=1980", "@attr 2=3 1980 ")); YAZ_CHECK(tst_ccl_query(bibset, "(date=1980)", "@attr 2=3 1980 ")); YAZ_CHECK(tst_ccl_query(bibset, "date=234-1990", "@and @attr 2=4 234 @attr 2=2 1990 ")); YAZ_CHECK(tst_ccl_query(bibset, "date=234- 1990", "@and @attr 2=4 234 @attr 2=2 1990 ")); YAZ_CHECK(tst_ccl_query(bibset, "date=234 -1990", "@and @attr 2=4 234 @attr 2=2 1990 ")); YAZ_CHECK(tst_ccl_query(bibset, "date=234 - 1990", "@and @attr 2=4 234 @attr 2=2 1990 ")); YAZ_CHECK(tst_ccl_query(bibset, "date=-1980", "@attr 2=2 1980 ")); YAZ_CHECK(tst_ccl_query(bibset, "date=- 1980", "@attr 2=2 1980 ")); YAZ_CHECK(tst_ccl_query(bibset, "x=-1980", "@attr 2=3 -1980 ")); YAZ_CHECK(tst_ccl_query(bibset, "x=- 1980", "@attr 2=2 1980 ")); YAZ_CHECK(tst_ccl_query(bibset, "x= -1980", "@attr 2=3 -1980 ")); YAZ_CHECK(tst_ccl_query(bibset, "x=234-1990", "@attr 2=3 234-1990 ")); YAZ_CHECK(tst_ccl_query(bibset, "x=234 - 1990", "@and @attr 2=4 234 @attr 2=2 1990 ")); YAZ_CHECK(tst_ccl_query(bibset, "ti=a,b", "@attr 4=1 @attr 1=4 a,b ")); YAZ_CHECK(tst_ccl_query(bibset, "ti=a, b", "@attr 4=1 @attr 1=4 \"a, b\" ")); YAZ_CHECK(tst_ccl_query(bibset, "ti=a-b", "@attr 4=2 @attr 1=4 a-b ")); YAZ_CHECK(tst_ccl_query(bibset, "ti=a - b", "@attr 4=1 @attr 1=4 \"a - b\" ")); YAZ_CHECK(tst_ccl_query(bibset, "a?", "@attr 5=1 @attr 4=2 @attr 1=1016 a ")); YAZ_CHECK(tst_ccl_query(bibset, "a b", "@and @attr 4=2 @attr 1=1016 a " "@attr 4=2 @attr 1=1016 b ")); YAZ_CHECK(tst_ccl_query(bibset, "a b?", "@and @attr 4=2 @attr 1=1016 a " "@attr 5=1 @attr 4=2 @attr 1=1016 b ")); YAZ_CHECK(tst_ccl_query(bibset, "title=a", "@attr 1=/my/title a ")); YAZ_CHECK(tst_ccl_query(bibset, "reg=a?b#\"c?\"", "@attr 5=102 a.*b.c\\\\? ")); YAZ_CHECK(tst_ccl_query(bibset, "z=a?b#\"c?\"", "@attr 5=104 a?b#c\\\\? ")); YAZ_CHECK(tst_ccl_query(bibset, "reg=\\(", "@attr 5=102 \\\\( ")); YAZ_CHECK(tst_ccl_query(bibset, "z=\\(", "( ")); YAZ_CHECK(tst_ccl_query(bibset, "reg=\\\"", "\"\\\"\" ")); YAZ_CHECK(tst_ccl_query(bibset, "z=\\\"", "\"\\\"\" ")); YAZ_CHECK(tst_ccl_query(bibset, "reg=.", "@attr 5=102 \\\\. ")); YAZ_CHECK(tst_ccl_query(bibset, "z=.", ". ")); YAZ_CHECK(tst_ccl_query(bibset, "reg=\".\"", "@attr 5=102 \\\\. ")); YAZ_CHECK(tst_ccl_query(bibset, "z=\".\"", ". ")); YAZ_CHECK(tst_ccl_query(bibset, "reg=?\\?", "@attr 5=102 .*\\\\? ")); YAZ_CHECK(tst_ccl_query(bibset, "z=?\\?", "@attr 5=104 ?\\\\? ")); YAZ_CHECK(tst_ccl_query(bibset, "reg=\"?\\?\"", "@attr 5=102 \\\\?\\\\? ")); YAZ_CHECK(tst_ccl_query(bibset, "z=\"?\\?\"", "@attr 5=104 \\\\?\\\\? ")); YAZ_CHECK(tst_ccl_query(bibset, "reg=\\\\", "@attr 5=102 \\\\\\\\ ")); YAZ_CHECK(tst_ccl_query(bibset, "z=\\\\", "@attr 5=104 \\\\\\\\ ")); YAZ_CHECK(tst_ccl_query(bibset, "\\\\", "@attr 4=2 @attr 1=1016 \\\\ ")); YAZ_CHECK(tst_ccl_query(bibset, "comb=a", "@or @attr 4=2 @attr 1=1016 a " "@attr 1=/my/title a ")); YAZ_CHECK(tst_ccl_query(bibset, "a? b?", "@and @attr 5=1 @attr 4=2 @attr 1=1016 a " "@attr 5=1 @attr 4=2 @attr 1=1016 b ")); YAZ_CHECK(tst_ccl_query(bibset, "\"a\"? \"b?\"", "@and @attr 5=1 @attr 4=2 @attr 1=1016 a " "@attr 4=2 @attr 1=1016 b? ")); YAZ_CHECK(tst_ccl_query(bibset, "@and", "@attr 4=2 @attr 1=1016 \\@and ")); YAZ_CHECK(tst_ccl_query(bibset, "a@and", "@attr 4=2 @attr 1=1016 a@and ")); YAZ_CHECK(tst_ccl_query(bibset, "}", "@attr 4=2 @attr 1=1016 } ")); YAZ_CHECK(tst_ccl_query(bibset, "{", "@attr 4=2 @attr 1=1016 \"{\" ")); YAZ_CHECK(tst_ccl_query(bibset, "\"a b c\"", "@attr 4=1 @attr 1=1016 \"a b c\" ")); YAZ_CHECK(tst_ccl_query(bibset, "\"a b c \"", "@attr 4=1 @attr 1=1016 \"a b c \" ")); ccl_qual_rm(&bibset); } void tst2(void) { CCL_bibset bibset = ccl_qual_mk(); YAZ_CHECK(bibset); if (!bibset) return; ccl_qual_fitem(bibset, "u=4 s=pw t=l,r", "ti"); ccl_qual_fitem(bibset, "1=1016 s=al,pw t=z", "term"); YAZ_CHECK(tst_ccl_query(bibset, "a*", "@attr 4=2 @attr 1=1016 a* ")); YAZ_CHECK(tst_ccl_query(bibset, "a?", "@attr 5=104 @attr 4=2 @attr 1=1016 a? ")); ccl_qual_fitem(bibset, "*", "@truncation"); YAZ_CHECK(tst_ccl_query(bibset, "a*", "@attr 5=104 @attr 4=2 @attr 1=1016 a? ")); YAZ_CHECK(tst_ccl_query(bibset, "a?", "@attr 5=104 @attr 4=2 @attr 1=1016 a\\\\? ")); ccl_qual_fitem(bibset, "og", "@and"); ccl_qual_fitem(bibset, "eller", "@or"); ccl_qual_fitem(bibset, "ikke", "@not"); YAZ_CHECK(tst_ccl_query(bibset, "a og b eller c ikke d", "@not @or @and @attr 4=2 @attr 1=1016 a " "@attr 4=2 @attr 1=1016 b " "@attr 4=2 @attr 1=1016 c " "@attr 4=2 @attr 1=1016 d ")); ccl_qual_rm(&bibset); } int main(int argc, char **argv) { YAZ_CHECK_INIT(argc, argv); YAZ_CHECK_LOG(); tst1(0); tst1(1); tst1(2); tst1(3); tst2(); YAZ_CHECK_TERM; } /* * Local variables: * c-basic-offset: 4 * c-file-style: "Stroustrup" * indent-tabs-mode: nil * End: * vim: shiftwidth=4 tabstop=8 expandtab */ yaz-4.2.30/test/cql/0000755000175000017500000000000011741237740011150 500000000000000yaz-4.2.30/test/cql/12.1.err0000644000175000017500000000001511741237740012157 00000000000000Syntax error yaz-4.2.30/test/cql/6.1.out0000644000175000017500000000020511741237740012122 00000000000000 cql.serverChoice = cat^ yaz-4.2.30/test/cql/11.1.out0000644000175000017500000000022311741237740012176 00000000000000 cql.serverChoice = a b yaz-4.2.30/test/cql/2.10.out0000644000175000017500000000017411741237740012203 00000000000000 title any frog yaz-4.2.30/test/cql/2.9.out0000644000175000017500000000044011741237740012127 00000000000000 dc.fish all fuzzy stem fish chips yaz-4.2.30/test/cql/10.3.err0000644000175000017500000000001511741237740012157 00000000000000Syntax error yaz-4.2.30/test/cql/13.2.err0000644000175000017500000000000011741237740012153 00000000000000yaz-4.2.30/test/cql/6.4.out0000644000175000017500000000021111741237740012122 00000000000000 cql.serverChoice = cat*fish yaz-4.2.30/test/cql/1.5.out0000644000175000017500000000022411741237740012122 00000000000000 cql.serverChoice = <xml:element> yaz-4.2.30/test/cql/1.2.err0000644000175000017500000000000011741237740012070 00000000000000yaz-4.2.30/test/cql/1.3.err0000644000175000017500000000000011741237740012071 00000000000000yaz-4.2.30/test/cql/3.1.err0000644000175000017500000000000011741237740012071 00000000000000yaz-4.2.30/test/cql/3.1.out0000644000175000017500000000070611741237740012125 00000000000000 or cql.serverChoice = cat cql.serverChoice = dog yaz-4.2.30/test/cql/12.2.err0000644000175000017500000000001511741237740012160 00000000000000Syntax error yaz-4.2.30/test/cql/10.8.err0000644000175000017500000000001511741237740012164 00000000000000Syntax error yaz-4.2.30/test/cql/11.3.err0000644000175000017500000000000011741237740012152 00000000000000yaz-4.2.30/test/cql/2.2.err0000644000175000017500000000000011741237740012071 00000000000000yaz-4.2.30/test/cql/10.7.out0000644000175000017500000000000011741237740012174 00000000000000yaz-4.2.30/test/cql/5.5.err0000644000175000017500000000000011741237740012077 00000000000000yaz-4.2.30/test/cql/5.2.out0000644000175000017500000000144211741237740012126 00000000000000 prox ordered unit = word distance = 3 cql.serverChoice = cat cql.serverChoice = hat yaz-4.2.30/test/cql/11.5.err0000644000175000017500000000000011741237740012154 00000000000000yaz-4.2.30/test/cql/7.2.out0000644000175000017500000000231711741237740012132 00000000000000 or and cql.serverChoice = cat cql.serverChoice = dog and cql.serverChoice = horse cql.serverChoice = frog yaz-4.2.30/test/cql/3.5.err0000644000175000017500000000000011741237740012075 00000000000000yaz-4.2.30/test/cql/6.2.err0000644000175000017500000000000011741237740012075 00000000000000yaz-4.2.30/test/cql/10.2.err0000644000175000017500000000001511741237740012156 00000000000000Syntax error yaz-4.2.30/test/cql/10.5.out0000644000175000017500000000000011741237740012172 00000000000000yaz-4.2.30/test/cql/9.3.out0000644000175000017500000000020111741237740012123 00000000000000 cql.serverChoice = yaz-4.2.30/test/cql/2.1.err0000644000175000017500000000000011741237740012070 00000000000000yaz-4.2.30/test/cql/7.3.out0000644000175000017500000000242111741237740012127 00000000000000 and and cql.serverChoice = cat or cql.serverChoice = horse cql.serverChoice = frog cql.serverChoice = chips yaz-4.2.30/test/cql/11.5.out0000644000175000017500000000022511741237740012204 00000000000000 cql.serverChoice = all a yaz-4.2.30/test/cql/10.7.err0000644000175000017500000000001511741237740012163 00000000000000Syntax error yaz-4.2.30/test/cql/2.13.err0000644000175000017500000000000011741237740012153 00000000000000yaz-4.2.30/test/cql/10.2.out0000644000175000017500000000000011741237740012167 00000000000000yaz-4.2.30/test/cql/10.3.out0000644000175000017500000000000011741237740012170 00000000000000yaz-4.2.30/test/cql/5.4.err0000644000175000017500000000000011741237740012076 00000000000000yaz-4.2.30/test/cql/8.3.out0000644000175000017500000000132311741237740012130 00000000000000 and info:srw/cql-context-set/1/dc-v1.1 title = fish http://srw.cheshire3.org/contextSets/ccg/1.1/ force = 3 yaz-4.2.30/test/cql/2.6.err0000644000175000017500000000000011741237740012075 00000000000000yaz-4.2.30/test/cql/11.2.err0000644000175000017500000000000011741237740012151 00000000000000yaz-4.2.30/test/cql/8.2.out0000644000175000017500000000036211741237740012131 00000000000000 info:srw/cql-context-set/1/dc-v1.1 title = fish yaz-4.2.30/test/cql/3.7.err0000644000175000017500000000000011741237740012077 00000000000000yaz-4.2.30/test/cql/8.1.err0000644000175000017500000000000011741237740012076 00000000000000yaz-4.2.30/test/cql/2.8.out0000644000175000017500000000033511741237740012131 00000000000000 dc.title any stem fish yaz-4.2.30/test/cql/5.6.err0000644000175000017500000000000011741237740012100 00000000000000yaz-4.2.30/test/cql/1.9.err0000644000175000017500000000000011741237740012077 00000000000000yaz-4.2.30/test/cql/10.6.out0000644000175000017500000000000011741237740012173 00000000000000yaz-4.2.30/test/cql/10.1.out0000644000175000017500000000000011741237740012166 00000000000000yaz-4.2.30/test/cql/9.2.out0000644000175000017500000000020411741237740012125 00000000000000 cql.serverChoice = any yaz-4.2.30/test/cql/10.9.out0000644000175000017500000000021111741237740012202 00000000000000 title = illegal parentheses yaz-4.2.30/test/cql/9.3.err0000644000175000017500000000000011741237740012101 00000000000000yaz-4.2.30/test/cql/7.1.out0000644000175000017500000000241611741237740012131 00000000000000 and or or cql.serverChoice = cat cql.serverChoice = dog cql.serverChoice = horse cql.serverChoice = frog yaz-4.2.30/test/cql/3.4.err0000644000175000017500000000000011741237740012074 00000000000000yaz-4.2.30/test/cql/5.8.err0000644000175000017500000000000011741237740012102 00000000000000yaz-4.2.30/test/cql/2.7.out0000644000175000017500000000020511741237740012124 00000000000000 dc.title any fish chips yaz-4.2.30/test/cql/6.4.err0000644000175000017500000000000011741237740012077 00000000000000yaz-4.2.30/test/cql/9.1.out0000644000175000017500000000237411741237740012136 00000000000000 prox and or cql.serverChoice = any cql.serverChoice = all:stem all == any prox = fuzzy yaz-4.2.30/test/cql/1.8.out0000644000175000017500000000020411741237740012123 00000000000000 cql.serverChoice = cat yaz-4.2.30/test/cql/6.6.err0000644000175000017500000000000011741237740012101 00000000000000yaz-4.2.30/test/cql/7.2.err0000644000175000017500000000000011741237740012076 00000000000000yaz-4.2.30/test/cql/3.6.out0000644000175000017500000000071311741237740012130 00000000000000 and cql.serverChoice = xml cql.serverChoice = prox/// yaz-4.2.30/test/cql/3.3.out0000644000175000017500000000071011741237740012122 00000000000000 not cql.serverChoice = cat cql.serverChoice = frog yaz-4.2.30/test/cql/3.9.out0000644000175000017500000000240411741237740012132 00000000000000 not and or cql.serverChoice = a cql.serverChoice = b cql.serverChoice = c cql.serverChoice = d yaz-4.2.30/test/cql/1.10.out0000644000175000017500000000020411741237740012174 00000000000000 cql.serverChoice = all yaz-4.2.30/test/cql/10.4.out0000644000175000017500000000000011741237740012171 00000000000000yaz-4.2.30/test/cql/6.5.err0000644000175000017500000000000011741237740012100 00000000000000yaz-4.2.30/test/cql/2.9.err0000644000175000017500000000000011741237740012100 00000000000000yaz-4.2.30/test/cql/1.4.out0000644000175000017500000000021311741237740012117 00000000000000 cql.serverChoice = ml:element yaz-4.2.30/test/cql/3.5.out0000644000175000017500000000071511741237740012131 00000000000000 not cql.serverChoice = cat cql.serverChoice = fish food yaz-4.2.30/test/cql/3.7.out0000644000175000017500000000071011741237740012126 00000000000000 and cql.serverChoice = fred cql.serverChoice = any yaz-4.2.30/test/cql/1.3.out0000644000175000017500000000021611741237740012121 00000000000000 cql.serverChoice = comp.os.linux yaz-4.2.30/test/cql/9.4.out0000644000175000017500000000032311741237740012131 00000000000000 any any > any yaz-4.2.30/test/cql/4.1.err0000644000175000017500000000000011741237740012072 00000000000000yaz-4.2.30/test/cql/1.7.out0000644000175000017500000000023511741237740012126 00000000000000 cql.serverChoice = prox/distance<3/unit=word yaz-4.2.30/test/cql/4.2.out0000644000175000017500000000106411741237740012125 00000000000000 or title any stem fish dog cql.serverChoice = and yaz-4.2.30/test/cql/2.14.out0000644000175000017500000000054611741237740012212 00000000000000 creator any b.bar > 1 f.foo sanderson taylor yaz-4.2.30/test/cql/2.5.out0000644000175000017500000000017211741237740012125 00000000000000 title > 9 yaz-4.2.30/test/cql/1.5.err0000644000175000017500000000000011741237740012073 00000000000000yaz-4.2.30/test/cql/3.6.err0000644000175000017500000000000011741237740012076 00000000000000yaz-4.2.30/test/cql/7.3.err0000644000175000017500000000000011741237740012077 00000000000000yaz-4.2.30/test/cql/5.5.out0000644000175000017500000000115211741237740012127 00000000000000 prox distance <= 5 title all chips frog cql.serverChoice = exact yaz-4.2.30/test/cql/2.11.err0000644000175000017500000000000011741237740012151 00000000000000yaz-4.2.30/test/cql/6.5.out0000644000175000017500000000021011741237740012122 00000000000000 cql.serverChoice = cat?dog yaz-4.2.30/test/cql/11.6.err0000644000175000017500000000000011741237740012155 00000000000000yaz-4.2.30/test/cql/2.1.out0000644000175000017500000000017211741237740012121 00000000000000 title = fish yaz-4.2.30/test/cql/2.12.out0000644000175000017500000000021211741237740012176 00000000000000 dc.title = fish frog chicken yaz-4.2.30/test/cql/11.3.out0000644000175000017500000000022511741237740012202 00000000000000 cql.serverChoice = a.b c yaz-4.2.30/test/cql/5.3.out0000644000175000017500000000115111741237740012124 00000000000000 prox distance < 3 cql.serverChoice = cat cql.serverChoice = hat yaz-4.2.30/test/cql/1.11.out0000644000175000017500000000020511741237740012176 00000000000000 cql.serverChoice = prox yaz-4.2.30/test/cql/8.1.out0000644000175000017500000000017511741237740012132 00000000000000 dc.title = fish yaz-4.2.30/test/cql/5.6.out0000644000175000017500000000133711741237740012135 00000000000000 prox unit = element distance > 5 dc.author == jones title >= smith yaz-4.2.30/test/cql/1.8.err0000644000175000017500000000000011741237740012076 00000000000000yaz-4.2.30/test/cql/3.4.out0000644000175000017500000000071011741237740012123 00000000000000 not cql.serverChoice = cat cql.serverChoice = frog yaz-4.2.30/test/cql/5.3.err0000644000175000017500000000000011741237740012075 00000000000000yaz-4.2.30/test/cql/2.7.err0000644000175000017500000000000011741237740012076 00000000000000yaz-4.2.30/test/cql/1.9.out0000644000175000017500000000020411741237740012124 00000000000000 cql.serverChoice = dog yaz-4.2.30/test/cql/1.6.out0000644000175000017500000000020211741237740012117 00000000000000 cql.serverChoice = = yaz-4.2.30/test/cql/12.1.out0000644000175000017500000000000011741237740012170 00000000000000yaz-4.2.30/test/cql/10.10.out0000644000175000017500000000000011741237740012246 00000000000000yaz-4.2.30/test/cql/2.8.err0000644000175000017500000000000011741237740012077 00000000000000yaz-4.2.30/test/cql/3.3.err0000644000175000017500000000000011741237740012073 00000000000000yaz-4.2.30/test/cql/5.4.out0000644000175000017500000000115711741237740012133 00000000000000 prox unit = sentence cql.serverChoice = fish food cql.serverChoice = and yaz-4.2.30/test/cql/1.1.err0000644000175000017500000000000011741237740012067 00000000000000yaz-4.2.30/test/cql/11.1.err0000644000175000017500000000000011741237740012150 00000000000000yaz-4.2.30/test/cql/11.4.err0000644000175000017500000000000011741237740012153 00000000000000yaz-4.2.30/test/cql/1.11.err0000644000175000017500000000000011741237740012150 00000000000000yaz-4.2.30/test/cql/2.2.out0000644000175000017500000000017311741237740012123 00000000000000 title == fish yaz-4.2.30/test/cql/6.6.out0000644000175000017500000000022511741237740012131 00000000000000 cql.serverChoice = ^cat*fishdog\"horse? yaz-4.2.30/test/cql/11.2.out0000644000175000017500000000024411741237740012202 00000000000000 cql.serverChoice = a b c yaz-4.2.30/test/cql/3.9.err0000644000175000017500000000000011741237740012101 00000000000000yaz-4.2.30/test/cql/1.7.err0000644000175000017500000000000011741237740012075 00000000000000yaz-4.2.30/test/cql/9.4.err0000644000175000017500000000000011741237740012102 00000000000000yaz-4.2.30/test/cql/9.1.err0000644000175000017500000000000011741237740012077 00000000000000yaz-4.2.30/test/cql/3.8.err0000644000175000017500000000000011741237740012100 00000000000000yaz-4.2.30/test/cql/5.1.out0000644000175000017500000000071011741237740012122 00000000000000 prox cql.serverChoice = cat cql.serverChoice = hat yaz-4.2.30/test/cql/4.1.out0000644000175000017500000000071111741237740012122 00000000000000 and bath.uniformTitle any fish dc.title any cat dog yaz-4.2.30/test/cql/2.12.err0000644000175000017500000000000011741237740012152 00000000000000yaz-4.2.30/test/cql/5.7.out0000644000175000017500000000105411741237740012132 00000000000000 and rel.SumOfScores cql.serverChoice = a cql.serverChoice = b yaz-4.2.30/test/cql/2.3.out0000644000175000017500000000017411741237740012125 00000000000000 title any fish yaz-4.2.30/test/cql/3.2.out0000644000175000017500000000071011741237740012121 00000000000000 and cql.serverChoice = cat cql.serverChoice = fish yaz-4.2.30/test/cql/2.10.err0000644000175000017500000000000011741237740012150 00000000000000yaz-4.2.30/test/cql/2.13.out0000644000175000017500000000044411741237740012206 00000000000000 dc.title = rel.algorithm = CORI squid yaz-4.2.30/test/cql/2.3.err0000644000175000017500000000000011741237740012072 00000000000000yaz-4.2.30/test/cql/2.11.out0000644000175000017500000000034211741237740012201 00000000000000 dc.title any stem frog pond yaz-4.2.30/test/cql/11.6.out0000644000175000017500000000016511741237740012210 00000000000000 a any b yaz-4.2.30/test/cql/10.10.err0000644000175000017500000000001511741237740012235 00000000000000Syntax error yaz-4.2.30/test/cql/5.8.out0000644000175000017500000000115111741237740012131 00000000000000 and rel.algorithm = CORI cql.serverChoice = a cql.serverChoice = b yaz-4.2.30/test/cql/10.1.err0000644000175000017500000000001511741237740012155 00000000000000Syntax error yaz-4.2.30/test/cql/1.10.err0000644000175000017500000000000011741237740012147 00000000000000yaz-4.2.30/test/cql/1.4.err0000644000175000017500000000000011741237740012072 00000000000000yaz-4.2.30/test/cql/10.9.err0000644000175000017500000000000011741237740012157 00000000000000yaz-4.2.30/test/cql/7.1.err0000644000175000017500000000000011741237740012075 00000000000000yaz-4.2.30/test/cql/11.7.err0000644000175000017500000000000011741237740012156 00000000000000yaz-4.2.30/test/cql/2.6.out0000644000175000017500000000017411741237740012130 00000000000000 title >= 23 yaz-4.2.30/test/cql/11.4.out0000644000175000017500000000024611741237740012206 00000000000000 cql.serverChoice = and b c yaz-4.2.30/test/cql/2.4.err0000644000175000017500000000000011741237740012073 00000000000000yaz-4.2.30/test/cql/12.2.out0000644000175000017500000000000011741237740012171 00000000000000yaz-4.2.30/test/cql/11.7.out0000644000175000017500000000101111741237740012200 00000000000000 and cql.serverChoice = dc.title a b c cql.serverChoice = d yaz-4.2.30/test/cql/2.4.out0000644000175000017500000000017411741237740012126 00000000000000 title all fish yaz-4.2.30/test/cql/10.6.err0000644000175000017500000000001511741237740012162 00000000000000Syntax error yaz-4.2.30/test/cql/6.1.err0000644000175000017500000000000011741237740012074 00000000000000yaz-4.2.30/test/cql/13.1.out0000644000175000017500000000031511741237740012202 00000000000000 cql.serverChoice = a title yaz-4.2.30/test/cql/10.4.err0000644000175000017500000000001511741237740012160 00000000000000Syntax error yaz-4.2.30/test/cql/1.1.out0000644000175000017500000000020411741237740012114 00000000000000 cql.serverChoice = cat yaz-4.2.30/test/cql/5.2.err0000644000175000017500000000000011741237740012074 00000000000000yaz-4.2.30/test/cql/1.6.err0000644000175000017500000000000011741237740012074 00000000000000yaz-4.2.30/test/cql/5.7.err0000644000175000017500000000000011741237740012101 00000000000000yaz-4.2.30/test/cql/6.2.out0000644000175000017500000000020411741237740012122 00000000000000 cql.serverChoice = cat yaz-4.2.30/test/cql/2.5.err0000644000175000017500000000000011741237740012074 00000000000000yaz-4.2.30/test/cql/10.8.out0000644000175000017500000000000011741237740012175 00000000000000yaz-4.2.30/test/cql/4.2.err0000644000175000017500000000000011741237740012073 00000000000000yaz-4.2.30/test/cql/9.2.err0000644000175000017500000000000011741237740012100 00000000000000yaz-4.2.30/test/cql/8.3.err0000644000175000017500000000000011741237740012100 00000000000000yaz-4.2.30/test/cql/10.5.err0000644000175000017500000000001511741237740012161 00000000000000Syntax error yaz-4.2.30/test/cql/13.1.err0000644000175000017500000000000011741237740012152 00000000000000yaz-4.2.30/test/cql/8.2.err0000644000175000017500000000000011741237740012077 00000000000000yaz-4.2.30/test/cql/3.2.err0000644000175000017500000000000011741237740012072 00000000000000yaz-4.2.30/test/cql/6.3.err0000644000175000017500000000000011741237740012076 00000000000000yaz-4.2.30/test/cql/5.1.err0000644000175000017500000000000011741237740012073 00000000000000yaz-4.2.30/test/cql/1.2.out0000644000175000017500000000020411741237740012115 00000000000000 cql.serverChoice = cat yaz-4.2.30/test/cql/2.14.err0000644000175000017500000000000011741237740012154 00000000000000yaz-4.2.30/test/cql/3.8.out0000644000175000017500000000070711741237740012135 00000000000000 or cql.serverChoice = fred cql.serverChoice = all yaz-4.2.30/test/cql/6.3.out0000644000175000017500000000022311741237740012124 00000000000000 cql.serverChoice = ^cat says \"fish\" yaz-4.2.30/test/cql/13.2.out0000644000175000017500000000126511741237740012210 00000000000000 or cql.serverChoice = a cql.serverChoice = b title ascending author yaz-4.2.30/test/test_comstack.c0000644000175000017500000001752311733047144013326 00000000000000/* This file is part of the YAZ toolkit. * Copyright (C) 1995-2012 Index Data * See the file LICENSE for details. */ #if HAVE_CONFIG_H #include #endif #include #include #include #include #include #include static void tst_http_request(void) { { /* no content, no headers */ const char *http_buf = /*123456789012345678 */ "GET / HTTP/1.1\r\n" "\r\n" "GET / HTTP/1.0\r\n"; YAZ_CHECK_EQ(cs_complete_auto(http_buf, 1), 0); YAZ_CHECK_EQ(cs_complete_auto(http_buf, 2), 0); YAZ_CHECK_EQ(cs_complete_auto(http_buf, 16), 0); YAZ_CHECK_EQ(cs_complete_auto(http_buf, 17), 0); YAZ_CHECK_EQ(cs_complete_auto(http_buf, 18), 18); YAZ_CHECK_EQ(cs_complete_auto(http_buf, 19), 18); } { /* one header, no content */ const char *http_buf = /*123456789012345678 */ "GET / HTTP/1.1\r\n" "Content-Type: x\r\n" "\r\n" "GET / HTTP/1.0\r\n"; YAZ_CHECK_EQ(cs_complete_auto(http_buf, 1), 0); YAZ_CHECK_EQ(cs_complete_auto(http_buf, 2), 0); YAZ_CHECK_EQ(cs_complete_auto(http_buf, 34), 0); YAZ_CHECK_EQ(cs_complete_auto(http_buf, 35), 35); YAZ_CHECK_EQ(cs_complete_auto(http_buf, 36), 35); } { /* one content-length header, length 0 */ const char *http_buf = /*123456789012345678 */ "GET / HTTP/1.1\r\n" "Content-Length: 0\r\n" "\r\n" "GET / HTTP/1.0\r\n"; YAZ_CHECK_EQ(cs_complete_auto(http_buf, 1), 0); YAZ_CHECK_EQ(cs_complete_auto(http_buf, 2), 0); YAZ_CHECK_EQ(cs_complete_auto(http_buf, 35), 0); YAZ_CHECK_EQ(cs_complete_auto(http_buf, 37), 37); YAZ_CHECK_EQ(cs_complete_auto(http_buf, 38), 37); } { /* one content-length header, length 5 */ const char *http_buf = /*123456789012345678 */ "GET / HTTP/1.1\r\n" "Content-Length: 5\r\n" "\r\n" "ABCDE" "GET / HTTP/1.0\r\n"; YAZ_CHECK_EQ(cs_complete_auto(http_buf, 1), 0); YAZ_CHECK_EQ(cs_complete_auto(http_buf, 2), 0); YAZ_CHECK_EQ(cs_complete_auto(http_buf, 41), 0); YAZ_CHECK_EQ(cs_complete_auto(http_buf, 42), 42); YAZ_CHECK_EQ(cs_complete_auto(http_buf, 43), 42); } { /* LF only in GET, one content-length header, length 5 */ const char *http_buf = /*123456789012345678 */ "GET / HTTP/1.1\n" "Content-Length: 5\r\n" "\r\n" "ABCDE" "GET / HTTP/1.0\r\n"; YAZ_CHECK_EQ(cs_complete_auto(http_buf, 1), 0); YAZ_CHECK_EQ(cs_complete_auto(http_buf, 2), 0); YAZ_CHECK_EQ(cs_complete_auto(http_buf, 40), 0); YAZ_CHECK_EQ(cs_complete_auto(http_buf, 41), 41); YAZ_CHECK_EQ(cs_complete_auto(http_buf, 42), 41); } { /* LF only in all places, one content-length header, length 5 */ const char *http_buf = /*123456789012345678 */ "GET / HTTP/1.1\n" "Content-Length: 5\n" "\n" "ABCDE" "GET / HTTP/1.0\r\n"; YAZ_CHECK_EQ(cs_complete_auto(http_buf, 1), 0); YAZ_CHECK_EQ(cs_complete_auto(http_buf, 2), 0); YAZ_CHECK_EQ(cs_complete_auto(http_buf, 38), 0); YAZ_CHECK_EQ(cs_complete_auto(http_buf, 39), 39); YAZ_CHECK_EQ(cs_complete_auto(http_buf, 40), 39); } { /* one header, unknown transfer-encoding (no content) */ const char *http_buf = /*12345678901234567890123456789 */ "GET / HTTP/1.1\r\n" "Transfer-Encoding: chunke_\r\n" "\r\n" "GET / HTTP/1.0\r\n"; YAZ_CHECK_EQ(cs_complete_auto(http_buf, 45), 0); YAZ_CHECK_EQ(cs_complete_auto(http_buf, 46), 46); } { /* one header, one chunk */ const char *http_buf = /*12345678901234567890123456789 */ "GET / HTTP/1.1\r\n" "Transfer-Encoding: chunked\r\n" "\r\n" "3\r\n" "123\r\n" "0\r\n\r\n" "GET / HTTP/1.0\r\n"; YAZ_CHECK_EQ(cs_complete_auto(http_buf, 58), 0); YAZ_CHECK_EQ(cs_complete_auto(http_buf, 59), 59); } { /* one header, two chunks */ const char *http_buf = /*12345678901234567890123456789 */ "GET / HTTP/1.1\r\n" "Transfer-Encoding: chunked\r\n" "\r\n" "3\r\n" "123\r\n" "2\r\n" "12\n" "0\r\n\r\n" "GET / HTTP/1.0\r\n"; YAZ_CHECK_EQ(cs_complete_auto(http_buf, 64), 0); YAZ_CHECK_EQ(cs_complete_auto(http_buf, 65), 65); } } static void tst_http_response(void) { { /* unlimited content, no headers */ const char *http_buf = /*123456789012345678 */ "HTTP/1.1 200 OK\r\n" "\r\n" "HTTP/1.1 200 OK\r\n"; YAZ_CHECK_EQ(cs_complete_auto(http_buf, 1), 0); YAZ_CHECK_EQ(cs_complete_auto(http_buf, 2), 0); YAZ_CHECK_EQ(cs_complete_auto(http_buf, 24), 0); } { /* response, content */ const char *http_buf = /*123456789012345678 */ "HTTP/1.1 200 OK\r\n" "Content-Length: 2\r\n" "\r\n" "12" "HTTP/1.1 200 OK\r\n"; YAZ_CHECK_EQ(cs_complete_auto(http_buf, 1), 0); YAZ_CHECK_EQ(cs_complete_auto(http_buf, 2), 0); YAZ_CHECK_EQ(cs_complete_auto(http_buf, 39), 0); YAZ_CHECK_EQ(cs_complete_auto(http_buf, 40), 40); YAZ_CHECK_EQ(cs_complete_auto(http_buf, 41), 40); } } /** \brief COMSTACK synopsis from manual, doc/comstack.xml */ static int comstack_example(const char *server_address_str) { COMSTACK stack; char *buf = 0; int size = 0, length_incoming; void *server_address_ip; int status; char *protocol_package = "GET / HTTP/1.0\r\n\r\n"; int protocol_package_length = strlen(protocol_package); stack = cs_create(tcpip_type, 1, PROTO_HTTP); if (!stack) { perror("cs_create"); /* use perror() here since we have no stack yet */ return -1; } server_address_ip = cs_straddr(stack, server_address_str); if (!server_address_ip) { fprintf(stderr, "cs_straddr: address could not be resolved\n"); return -1; } status = cs_connect(stack, server_address_ip); if (status != 0) { fprintf(stderr, "cs_connect: %s\n", cs_strerror(stack)); return -1; } status = cs_put(stack, protocol_package, protocol_package_length); if (status) { fprintf(stderr, "cs_put: %s\n", cs_strerror(stack)); return -1; } /* Now get a response */ length_incoming = cs_get(stack, &buf, &size); if (!length_incoming) { fprintf(stderr, "Connection closed\n"); return -1; } else if (length_incoming < 0) { fprintf(stderr, "cs_get: %s\n", cs_strerror(stack)); return -1; } /* Print result */ fwrite(buf, length_incoming, 1, stdout); /* clean up */ cs_close(stack); if (buf) free(buf); return 0; } int main (int argc, char **argv) { YAZ_CHECK_INIT(argc, argv); YAZ_CHECK_LOG(); if (argc == 2) comstack_example(argv[1]); tst_http_request(); tst_http_response(); YAZ_CHECK_TERM; } /* * Local variables: * c-basic-offset: 4 * c-file-style: "Stroustrup" * indent-tabs-mode: nil * End: * vim: shiftwidth=4 tabstop=8 expandtab */ yaz-4.2.30/test/tmarc8.xml.marc0000644000175000017500000000512311741237740013153 0000000000000002643nam^a2200469^^^4500001001400000005001700014006001900031007001500050008004100065035001500106037009000121040004500211100002300256245028100279246006300560246006300623260014400686300001100830500001300841500005700854500009300911500002501004500005701029510002401086530004201110533008901152655002901241650004301270700003601313700002801349793003101377852001501408852001401423856015401437856015401591852003001745852002801775856015401803856014901957830004702106901002002153UCD-00259230120061209034435.0m d cr bn |||a|bb|920330s1583 enk s 000 0 eng d a99851339eo aCL0036000039bProQuest Information and Learning. 300 N. Zeeb Rd., Ann Arbor, MI 48106 aCu-RivEScCu-RivESdCStRLINedcrbdWaOLN1 aClinton, Atkinson.00aClinton, Purser & Arnold, to their countreymen wheresoeuerh[electronic resource] :bWherein is described by their own hands their vnfeigned penitence for their offences past: their patience in welcoming their death, & their duetiful minds towardes her most excellent Maiestie2 aClinton, Purser & Arnold, to their countreymen wheresoever2 aClinton, Purser & Arnold, to their countreymen wheresoever aLondon :bImprinted by Iohn Wolfe and are to be sold [by W. Wright] at the middle shop in the Poultry, ioyning S. Mildreds Church,c[1583?] a[12] p aIn verse aThe first poem is signed: Thomas Walton alias Purser aClinton's full name and bookseller's name from, and publication date conjectured by, STC aSignatures: Aâ´ B² aReproduction of the original in the Bodleian Library4 aSTC (2nd ed.)c5431 aAlso issued in print and on microform aElectronic reproduction.nMode of access: World Wide Web.nRestricted to UC campuses 7aElectronic texts.2local 0aPirateszEnglandvEarly works to 1800.1 aWalton, Thomas,dfl. 1583.4aut1 aArnold,dfl. 1583.4aut0 aEarly English books online aMERbkmain aSCBbnnet40zRestricted to UC campusesxSCP UCSDuhttp://gateway.proquest.com/openurl?ctx_ver=Z39.88-2003&res_id=xri:eebo&rft_val_fmt=&rft_id=xri:eebo:image:1661040zRestricted to UC campusesxSCP UCSDuhttp://gateway.proquest.com/openurl?ctx_ver=Z39.88-2003&res_id=xri:eebo&rft_val_fmt=&rft_id=xri:eebo:image:16610 aDVXLbELECT-GENhInternet aLAGEbin3Online access40zRestricted to UC campusesxSCP UCSDuhttp://gateway.proquest.com/openurl?ctx_ver=Z39.88-2003&res_id=xri:eebo&rft_val_fmt=&rft_id=xri:eebo:image:1661040zRestricted to UC campusesuhttp://gateway.proquest.com/openurl?ctx_ver=Z39.88-2003&res_id=xri:eebo&rft_val_fmt=&rft_id=xri:eebo:image:16610xCDL 0aEarly English books, 1475-1640 ;v1406:13. aDVXLb002592301yaz-4.2.30/test/test_odr.c0000644000175000017500000002275311733047144012307 00000000000000/* This file is part of the YAZ toolkit. * Copyright (C) 1995-2012 Index Data * See the file LICENSE for details. */ #if HAVE_CONFIG_H #include #endif #include #include #include #include "test_odrcodec.h" #include #define MYOID "1.2.3.4.5.6.7.8.9.10.11.12.13.14.15.16.17.18.19" void tst_MySequence1(ODR encode, ODR decode) { int ret; char *ber_buf; int ber_len; Yc_MySequence *s = (Yc_MySequence *) odr_malloc(encode, sizeof(*s)); Yc_MySequence *t; YAZ_CHECK(s); s->first = odr_intdup(encode, 12345); s->second = (Odr_oct *) odr_malloc(encode, sizeof(*s->second)); s->second->buf = (unsigned char *) "hello"; s->second->len = 5; s->second->size = 0; s->third = odr_booldup(encode, 1); s->fourth = odr_nullval(); s->fifth = odr_intdup(encode, YC_MySequence_enum1); s->myoid = odr_getoidbystr(decode, MYOID); ret = yc_MySequence(encode, &s, 0, 0); YAZ_CHECK(ret); if (!ret) return; ber_buf = odr_getbuf(encode, &ber_len, 0); odr_setbuf(decode, ber_buf, ber_len, 0); ret = yc_MySequence(decode, &t, 0, 0); YAZ_CHECK(ret); if (!ret) return; YAZ_CHECK(t); YAZ_CHECK(t->first && *t->first == 12345); YAZ_CHECK(t->second && t->second->buf && t->second->len == 5); YAZ_CHECK(t->second && t->second->buf && t->second->len == 5 && memcmp(t->second->buf, "hello", t->second->len) == 0); YAZ_CHECK(t->third && *t->third == 1); YAZ_CHECK(t->fourth); YAZ_CHECK(t->fifth && *t->fifth == YC_MySequence_enum1); YAZ_CHECK(t->myoid); if (t->myoid) { Odr_oid *myoid = odr_getoidbystr(decode, MYOID); YAZ_CHECK(oid_oidcmp(myoid, t->myoid) == 0); } } void tst_MySequence2(ODR encode, ODR decode) { int ret; Yc_MySequence *s = (Yc_MySequence *) odr_malloc(encode, sizeof(*s)); YAZ_CHECK(s); s->first = 0; /* deliberately miss this .. */ s->second = (Odr_oct *) odr_malloc(encode, sizeof(*s->second)); s->second->buf = (unsigned char *) "hello"; s->second->len = 5; s->second->size = 0; s->third = odr_booldup(encode, 1); s->fourth = odr_nullval(); s->fifth = odr_intdup(encode, YC_MySequence_enum1); s->myoid = odr_getoidbystr(encode, MYOID); ret = yc_MySequence(encode, &s, 0, 0); /* should fail */ YAZ_CHECK(!ret); YAZ_CHECK(odr_geterror(encode) == OREQUIRED); YAZ_CHECK(strcmp(odr_getelement(encode), "first") == 0); odr_reset(encode); YAZ_CHECK(odr_geterror(encode) == ONONE); YAZ_CHECK(strcmp(odr_getelement(encode), "") == 0); } void tst_MySequence3(ODR encode, ODR decode) { char buf[40]; int i; Yc_MySequence *t; srand(123); for (i = 0; i < 1000; i++) { int j; for (j = 0; j < (int) sizeof(buf); j++) buf[j] = rand(); for (j = 1; j < (int) sizeof(buf); j++) { odr_setbuf(decode, buf, j, 0); yc_MySequence(decode, &t, 0, 0); odr_reset(decode); } } } static void tst_berint32(ODR encode, ODR decode) { char *buf = 0; int len = 0; Odr_int val; Odr_int ret_val; int r; val = 0; odr_reset(encode); r = ber_integer(encode, &val); YAZ_CHECK_EQ(r, 1); buf = odr_getbuf(encode, &len, 0); YAZ_CHECK(buf); YAZ_CHECK_EQ(len, 2); YAZ_CHECK_EQ(buf[0], 1); YAZ_CHECK_EQ(buf[1], 0); odr_reset(decode); odr_setbuf(decode, buf, len, 0); ber_integer(decode, &ret_val); YAZ_CHECK_EQ(ret_val, 0); val = 1; odr_reset(encode); r = ber_integer(encode, &val); YAZ_CHECK_EQ(r, 1); buf = odr_getbuf(encode, &len, 0); YAZ_CHECK(buf); YAZ_CHECK_EQ(len, 2); YAZ_CHECK_EQ(buf[0], 1); YAZ_CHECK_EQ(buf[1], 1); odr_reset(decode); odr_setbuf(decode, buf, len, 0); ber_integer(decode, &ret_val); YAZ_CHECK_EQ(ret_val, 1); val = -1; odr_reset(encode); r = ber_integer(encode, &val); YAZ_CHECK_EQ(r, 1); buf = odr_getbuf(encode, &len, 0); YAZ_CHECK(buf); YAZ_CHECK_EQ(len, 2); YAZ_CHECK_EQ(buf[0], 1); YAZ_CHECK_EQ((unsigned char) buf[1], 255); odr_reset(decode); odr_setbuf(decode, buf, len, 0); ber_integer(decode, &ret_val); YAZ_CHECK_EQ(ret_val, -1); val = 127; odr_reset(encode); r = ber_integer(encode, &val); YAZ_CHECK_EQ(r, 1); buf = odr_getbuf(encode, &len, 0); YAZ_CHECK(buf); YAZ_CHECK_EQ(len, 2); YAZ_CHECK_EQ(buf[0], 1); YAZ_CHECK_EQ(buf[1], 127); odr_reset(decode); odr_setbuf(decode, buf, len, 0); ber_integer(decode, &ret_val); YAZ_CHECK_EQ(ret_val, 127); val = 128; odr_reset(encode); r = ber_integer(encode, &val); YAZ_CHECK_EQ(r, 1); buf = odr_getbuf(encode, &len, 0); YAZ_CHECK(buf); YAZ_CHECK_EQ(len, 3); YAZ_CHECK_EQ(buf[0], 2); YAZ_CHECK_EQ(buf[1], 0); YAZ_CHECK_EQ(((unsigned char *) buf)[2], 128); odr_reset(decode); odr_setbuf(decode, buf, len, 0); ber_integer(decode, &ret_val); YAZ_CHECK_EQ(ret_val, 128); val = 2147483647; /* 2^31-1 */ odr_reset(encode); r = ber_integer(encode, &val); YAZ_CHECK_EQ(r, 1); buf = odr_getbuf(encode, &len, 0); YAZ_CHECK(buf); YAZ_CHECK_EQ(len, 5); YAZ_CHECK_EQ(buf[0], 4); YAZ_CHECK_EQ(buf[1], 127); YAZ_CHECK_EQ((unsigned char) buf[2], 255); YAZ_CHECK_EQ((unsigned char) buf[3], 255); YAZ_CHECK_EQ((unsigned char) buf[4], 255); odr_reset(decode); odr_setbuf(decode, buf, len, 0); ber_integer(decode, &ret_val); YAZ_CHECK_EQ(ret_val, 2147483647); val = -2147483647L -1; /* -2^31 */ odr_reset(encode); r = ber_integer(encode, &val); YAZ_CHECK_EQ(r, 1); buf = odr_getbuf(encode, &len, 0); YAZ_CHECK(buf); YAZ_CHECK_EQ(len, 5); YAZ_CHECK_EQ(buf[0], 4); YAZ_CHECK_EQ((unsigned char) buf[1], 128); YAZ_CHECK_EQ(buf[2], 0); YAZ_CHECK_EQ(buf[3], 0); YAZ_CHECK_EQ(buf[4], 0); odr_reset(decode); odr_setbuf(decode, buf, len, 0); ber_integer(decode, &ret_val); YAZ_CHECK_EQ(ret_val, (Odr_int) -2147483647L -1); } static void tst_berint64(ODR encode, ODR decode) { #if NMEM_64 char *buf = 0; int len = 0; Odr_int val; Odr_int ret_val; int r; val = (Odr_int) 2 * 2147483648UL; /* 2^32 */ odr_reset(encode); r = ber_integer(encode, &val); YAZ_CHECK_EQ(r, 1); buf = odr_getbuf(encode, &len, 0); YAZ_CHECK(buf); YAZ_CHECK_EQ(len, 6); YAZ_CHECK_EQ(buf[0], 5); YAZ_CHECK_EQ(buf[1], 1); YAZ_CHECK_EQ(buf[2], 0); YAZ_CHECK_EQ(buf[3], 0); YAZ_CHECK_EQ(buf[4], 0); YAZ_CHECK_EQ(buf[5], 0); odr_reset(decode); odr_setbuf(decode, buf, len, 0); ber_integer(decode, &ret_val); YAZ_CHECK_EQ(ret_val, val); val = (Odr_int) -2 * 2147483648UL; /* -2^32 */ odr_reset(encode); r = ber_integer(encode, &val); YAZ_CHECK_EQ(r, 1); buf = odr_getbuf(encode, &len, 0); YAZ_CHECK(buf); YAZ_CHECK_EQ(len, 6); YAZ_CHECK_EQ(buf[0], 5); YAZ_CHECK_EQ((unsigned char) buf[1], 255); YAZ_CHECK_EQ(buf[2], 0); YAZ_CHECK_EQ(buf[3], 0); YAZ_CHECK_EQ(buf[4], 0); YAZ_CHECK_EQ(buf[5], 0); odr_reset(decode); odr_setbuf(decode, buf, len, 0); ber_integer(decode, &ret_val); YAZ_CHECK_EQ(ret_val, val); val = (Odr_int) 1000 * 1000000000L; /* 10^12 */ odr_reset(encode); r = ber_integer(encode, &val); YAZ_CHECK_EQ(r, 1); buf = odr_getbuf(encode, &len, 0); YAZ_CHECK(buf); YAZ_CHECK_EQ(len, 7); YAZ_CHECK_EQ(buf[0], 6); YAZ_CHECK_EQ(buf[1], 0); YAZ_CHECK_EQ((unsigned char) buf[2], 232); YAZ_CHECK_EQ((unsigned char) buf[3], 212); YAZ_CHECK_EQ((unsigned char) buf[4], 165); YAZ_CHECK_EQ(buf[5], 16); YAZ_CHECK_EQ(buf[6], 0); odr_reset(decode); odr_setbuf(decode, buf, len, 0); ber_integer(decode, &ret_val); YAZ_CHECK_EQ(ret_val, val); #endif } static void tst(void) { ODR odr_encode = odr_createmem(ODR_ENCODE); ODR odr_decode = odr_createmem(ODR_DECODE); YAZ_CHECK(odr_encode); YAZ_CHECK(odr_decode); tst_MySequence1(odr_encode, odr_decode); tst_MySequence2(odr_encode, odr_decode); tst_MySequence3(odr_encode, odr_decode); tst_berint32(odr_encode, odr_decode); tst_berint64(odr_encode, odr_decode); odr_destroy(odr_encode); odr_destroy(odr_decode); } /* example from documentation.. 'Using Odr' */ void do_nothing_useful(Odr_int value) { ODR encode, decode; Odr_int *valp, *resvalp; char *bufferp; int len; /* allocate streams */ if (!(encode = odr_createmem(ODR_ENCODE))) return; if (!(decode = odr_createmem(ODR_DECODE))) return; valp = &value; if (odr_integer(encode, &valp, 0, 0) == 0) { printf("encoding went bad\n"); return; } bufferp = odr_getbuf(encode, &len, 0); printf("length of encoded data is %d\n", len); /* now let's decode the thing again */ odr_setbuf(decode, bufferp, len, 0); if (odr_integer(decode, &resvalp, 0, 0) == 0) { printf("decoding went bad\n"); return; } /* ODR_INT_PRINTF format for printf (such as %d) */ printf("the value is " ODR_INT_PRINTF "\n", *resvalp); /* clean up */ odr_destroy(encode); odr_destroy(decode); } int main(int argc, char **argv) { YAZ_CHECK_INIT(argc, argv); tst(); YAZ_CHECK_TERM; } /* * Local variables: * c-basic-offset: 4 * c-file-style: "Stroustrup" * indent-tabs-mode: nil * End: * vim: shiftwidth=4 tabstop=8 expandtab */ yaz-4.2.30/test/test_matchstr.c0000644000175000017500000000226711733047144013346 00000000000000/* This file is part of the YAZ toolkit. * Copyright (C) 1995-2012 Index Data * See the file LICENSE for details. */ #if HAVE_CONFIG_H #include #endif #include #include #include #include int main (int argc, char **argv) { YAZ_CHECK_INIT(argc, argv); YAZ_CHECK(yaz_matchstr("x", "x") == 0); YAZ_CHECK(yaz_matchstr("x", "X") == 0); YAZ_CHECK(yaz_matchstr("a", "b") > 0); YAZ_CHECK(yaz_matchstr("b", "a") > 0); YAZ_CHECK(yaz_matchstr("aa","a") > 0); YAZ_CHECK(yaz_matchstr("a-", "a") > 0); YAZ_CHECK(yaz_matchstr("A-b", "ab") == 0); YAZ_CHECK(yaz_matchstr("A--b", "ab") > 0); YAZ_CHECK(yaz_matchstr("A--b", "a-b") > 0); YAZ_CHECK(yaz_matchstr("A--b", "a--b") == 0); YAZ_CHECK(yaz_matchstr("a123", "a?") == 0); YAZ_CHECK(yaz_matchstr("a123", "a1.3") == 0); YAZ_CHECK(yaz_matchstr("a123", "..?") == 0); YAZ_CHECK(yaz_matchstr("a123", "a1.") > 0); YAZ_CHECK(yaz_matchstr("a123", "a...") == 0); YAZ_CHECK_TERM; } /* * Local variables: * c-basic-offset: 4 * c-file-style: "Stroustrup" * indent-tabs-mode: nil * End: * vim: shiftwidth=4 tabstop=8 expandtab */ yaz-4.2.30/test/xml2tmarc4.xml0000644000175000017500000000102711741237740013030 00000000000000 009140091a22a 22003370 yaz-4.2.30/test/tmarc6.xml.marc0000644000175000017500000000055611741237740013156 0000000000000000366nam a22001698a 4500001001300000003000400013005001700017008004100034010001700075040001300092050001200105100001700117245003000134260001200164263000900176300001100185 11224466 DLC00000000000000.0910710c19910701nju 00010 eng  a 11224466  aDLCcDLC00a123-xyz10aJack Collins10aHow to program a computer1 aPenguin a8710 ap. cm.yaz-4.2.30/test/marccol1.u8.1.lst0000644000175000017500000004714111654451754013245 0000000000000001087cam a2200277 a 4500 001 70813420 /AJ/r86 003 DLC 005 19871006084439.0 008 860826m19689999ja ab l00000 jpn 010 $a 70813420 /AJ/r86 035 $a (CStRLIN)DCLP86-B14482 040 $c NNC $d NNC $d DLC 043 $a a-ja--- 050 0 $a DS897.H325 $b H36 1968 066 $c $1 245 00 $6 880-01 $a Handa shishi. 260 0 $6 880-02 $a [Handa-shi] : $b Handa-shi, $c ShoÌ„wa 43-<59> [1968-<1984> 300 $a v. <1-5, 7-8> : $b ill. ; $c 22 cm. 500 $a Vol. 3 accompanied by Handa-shi chiiki chishitsuzu; v. 8, Handa-shi Otsukawa Asaiyama dashi kumiage zumen (1 folded) leaf). 505 1 $a [1]-[4] ShiryoÌ„ hen -- [5] Honbun hen -- [7] Bunkazai hen -- [8] Sairei minzoku hen 651 0 $6 880-03 $a Handa-shi (Japan) 651 0 $6 880-04 $a Handa-shi (Japan) $x History $x Sources. 880 00 $6 245-01/$1 $a åŠç”° 市誌. 880 0 $6 260-02/$1 $a [åŠç”°å¸‚] : $b åŠç”°å¸‚, $c 昭和 43-<59> [1968-<1984> 880 4 $6 651-03/$1 $a åŠç”°å¸‚ (Japan) 880 4 $6 651-04/$1 $a åŠç”°å¸‚ (Japan) $x History $x Sources. 00847nam a2200229 a 4500 001 75840215 /ACN/r86 003 DLC 005 19870219000000.0 008 860606m19009999ch 00001 chi 010 $a 75840215 /ACN/r86 035 $a (CStRLIN)DCLP86-B9742 050 0 $a PL3031.T32 $b L5 066 $c $1 245 00 $6 880-01 $a Li tsÊ»ung. 260 0 $6 880-02 $a [Kao-hsiung shih] : $b Wen hua yüan : $b Fa hsing so Sheng su chÊ»u pan she, $c 300 $a v. <4, pts 1-2; v. 5> in <3 > ; $c 22 cm. 500 $a Cover title. 650 0 $a Didactic fiction, Chinese $z Taiwan. 710 20 $6 880-03 $a Kao-hsiung shih wen hua yüan. 880 00 $6 245-01/$1 $a æ­·å¢. 880 0 $6 260-02/$1 $a [高雄市] : $b 文化院 : $b ç™¼è¡Œæ‰€ã€€è–æ›¸ã€€å‡ºç‰ˆç¤¾, $c <民國63-66 [1974-1977 > 880 20 $6 710-03/$1 $a 高雄市 文化院. 01020nam a2200277 a 4500 001 84226659 /ACN 003 DLC 005 19870219000000.0 008 860227s1983 cc ac b 00000dchi 010 $a 84226659 /ACN 035 $a (CStRLIN)DCLP86-B3400 050 0 $a NX90 $b .I18 1983 066 $c $1 082 0 $a 174/.97 $2 19 245 00 $6 880-01 $a I shu chia yü te yü. 250 $6 880-02 $a Ti 1 pan. 260 0 $6 880-03 $a ChÊ»eng-tu : $b Ssu-chÊ»uan jen min chÊ»u pan she : $b Ssu-chÊ»uan sheng hsin hua shu tien fa hsing, $c 1983. 300 $a 2, 3, 4, 244 p. : $b ill., ports. ; $c 19 cm. 440 0 $6 880-04 $a Te yü tsÊ»ung shu 504 $a Bibliography: p. 239-240. 650 0 $a Artists $x Anecdotes, facetiae, satire, etc. 650 0 $a Ethics $x Anecdotes, facetiae, satire, etc. 880 00 $6 245-01/$1 $a 艺术家 与 德育. 880 $6 250-02/$1 $a 第1版. 880 0 $6 260-03/$1 $a æˆéƒ½ : $b å››å·ã€€äººæ°‘ 出版社 : $b å››å·çœã€€æ–°åŽã€€ä¹¦åº— å‘行, $c 1983. 880 0 $6 440-04/$1 $a 德育 丛书 01336cam a2200349 a 4500 001 84231405 003 DLC 005 20001214140017.0 008 841203m19849999cc b 000 0 chi 010 $a 84231405 020 $c RMBY0.38 (v. 1) 035 $a (CStRLIN)DCLP84-B5184 040 $a DLC-R $c DLC-R $d DLC-R $d CStRLIN $d DLC 043 $a a-cc--- 050 00 $a JQ1519.A5 $b C47529 1984 066 $c $1 082 00 $a 324.251/075 $2 19 245 00 $6 880-01 $a Zheng dang xue xi cai liao / $c ben she bian. 250 $6 880-02 $a Di 1 ban. 260 $6 880-03 $a Shenyang : $b Liaoning ren min chu ban she : $b Liaoning sheng xin hua shu dian fa xing, $c 1984- 300 $a v. <1, 3-5, > ; $c 19 cm. 500 $a Colophon title also in pinyin: Zhengdang xuexi cailiao. 504 $a Includes bibliographical references. 610 20 $6 880-04 $a Zhongguo gong chan dang $x Party work. 710 2 $6 880-05 $a Liaoning ren min chu ban she. 740 0 $a Zhengdang xuexi cailiao. 880 00 $6 245-01/$1 $a æ•´å…šã€€å­¦ä¹ ã€€ææ–™ / $c 本社 编. 880 $6 250-02/$1 $a 第1版. 880 $6 260-03/$1 $a 沈阳 : $b è¾½å®ã€€äººæ°±ã€€å‡ºç‰ˆç¤¾ : $b è¾½å®çœã€€æ–°åŽã€€ä¹¦åº— å±è¡Œ, $c 1984- 880 24 $6 610-04/$1 $a 中国 共产党 $x Party work. 880 2 $6 710-05/$1 $a è¾½å®ã€€äººæ°±ã€€å‡ºç‰ˆç¤¾. 987 $a PINYIN $b CStRLIN $c 20001212 $d c $e 1.0 00916nam a2200241 a 4500 001 85174785 /ACN 003 DLC 005 19870219000000.0 008 860312s1983 cc a 00000 chi 010 $a 85174785 /ACN 035 $a (CStRLIN)DCLP86-B4377 043 $a a-cc-hp 050 0 $a GR336.H67 $b H6 1983 066 $c $1 082 0 $a 398.2/32/5115 $2 19 245 00 $6 880-01 $a Ho-pei min chien ku shih hsüan / $c [chÊ»a tÊ»u Chang Wen-hsüeh]. 250 $6 880-02 $a Hsin 1 pan. 260 0 $6 880-03 $a Shih-chia-chuang : $b Hua shan wen i chÊ»u pan she : $b Ho-pei sheng hsin hua shu tien fa hsing, $c 1983. 300 $a 2, 255 p. : $b ill. ; $c 19 cm. 650 0 $a Tales $z China $z Hopeh Province. 880 00 $6 245-01/$1 $a 河北 氱间 故事 选 / $c [æ’图 张 文学]. 880 $6 250-02/$1 $a æ–°1版. 880 0 $6 260-03/$1 $a 石家庄 : $b 花山 文艺 出版社 : $b 河北çœã€€æ–°è¯ã€€æ›¸åº— å±è¡Œ, $c 1983. 01171nam a2200325 a 4500 001 86116930 /ACN 003 DLC 005 19870219000000.0 008 860430s1984 cc b 00010 chi 010 $a 86116930 /ACN 020 $c RMBY1.00 035 $a (CStRLIN)DCLP86-B7190 050 0 $a PN45 $b .C436 1984 066 $c $1 082 0 $a 809 $2 19 100 10 $6 880-01 $a Chang, Hsin-chien. 245 10 $6 880-02 $a Wen hsüeh chi chÊ»u chih shih / $c Chang Hsin-chien. 250 $6 880-03 $a Ti 1 pan. 260 0 $6 880-04 $a Ho-fei shih : $b An-hui wen i chÊ»u pan she : $b An-hui sheng hsin hua shu tien fa hsing, $c 1984. 300 $a 196 p. ; $c 19 cm. 440 0 $6 880-05 $a ChÊ»ing nien wen hsüeh tsÊ»ung shu 500 $a Cover title also in pinyin: Wenxuejichuzhishi. 504 $a Includes bibliographies. 650 0 $a Literature. 740 01 $a Wenxuejichuzhishi. 880 10 $6 100-01/$1 $a 章 新建. 880 10 $6 245-02/$1 $a 文学 基础 知识 / $c 章 新建. 880 $6 250-03/$1 $a 第1版. 880 0 $6 260-04/$1 $a åˆè‚¥å¸‚ : $b 安徽 文艺 出版社 : $b 安徽çœã€€æ–°è¯ã€€æ›¸åº— å‘行, $c 1984. 880 0 $6 440-05/$1 $a é’年 文学 丛书 01437nam a2200301 a 4500 001 86117080 /ACN 003 DLC 005 19870219000000.0 008 860502s1985 cc ab b 00000 chi 010 $a 86117080 /ACN 020 $c RMBY2.30 035 $a (CStRLIN)DCLP86-B7475 043 $a a-cc--- 050 0 $a QE537.2.C6 $b S5 1985 066 $c $1 082 0 $a 551.2/2/09514 $2 19 245 00 $6 880-01 $a Shan Kan Ning ChÊ»ing ssu sheng (chÊ»ü) chÊ»iang ti chen mu lu : $b kung yüan [chÊ»ien] 1177 nien-kung yüan 1982 nien / $c Kuo chia ti chen chü Lan-chou ti chen yen chiu so. 250 $6 880-02 $a Ti 1 pan. 260 0 $6 880-03 $a Hsi-an : $b Shan-hsi kÊ»o hsüeh chi shu chÊ»u pan she : $b Shan-hsi sheng hsin hua shu tien fa hsing, $c 1985. 300 $a 2, 170 p. : $b ill., maps ; $c 26 cm. 504 $a Bibliography: p. 170. 650 0 $a Earthquakes $z China, Northwest $x Chronology. 710 20 $6 880-04 $a Kuo chia ti chen chü Lan-chou ti chen yen chiu so. 740 01 $a Shan Kan Ning ChÊ»ing 4 sheng (chÊ»ü) chÊ»iang ti chen mu lu. 880 00 $6 245-01/$1 $a 陕甘å®é’ 四çœ(区) 强 地震 目录 : $b 公元[å‰] 1177å¹´ï¼å…¬å…ƒ 1982å¹´ / $c 国家 地震局 兰州 地震 研究所. 880 $6 250-02/$1 $a 第1版. 880 0 $6 260-03/$1 $a 西安 : $b 陕西 秱学 技术 出版社 : $b 陕西çœã€€æ–°è¯ã€€æ›¸åº— å±è¡Œ, $c 1985. 880 20 $6 710-04/$1 $a 国家 地震局 兰州 地震 研究所. 01289cam a2200337 a 4500 001 86118651 /ACN/r88 003 DLC 005 19880830123434.0 008 860218s1985 ch d 00110 chi 010 $a 86118651 /ACN/r88 020 $c NT$260.00 035 $a (CStRLIN)DCLP86-B2669 041 0 $a chieng 050 0 $a SD126 $b .C473 1985 066 $c $1 082 0 $a 634.9/03/21 $2 19 100 10 $6 880-01 $a ChÊ»en, Ming-tsÊ»un. 245 10 $6 880-02 $a Sen lin hsüeh ming tzÊ»u tzÊ»u tien = $b English Chinese dictionary of forestry / $c ChÊ»en Ming-tsÊ»un, Huang Chin-hsien ho pien. 250 $6 880-03 $a ChÊ»u pan. 260 0 $6 880-04 $a TÊ»ai-pei shih : $b Ming shan chÊ»u pan she, $c min kuo 74 [1985] 300 $a 274 p. ; $c 20 cm. 500 $a Includes index. 650 0 $a Forests and forestry $x Dictionaries. 650 0 $a English language $x Dictionaries $x Chinese. 700 10 $6 880-05 $a Huang, Chin-hsien. 740 01 $a English Chinese dictionary of forestry. 880 10 $6 100-01/$1 $a 陳 銘æ±. 880 10 $6 245-02/$1 $a 森林學 å詞 辭典 = $b English Chinese dictionary of forestry / $c 陳 銘æ±, 黃 釱仙 åˆç·¨. 880 $6 250-03/$1 $a åˆç‰ˆ. 880 0 $6 260-04/$1 $a å°åŒ—市 : $b å山 出版社, $c 氱國74 [1985] 880 10 $6 700-05/$1 $a 黃 釱仙. 00995nam a2200289 a 4500 001 86118679 /ACN 003 DLC 005 19870219000000.0 008 860218s1985 ch 00011 chi 010 $a 86118679 /ACN 035 $a (CStRLIN)DCLP86-B2674 050 0 $a PL2865.H3 $b H84 1985 066 $c $1 082 0 $a 895.1/35 $2 19 100 10 $6 880-01 $a Huang, Hai, $d 1943- 245 10 $6 880-02 $a Hsing hsing ti hsiang lien / $c Huang Hai chu. 250 $6 880-03 $a ChÊ»u pan. 260 0 $6 880-04 $a TÊ»ai-pei shih : $b Huang kuan chÊ»u pan she, $c min kuo 74 [1985] 300 $a 297 p. ; $c 19 cm. 440 0 $6 880-05 $a Huang kuan tsÊ»ung shu ; $v ti 1143 chung 500 $a Short stories. 650 0 $a Science fiction, Chinese. 880 10 $6 100-01/$1 $a 黃 海, $d 1943- 880 10 $6 245-02/$1 $a 星星 的 項練 / $c 黃 海 著. 880 $6 250-03/$1 $a åˆç‰ˆ. 880 0 $6 260-04/$1 $a å°åŒ—市 : $b 皇冠 出版社, $c 民國74 [1985] 880 0 $6 440-05/$1 $a çš‡å† ã€€å¢æ›¸ ; $v 第1143種 01365cam a2200361 a 4500 001 86119726 003 DLC 005 20010412140706.0 008 860403s1985 cc af b 00000 chi 010 $a 86119726 020 $c RMBY3.90 035 $a (CStRLIN)DCLP86-B5782 040 $a DLC-R $c DLC-R $d DLC-R $d CStRLIN $d DLC-R 043 $a a-cc--- 050 00 $a DS751 $b .C4945 1985 066 $c $1 082 00 $a 951/.024 $2 19 245 00 $6 880-01 $a Jian ming Song shi / $c Zhou Baozhu, Chen Zhen zhu bian ; Zhou Baozhu ... [et al.] bian xie. 250 $6 880-02 $a Di 1 ban. 260 $6 880-03 $a Beijing : $b Ren min chu ban she : $b Xin hua shu dian fa xing, $c 1985. 300 $a 4, 5, 603 p., [12] p. of plates : $b ill. ; $c 21 cm. 500 $a Colophon title also in pinyin : Jianming Songshi. 504 $a Includes bibliographical references. 651 0 $a China $x History $y Song dynasty, 960-1279. 700 1 $6 880-04 $a Zhou, Baozhu. 700 1 $6 880-05 $a Chen, Zhen. 740 0 $a Jianming Songshi. 880 00 $6 245-01/$1 $a ç°¡æ˜Žã€€å®‹ã€€å² / $c 周 å®ç , 陈 振 主编 ; 周 å®ç  ... [et al.] 编写. 880 $6 250-02/$1 $a 第1版. 880 $6 260-03/$1 $a 北京 : $b 人民 出版社 : $b æ–°è¯ã€€æ›¸åº— å‘行, $c 1985. 880 1 $6 700-04/$1 $a 周 å®ç . 880 1 $6 700-05/$1 $a 陈 振. 987 $a PINYIN $b CStRLIN $c 20001214 $d c $e 1.0 01069nam a2200289 a 4500 001 86122256 /ACN 003 DLC 005 19870219000000.0 008 860303s1984 cc b 00010 chi 010 $a 86122256 /ACN 020 $c RMBY2.80 035 $a (CStRLIN)DCLP86-B3622 043 $a a-cc--- 050 0 $a PL2333 $b .L63 1984 066 $c $1 082 0 $a 895.1/15/09 $2 19 100 10 $6 880-01 $a Lo, Han-chÊ»ao. 245 10 $6 880-02 $a Chung-kuo hsien tai shih ko lun / $c [Lo Han-chÊ»ao]. 250 $6 880-03 $a Ti 1 pan. 260 0 $6 880-04 $a [Nan-ching shih] : $b Chiang-su jen min chÊ»u pan she : $b Chiang-su sheng hsin hua shu tien fa hsing, $c 1984. 300 $a 11, 411 p. ; $c 20 cm. 504 $a Includes bibliographical references. 650 0 $a Chinese poetry $y 20th century $x History and criticism. 880 10 $6 100-01/$1 $a 骆 寒超. 880 10 $6 245-02/$1 $a 中国 现代 诗歌 论 / $c [骆 寒超]. 880 $6 250-03/$1 $a 第1版. 880 0 $6 260-04/$1 $a [å—京市] : $b 江è‹ã€€äººæ°±ã€€å‡ºç‰ˆç¤¾ : $b 江è‹çœã€€æ–°è¯ã€€æ›¸åº— å±è¡Œ, $c 1984. 01194nam a2200325 a 4500 001 86124008 /ACN 003 DLC 005 19870219000000.0 008 860417s1985 cc j 00010 chi 010 $a 86124008 /ACN 020 $c RMBY0.61 035 $a (CStRLIN)DCLP86-B6501 043 $a a-cc--- 050 0 $a DS731.U4 $b H75 1985 066 $c $1 082 0 $a 951/.6 $2 19 100 10 $6 880-01 $a Hsin, She. 245 10 $6 880-02 $a Tsai Wei-wu-erh chih hsiang / $c Hsin She. 250 $6 880-03 $a Ti 1 pan. 260 0 $6 880-04 $a Wu-lu-mu-chÊ»i shih : $b Hsin-chiang jen min chÊ»u pan she : $b Hsin-chiang hsin hua shu tien fa hsing, $c 1985. 300 $a 2, 178 p. ; $c 19 cm. 440 0 $6 880-05 $a Tsu kuo ta chia tÊ»ing tsÊ»ung shu 650 0 $a Uigurs $x Juvenile literature. 650 0 $a Ethnology $z China $x Juvenile literatture. 651 0 $a China $x Ethnic relations $x Juvenile literature. 880 10 $6 100-01/$1 $a 辛 涉. 880 10 $6 245-02/$1 $a 在 维å¾å°” 之 乡 / $c 辛 涉. 880 $6 250-03/$1 $a 第1版. 880 0 $6 260-04/$1 $a ä¹Œé²æœ¨é½å¸‚ : $b 新疆 人民 出版社 : $b 新疆 新è¯ã€€æ›¸åº— å‘行, $c 1985. 880 0 $6 440-05/$1 $a 祖国 大家庭 丛书 01192cam a2200313 a 4500 001 86124229 003 DLC 005 20001214140017.0 008 860703s1985 cc 000 1 chi 010 $a 86124229 020 $c RMBY1.05 035 $a (CStRLIN)DCLP86-B11515 040 $a DLC-R $c DLC-R $d CStRLIN $d DLC 050 00 $a PL2724.H37 $b H7 1985 066 $c $1 082 00 $a 895.1/34 $2 19 100 1 $6 880-01 $a Shen, Qifeng, $d b. 1741. 245 10 $6 880-02 $a Xie duo / $c Shen Qifeng zhu ; Qiao Yuzhou jiao dian. 250 $6 880-03 $a Beijing di 1 ban. 260 $6 880-04 $a Beijing : $b Ren min wen xue chu ban she : $b Xin hua shu dian Beijing fa xing suo fa xing, $c 1985. 300 $a 7, 198 p. ; $c 19 cm. 440 0 $6 880-05 $a Zhongguo xiao shuo shi liao cong shu 500 $a Short stories. 880 1 $6 100-01/$1 $a 沈 起凤, $d b. 1741. 880 10 $6 245-02/$1 $a è°é“Ž / $c 沈 起凤 著 ; 乔 雨舟 校点. 880 $6 250-03/$1 $a 北京 第1版. 880 $6 260-04/$1 $a 北京 : $b 人民 文学 出版社 : $b æ–°åŽã€€ä¹¦åº— 北京 å‘行所 å‘行, $c 1985. 880 0 $6 440-05/$1 $a 中国 å°è¯´ã€€å²æ–™ã€€ä¸›ä¹¦ 987 $a PINYIN $b CStRLIN $c 20001214 $d c $e 1.0 01470cam a2200349 a 4500 001 86124531 /ACN/r93 003 DLC 005 19930723073715.0 008 860319s1985 cc 00000 chi 010 $a 86124531 /ACN/r93 020 $c RMBY1.80 035 $a (CStRLIN)DCLP86-B4826 043 $a a-cc--- 050 0 $a HX418.5 $b .C482 1985 066 $c $1 082 0 $a 322/.2/0951 $2 19 245 00 $6 880-01 $a ChÊ»ing kung cheng chih lun hsün chiao tsÊ»ai / $c Chung kung Shang-hai shih wei hsüan chÊ»uan pu tsu chih pien hsieh. 250 $6 880-02 $a Ti 1 pan. 260 $6 880-03 $a Shang-hai : $b Shang-hai jen min chÊ»u pan she : $b Hsin hua shu tien Shang-hai fa hsing so fa hsing, $c 1985. 300 $a 8, 479 p. ; $c 19 cm. 500 $a Cover title also in pinyin: Qinggong zhengzhi lunxun jiaocai. 650 0 $a Communism $z China. 650 0 $a Working class $z China. 651 0 $a China $x History $y 19th century. 651 0 $a China $x History $y 20th century. 651 0 $a China $x Description and travel. 710 20 $6 880-04 $a Chung kung Shang-hai shih wei. $b Hsüan chÊ»uan pu. 740 01 $a Qinggong zhengzhi lunxun jiaocai. 880 00 $6 245-01/$1 $a é’工 政治 轮训 教æ / $c 中共 上海 市委 宣传部 组织 编写. 880 $6 250-02/$1 $a 第1版. 880 $6 260-03/$1 $a 上海 : $b 上海 人氱 出版社 : $b æ–°è¯ã€€æ›¸åº— 上海 å±è¡Œæ‰€ã€€å±è¡Œ, $c 1985. 880 20 $6 710-04/$1 $a 中共 上海 市委. $b 宣传部. 01072nam a2200301 a 4500 001 86125160 /ACN 003 DLC 005 19870219000000.0 008 860327s1985 cc cfh 00010 chi 010 $a 86125160 /ACN 020 $c RMBY1.05 035 $a (CStRLIN)DCLP86-B5292 050 0 $a PL2862.I276 $b W8 1985 066 $c $1 082 0 $a 895.1/15 $2 19 100 10 $6 880-01 $a Hsiao, ChÊ»ing. 245 10 $6 880-02 $a Wu shu hua / $c Hsiao ChÊ»ing. 250 $6 880-03 $a Ti 1 pan. 260 0 $6 880-04 $a Pei-ching : $b Pei-ching shih yüeh wen i chÊ»u pan she : $b Hsin hua shu tien Pei-ching fa hsing so fa hsing, $c 1985. 300 $a 4, 3, 199 p., [2] p. of plates : $b facsim., port. ; $c 19 cm. 440 0 $6 880-05 $a Hung yeh shih tsÊ»ung 500 $a Poems. 740 01 $a 5 shu hua. 880 10 $6 100-01/$1 $a 晓 晴. 880 10 $6 245-02/$1 $a 五æŸã€€èб/ $c 晓 晴. 880 $6 250-03/$1 $a 第1版. 880 0 $6 260-04/$1 $a 北京 : $b åŒ—äº¬ã€€åæœˆã€€æ–‡è‰ºã€€å‡ºç‰ˆç¤¾ : $b æ–°åŽã€€ä¹¦åº— 北京 å±è¡Œæ‰€ã€€å±è¡Œ, $c 1985. 880 0 $6 440-05/$1 $a 红å¶ã€€è¯—丛 01248nam a2200301 a 4500 001 86125348 /ACN 003 DLC 005 19870219000000.0 008 860304r19851917ch 00010 chi 010 $a 86125348 /ACN 035 $a (CStRLIN)DCLP86-B3824 043 $a a-cc--- 050 0 $a DS754.18 $b .C446 1985 066 $c $1 082 0 $a 327.51 $2 19 100 10 $6 880-01 $a Chuang, Ping-hai. 245 10 $6 880-02 $a Wai chiao ssu tÊ»ung lu / $c Chuang Ping-hai pien [tsuan]. 260 0 $6 880-03 $a [TÊ»ai-pei hsien Yung-ho shih] : $b Wen hai chÊ»u pan she, $c min kuo 74 [1985] 300 $a 2, 2, 2, 272 p. ; $c 22 cm. 490 1 $6 880-04 $a Chin tai Chung-kuo shih liao tsÊ»ung kÊ»an 3 pien : ti 2 chi ; $v 20 500 $a Reprint. Originally published: 1917? 651 0 $a China $x Foreign relations $y 1644-1912. 830 0 $6 880-05 $a Chin tai Chung-kuo shih liao tsÊ»ung kÊ»an 3 pien ; $v 20. 880 10 $6 100-01/$1 $a 莊 病骸. 880 10 $6 245-02/$1 $a 外交 æ€ç—›ã€€éŒ„ / $c 莊 病骸 編[纂]. 880 0 $6 260-03/$1 $a [臺北縣 永和市] : $b 文海 出版社, $c 民國74 [1985] 880 1 $6 490-04/$1 $a è¿‘ä»£ã€€ä¸­åœ‹ã€€å²æ–™ã€€å¢åˆŠã€€ä¸‰ç·¨ : 第二輯 ; $v 20 880 0 $6 830-05/$1 $a è¿‘ä»£ã€€ä¸­åœ‹ã€€å²æ–™ã€€å¢åˆŠã€€ä¸‰ç·¨ ; $v 20. 01116cam a2200325 a 4500 001 86125443 003 DLC 005 20020326070412.0 008 860304s1985 ch a 00010 chi 010 $a 86125443 020 $c $9.00 (U.S.) 035 $a (CStRLIN)DCLP86-B3795 040 $a DLC-R $c DLC-R $d CStRLIN $d DLC-R 043 $a a-cc--- 050 00 $a B5231 $b .L59 1985 066 $c $1 082 00 $a 181/.11 $2 19 100 1 $6 880-01 $a Liu, Shaoji. 245 10 $6 880-02 $a Zhongguo zhe xue xin lun = $b A new view of the Chinese philosophy / $c Liu Shaoji zhu. 250 $6 880-03 $a Chu ban. 260 $6 880-04 $a Taibei Shi : $b Shi jie shu ju, $c min guo 74 [1985] 300 $a 6, 12, 424 p. : $b ill. ; $c 27 cm. 546 $a In Chinese. 650 0 $a Philosophy, Chinese. 740 0 $a New view of the Chinese philosophy. 880 1 $6 100-01/$1 $a 劉 紹基. 880 10 $6 245-02/$1 $a 中國 哲學 新論 = $b A new view of the Chinese philosophy / $c 劉 紹基 豗. 880 $6 250-03/$1 $a åˆç‰ˆ. 880 $6 260-04/$1 $a å°åŒ—市 : $b 世界 書局, $c 氱國74 [1985] 987 $a PINYIN $b DLC $c 20020326 $d c 01199nam a2200301 a 4500 001 86154542 /ACN/r86 003 DLC 005 19870219000000.0 008 860528s1985 cc 00000 chi 010 $a 86154542 /ACN/r86 020 $c RMBY3.60 (v. 1) 035 $a (CStRLIN)DCLP86-B9002 043 $a a-cc--- 050 0 $a HB126.C4 $b C533 1985 066 $c $1 082 0 $a 330/.0951 $2 19 245 00 $6 880-01 $a Chung-kuo ku tai ching chi chu shu hsüan tu / $c Yü Tsu-yao ... [et al.] pien chu. 250 $6 880-02 $a Ti 1 pan. 260 0 $6 880-03 $a [ChÊ»ang-chÊ»un shih] : $b Chi-lin jen min chÊ»u pan she : $b Chi-lin sheng hsin hua shu tien fa hsing, $c 1985. 300 $a 2 v. ; $c 20 cm. 500 $a Colophon title also in pinyin: Zhongguo gudai jingji zhushu xuandu. 650 0 $a Economics $z China $x History. 700 10 $6 880-04 $a Yü, Tsu-yao. 740 01 $a Zhongguo gudai jingji zhushu xuandu. 880 00 $6 245-01/$1 $a 中國 å¤ä»£ã€€ç¶“濟 著述 é¸è®€ / $c 虞 祖尧 ... [et al.] ç¼–è‘—. 880 $6 250-02/$1 $a 第1版. 880 0 $6 260-03/$1 $a [长春市] : $b 剿ž— 人民 出版社 : $b 剿ž—çœã€€æ–°åŽã€€ä¹¦åº— å‘行, $c 1985. 880 10 $6 700-04/$1 $a 虞 祖尧. 00920nam a2200253 a 4500 001 86159478 /AK 003 DLC 005 19870219000000.0 008 860602s1984 ko 00010 kor 010 $a 86159478 /AK 020 $c W2800 035 $a (CStRLIN)DCLP86-B9357 040 $a CLASIA $c CLASIA $d DLC 050 0 $a AC148 $b .K589256 1985 066 $c $1 100 10 $6 880-01 $a Kim, Tong-gil, $d 1928- 245 10 $6 880-02 $a Tŭrŏra, ttaltŭl a : $b Kim Tong-gil taepÊ»yo esei. 260 0 $6 880-03 $a Sŏul : $b ChÊ»ŏngnyŏnsa, $c 1984 $g (1985 printing) 300 $a 271 p. ; $c 23 cm. 440 0 $6 880-04 $a Uri sidae ŭi taepÊ»yo sanmunsŏn ; $v 1 880 10 $6 100-01/$1 $a 김 ë™ê¸¸, $d 1928- 880 10 $6 245-02/$1 $a 들어ë¼, 딸들 아 : $b 김 ë™ê¸¸ã€€ëŒ€í‘œã€€ì—세ì´. 880 0 $6 260-03/$1 $a 서울 : $b 청년사, $c 1984 $g (1985 printing) 880 0 $6 440-04/$1 $a 우리 시대 ì˜ã€€ëŒ€í‘œã€€ì‚°ë¬¸ì„  ; $v 1 yaz-4.2.30/test/test_cql2xcql.sh0000755000175000017500000000202411733047144013434 00000000000000#!/bin/sh srcdir=${srcdir:-.} oIFS="$IFS" IFS=' ' secno=0 testno=0 comment=0 ecode=0 test -f ${srcdir}/cql2xcqlsample || exit 1 test -d cql || mkdir cql for f in `cat ${srcdir}/cql2xcqlsample`; do if echo $f | grep '^#' >/dev/null; then comment=1 else if test "$comment" = "1"; then secno=`expr $secno + 1` testno=0 fi comment=0 testno=`expr $testno + 1` OUT1=${srcdir}/cql/$secno.$testno.out ERR1=${srcdir}/cql/$secno.$testno.err OUT2=cql/$secno.$testno.out.tmp ERR2=cql/$secno.$testno.err.tmp DIFF=cql/$secno.$testno.diff ../util/cql2xcql "$f" >$OUT2 2>$ERR2 if test -f $OUT1 -a -f $ERR1; then if diff $OUT1 $OUT2 >$DIFF; then rm $DIFF rm $OUT2 else echo "diff out $secno $testno $f" cat $DIFF ecode=1 fi if diff $ERR1 $ERR2 >$DIFF; then rm $DIFF rm $ERR2 else echo "diff err $secno $testno $f" cat $DIFF ecode=1 fi else echo "making test $secno $testno $f" mv $OUT2 $OUT1 mv $ERR2 $ERR1 ecode=1 fi fi done IFS="$oIFS" exit $ecode yaz-4.2.30/test/tmarc7.xml0000644000175000017500000000770611741237740012242 00000000000000 03114cam a2200349 i 4500 77123332 DLC 20051218154744.0 981008b2001 ilu 000 0 eng 57779 90490 93202 DLC DLC 0 und orignew u ncip 19 y-gencatlg 77123332 Voyager Diacritic test -- New input 001 (SBIE). ny : ny, 2001. 100 p. ; 12 cm. New copy imported from file (8/12/99). VOYAGER COLUMN 0 (NEW): Degree sign (°); Phono Copyright mark (â„—); Copyright mark (©); Sharp (♯); Inverted Question mark (¿); Inverted Exclamation mark (¡). VOYAGER COLUMN 1: Script L (â„“); Polish L (Å); Scandanavian O (Ø); D with Crossbar (Ä); Icelandic Thorn (Þ); AE Digraph (Æ); OE Digraph (Å’); Miagkii Znak (ʹ); Dot at Midline (·). VOYAGER COLUMN 2: Musical Flat (â™­); Patent Mark (®); Plus or Minus (±); O Hook (Æ ); U Hook (Ư); Alif (ʼ); alpha α; Ayn (Ê»); Polish l (Å‚). VOYAGER COLUMN 3: Scandanavian o (ø); d with crossbar (Ä‘); Icelandic Thorn (þ); ae Digraph (æ); oe Digraph (Å“); Tverdii Znak (ʺ); Turkish i (ı); British Pound (£); eth (ð). VOYAGER COLUMN 4: Dagger (DO NOT USE); o Hook (Æ¡); u Hook (ư); Beta β; Gamma γ; Superscript 0 (â°); Superscript 1 (¹); Superscript 2 (²); Superscript 3 (³). VOYAGER COLUMN 5: Superscript 4 (â´); Superscript 5 (âµ); Superscript 6 (â¶); Superscript 7 (â·); Superscript 8 (â¸); Superscript 9 (â¹); Superscript + (âº); Superscript - (â»); Superscript ( (â½). VOYAGER COLUMN 6: Superscript ) (â¾); Subscript 0 (â‚€); Subscript 1 (â‚); Subscript 2 (â‚‚); Subscript 3 (₃); Subscript 4 (â‚„); Subscript 5 (â‚…); Subscript 6 (₆); Subscript 7 (₇). VOYAGER COLUMN 7: Subscript 8 (₈); Subscript 9 (₉); Subscript + (₊); Subscript - (â‚‹); Subscript ( (â‚); Subscript ) (₎); Pseudo Question Mark (ỏ); Grave (oÌ€); Acute (oÌ). VOYAGER COLUMN 8: Circumflex (oÌ‚); Tilde (õ); Macron (oÌ„); Breve (ŏ); Superior Dot (ȯ); Umlaut (ö); Hacek (oÌŒ); Circle Above (oÌŠ); Ligature left (oÍ¡). VOYAGER COLUMN 9: Ligature right (o) ; High Comma off center (oÌ•); Double Acute (oÌ‹); Candrabindu (oÌ); Cedilla (o̧); Right Hook (ǫ); Dot Below (oÌ£); Double Dot Below (o̤); Circle Below (oÌ¥). VOYAGER COLUMN 10: Double Underscore (o̳); Underscore (o̲); Left Hook (o̦); Right Cedilla (oÌœ); Upadhmaniya (oÌ®); Double Tilde 1st half (oÍ ); Double Tilde 2nd half (o) ; High Comma centered (oÌ“). VOYAGER PC Keyboard: Spacing Circumflex (^); Spacing Underscore (_); Spacing Grave (`); Open Curly Bracket ({); Close Curly Bracket (}); Spacing Tilde (~). Standard PC Keyboard: 1234567890-= !@#$%^&*()_+ qwertyuiop[]\ QWERTYUIOP{}| asdfghjkl;' ASDFGHJKL:" zxcvbnm,./ ZXCVBNM<>? yaz-4.2.30/test/test_marc.sh0000755000175000017500000000631211733047144012631 00000000000000#!/bin/sh # Tests reading of ISO2709 and checks that we get identical MARCXML # # Reads marc?.marc files , Generates marc*.xml files # If Libxml2 is present, also turbomarc*xml. # as well as reverse transformation from *marc*.xml files are parsed again.. # srcdir=${srcdir:-.} ecode=0 ../util/yaz-marcdump -i marcxml >/dev/null 2>&1 if test $? = "3"; then noxml=1 fi ../util/yaz-marcdump -o xml,marcxml >/dev/null 2>&1 if test $? = "4"; then noxmlwrite=1 fi binmarc_convert() { OUTPUT_FORMAT="$1" REVERT_FORMAT="$2" PREFIX="$3" for f in ${srcdir}/marc[0-9].marc; do fb=`basename ${f} .marc` CHR=`cat ${srcdir}/${fb}.chr` NEW=${PREFIX}${fb}.new.xml OLD=${srcdir}/${PREFIX}${fb}.xml DIFF=`basename ${f}`.diff #echo "../util/yaz-marcdump -f $CHR -t utf-8 -i marc -o ${OUTPUT_FORMAT} $f > $NEW" ../util/yaz-marcdump -f $CHR -t utf-8 -i marc -o ${OUTPUT_FORMAT} $f > $NEW if test $? != "0"; then echo "$f: yaz-marcdump returned error" ecode=1 elif test -f $OLD; then if diff $OLD $NEW >$DIFF; then rm $DIFF rm $NEW else echo "$f: $NEW and $OLD differ" ecode=1 fi else echo "$f: Making test result $OLD for the first time" if test -x /usr/bin/xmllint; then if xmllint --noout $NEW >out 2>stderr; then echo "$f: $NEW is well-formed" mv $NEW $OLD else echo "$f: $NEW not well-formed" ecode=1 fi else echo "xmllint not found. install libxml2-utils" ecode=1 fi fi if test -z "$noxml"; then ORIGINAL=${f} f=$OLD # compare with original (binary) marc record. OLD=${f}.marc NEW=`basename ${f}`.new.marc DIFF=`basename ${f}`.diff #echo "../util/yaz-marcdump -f utf-8 -t utf-8 -i ${REVERT_FORMAT} -o marc $f > $NEW" ../util/yaz-marcdump -f utf-8 -t utf-8 -i ${REVERT_FORMAT} -o marc $f > $NEW if test $? != "0"; then echo "Failed decode of $f" ecode=1 elif test -f $OLD; then if diff $OLD $NEW >$DIFF; then rm $DIFF rm $NEW else echo "$f: $NEW and $OLD Differ" ecode=1 fi else echo "$f: Making test result $OLD for the first time" mv $NEW $OLD fi # check with original REVERT=`basename ${f}`.marc.revert #../util/yaz-marcdump -f utf-8 -t $CHR -i ${REVERT_FORMAT} -o marc $f > $REVERT #hexdump -cx $REVERT > $REVERT.hex #hexdump -cx $ORIGINAL > $ORIGINAL.hex #diff $REVERT.hex $ORIGINAL.hex > $REVERT.diff fi done return $ecode } binmarc_convert "marcxml" "marcxml" "" echo "binmarc -> marcxml: $?" if test -z "$noxmlwrite"; then binmarc_convert "xml,marcxml" "marcxml" "xml2" echo "binmarc -> marcxml(libxml2): $?" fi binmarc_convert "turbomarc" "turbomarc" "t" echo "binmarc -> turbomarc: $?" if test -z "$noxmlwrite"; then binmarc_convert "xml,turbomarc" "turbomarc" "xml2t" echo "binmarc -> turbomarc(libxml2): $?" fi exit $ecode # Local Variables: # mode:shell-script # sh-indentation: 2 # sh-basic-offset: 4 # End: yaz-4.2.30/test/test_icu.3.xml0000644000175000017500000000033211733047144013007 00000000000000 yaz-4.2.30/test/xml2marc7.xml.marc0000644000175000017500000000604511741237740013575 0000000000000003109cam a2200349 i 4500001001300000003000400013005001700017008004100034035001000075035001000085035001000095040001300105906004500118010001700163245005200180260002100232300002100253500004300274500017600317500020000493500016100693500019500854500017801049500022001227500020501447500019901652500017701851500021402028500021502242500016102457500014102618 77123332 DLC20051218154744.0981008b2001 ilu 000 0 eng  a57779 a90490 a93202 aDLCcDLC a0bundcorignewduencipf19gy-gencatlg a 77123332 00aVoyager Diacritic test -- New input 001 (SBIE). any :bny,c2001. a100 p. ;c12 cm. aNew copy imported from file (8/12/99). aVOYAGER COLUMN 0 (NEW): Degree sign (°); Phono Copyright mark (â„—); Copyright mark (©); Sharp (♯); Inverted Question mark (¿); Inverted Exclamation mark (¡). aVOYAGER COLUMN 1: Script L (â„“); Polish L (Å); Scandanavian O (Ø); D with Crossbar (Ä); Icelandic Thorn (Þ); AE Digraph (Æ); OE Digraph (Å’); Miagkii Znak (ʹ); Dot at Midline (·). aVOYAGER COLUMN 2: Musical Flat (â™­); Patent Mark (®); Plus or Minus (±); O Hook (Æ ); U Hook (Ư); Alif (ʼ); alpha α; Ayn (Ê»); Polish l (Å‚). aVOYAGER COLUMN 3: Scandanavian o (ø); d with crossbar (Ä‘); Icelandic Thorn (þ); ae Digraph (æ); oe Digraph (Å“); Tverdii Znak (ʺ); Turkish i (ı); British Pound (£); eth (ð). aVOYAGER COLUMN 4: Dagger (DO NOT USE); o Hook (Æ¡); u Hook (ư); Beta β; Gamma γ; Superscript 0 (â°); Superscript 1 (¹); Superscript 2 (²); Superscript 3 (³). aVOYAGER COLUMN 5: Superscript 4 (â´); Superscript 5 (âµ); Superscript 6 (â¶); Superscript 7 (â·); Superscript 8 (â¸); Superscript 9 (â¹); Superscript + (âº); Superscript - (â»); Superscript ( (â½). aVOYAGER COLUMN 6: Superscript ) (â¾); Subscript 0 (â‚€); Subscript 1 (â‚); Subscript 2 (â‚‚); Subscript 3 (₃); Subscript 4 (â‚„); Subscript 5 (â‚…); Subscript 6 (₆); Subscript 7 (₇). aVOYAGER COLUMN 7: Subscript 8 (₈); Subscript 9 (₉); Subscript + (₊); Subscript - (â‚‹); Subscript ( (â‚); Subscript ) (₎); Pseudo Question Mark (ỏ); Grave (oÌ€); Acute (oÌ). aVOYAGER COLUMN 8: Circumflex (oÌ‚); Tilde (õ); Macron (oÌ„); Breve (ŏ); Superior Dot (ȯ); Umlaut (ö); Hacek (oÌŒ); Circle Above (oÌŠ); Ligature left (oÍ¡). aVOYAGER COLUMN 9: Ligature right (o) ; High Comma off center (oÌ•); Double Acute (oÌ‹); Candrabindu (oÌ); Cedilla (o̧); Right Hook (ǫ); Dot Below (oÌ£); Double Dot Below (o̤); Circle Below (oÌ¥). aVOYAGER COLUMN 10: Double Underscore (o̳); Underscore (o̲); Left Hook (o̦); Right Cedilla (oÌœ); Upadhmaniya (oÌ®); Double Tilde 1st half (oÍ ); Double Tilde 2nd half (o) ; High Comma centered (oÌ“). aVOYAGER PC Keyboard: Spacing Circumflex (^); Spacing Underscore (_); Spacing Grave (`); Open Curly Bracket ({); Close Curly Bracket (}); Spacing Tilde (~). aStandard PC Keyboard: 1234567890-= !@#$%^&*()_+ qwertyuiop[]\ QWERTYUIOP{}| asdfghjkl;' ASDFGHJKL:" zxcvbnm,./ ZXCVBNM<>?yaz-4.2.30/test/xml2marc9.xml0000644000175000017500000001561511741237740012661 00000000000000 02075cas a22005055a 4500 2005336282DLC20070911033614.0070910c20059999mr uu p f0 0ara 2005336282-3-7-0709110002-p----- (OCoLC)1704901647undserialsuncip19n-oclcsercDLCDLCDLCarafrelcf-mr---IN PROCESS(3880-01Qaḍāʼ al-usrah :majallah mutakhaṣṣiṣah /Wizārat al-ʻAdl.Justice de la famille880-02Majallat Qaḍāʼ al-usrah<2006>880-03al-Rabāṭ :Jamʻīyat Nashr al-Maʻlūmah al-Qānūnīyah wa-al-Qaḍāʼīyah,2005-v. :ill. ;24 cm.Irregular (semiannual)880-04al-ʻAdad 1. (Yūlyūz 2005)-880-05Manshūrāt Jamʻīyat Nashr al-Maʻlūmah al-Qānūnīyah wa-al-QaḍāʼīyahSome issues have also a distinctive title.Latest issue consulted: al-ʻAdad 3. (Dujanbir 2006).Chiefly in Arabic; some French.Domestic relations (Islamic law)Morocco.Divorce (Islamic law)Marriage lawMorocco.Law reports, digests, etc.Morocco.880-06Jamʻīyat Nashr al-Maʻlūmah al-Qānūnīyah wa-al-Qaḍāʼīyah.880-07Morocco.Wizārat al-ʻAdl.DLC245-01/(3/rقضاء الأسرة :مجلة متخصصة /وزارة العدل.246-02/(3/rمجلة قضاء الأسرة<2006>260-03/(3/rالرباط :جمعية نشر المعلومة القانونية والقضائية،2005-362-04/(3/rالعدد 1. (يوليوز 2005)-490-05/(3/rمنشورات جمعية نشر المعلومة القانونية والقضائية710-06/(3/rجمعية نشر المعلومة القانونية والقضائية.710-07/(3/rMorocco.وزارة العدل.LC Cairo Office [we 45] yaz-4.2.30/test/marc6.marc0000644000175000017500000000055611741237740012173 0000000000000000366nam 22001698a 4500001001300000003000400013005001700017008004100034010001700179040001300075050001200088100001700100245003000117260001200147263000900159300001100168 11224466 DLC00000000000000.0910710c19910701nju 00010 eng  aDLCcDLC00a123-xyz10aJack Collins10aHow to program a computer1 aPenguin a8710 ap. cm. a 11224466 yaz-4.2.30/test/marc5.chr0000644000175000017500000000000611741237740012012 00000000000000utf-8 yaz-4.2.30/test/test_icu.1.xml0000644000175000017500000000033311733047144013006 00000000000000 yaz-4.2.30/test/test_icu.2.xml0000644000175000017500000000025011733047144013005 00000000000000 $back = \` ; $back $back > “ ; # generate right d.q.m. (double quotation mark) $back > ‘ ; yaz-4.2.30/test/test_icu.0.input0000644000175000017500000000004411733047144013343 00000000000000Børn Le Carré Le Carre Le CarreÌ yaz-4.2.30/test/marc3.marc0000644000175000017500000000162211741237740012163 0000000000000000914naa 2200337 45 001001700000004000900017008002400026009001000050041000800060041000800068097000700076245003300083300002600116557003300142630001600175630001300191633001000204633000900214648006100223648001600284648005400300J01000600354BAS000500360LKR004200365CAT003000407CAT003000437CAT003000467CAT003900497CAT002600536UID001400562 aa00001508fa airn a1991bxxlnortav9 aagxx anor deng00a06 aByfornyelse ved Ibsen-Ringen bfarvefotobplanbsnit aByggekunstj1991v1/2k41-45 fbyfornyelse fsanering fNorge fOslo aTelje Torp Aasen ArkitektkontorcKristian Augustsgate 7B aEng, Dagfin Granlund, TomcKristian AugustsgatecPilestredet 19 aa 20 aITMlARK50b0000145y1991i1/2k41-45 abc20020111lARK01h2002 abc20020111lARK01h2116 abc20021002lARK01h1000 aICLLOADb00c20021122lARK01h1948 c20030618lARK01h1330 aa00001508yaz-4.2.30/test/test_soap1.c0000644000175000017500000000222411733047144012535 00000000000000/* This file is part of the YAZ toolkit. * Copyright (C) 1995-2012 Index Data * See the file LICENSE for details. */ #if HAVE_CONFIG_H #include #endif #include #if YAZ_HAVE_XML2 #include #endif #include void tst(void) { #if YAZ_HAVE_XML2 xmlChar *buf_out; int len_out; xmlDocPtr doc; xmlNodePtr top; #if 0 const char *val = "jordb" "\xe6" "r"; /* makes xmlDocDumpMemory hang .. */ #else const char *val = "jordbaer"; /* OK */ #endif doc = xmlNewDoc(BAD_CAST "1.0"); YAZ_CHECK(doc); top = xmlNewNode(0, BAD_CAST "top"); YAZ_CHECK(top); xmlNewTextChild(top, 0, BAD_CAST "sub", BAD_CAST val); xmlDocSetRootElement(doc, top); xmlDocDumpMemory(doc, &buf_out, &len_out); #if 0 printf("%*s", len_out, buf_out); #endif /* YAZ_HAVE_XML2 */ #endif } int main(int argc, char **argv) { YAZ_CHECK_INIT(argc, argv); #if YAZ_HAVE_XML2 LIBXML_TEST_VERSION; #endif tst(); YAZ_CHECK_TERM; } /* * Local variables: * c-basic-offset: 4 * c-file-style: "Stroustrup" * indent-tabs-mode: nil * End: * vim: shiftwidth=4 tabstop=8 expandtab */ yaz-4.2.30/test/test_icu.sh0000755000175000017500000000162711733047144012473 00000000000000#!/bin/sh # Tests a couple of yaz-icu conversions # # Reads tsticu-[0-9].input files # Writes tsticu-[0-9].output / output.tmp files # Config tsticu-[0-9].xml srcdir=${srcdir:-.} ecode=0 ../util/yaz-icu >/dev/null 2>&1 if test $? = "3"; then exit 0 fi for f in ${srcdir}/test_icu.[0-9].input; do fb=`basename ${f} .input` CONFIG=${srcdir}/${fb}.xml NEW=${fb}.output.tmp OLD=${srcdir}/${fb}.output DIFF=`basename ${fb}`.diff ../util/yaz-icu -c $CONFIG <$f > $NEW if test $? != "0"; then echo "$f: yaz-icu returned error" ecode=1 elif test -f $OLD; then if diff $OLD $NEW >$DIFF; then rm $DIFF rm $NEW else echo "$f: $NEW and $OLD differ" ecode=1 fi else echo "$f: Making test result $OLD for the first time" mv $NEW $OLD ecode=1 fi done exit $ecode # Local Variables: # mode:shell-script # sh-indentation: 2 # sh-basic-offset: 4 # End: yaz-4.2.30/test/marc5.xml0000644000175000017500000000247311741237740012050 00000000000000 00492nam a22001455a 4500 000277485 20051026111436.0 050413s1894 gr 000 0 gre d ΜαÏοÏδης, Κωνσταντίνος Ιω Ελληνικόν κÏυπτογÏαφικόν λεξικόν / Κωνστ. Ι. ΜαÏοÏδης. εκδ. Αθήνα, 1894. 248 σελ. Greek language, Modern Dialects Dictionaries Cryptography. yaz-4.2.30/test/test_filepath.c0000644000175000017500000000164111733047144013310 00000000000000/* This file is part of the YAZ toolkit. * Copyright (C) 1995-2012 Index Data * See the file LICENSE for details. */ #if HAVE_CONFIG_H #include #endif #include #include #include #include #include void tst(void) { char fullpath[1024]; YAZ_CHECK(yaz_filepath_resolve("test_filepath", ".", 0, fullpath)); YAZ_CHECK(strcmp(fullpath, "./test_filepath") == 0); YAZ_CHECK(!yaz_filepath_resolve("test_filepath1", ".", 0, fullpath)); YAZ_CHECK(!yaz_filepath_resolve("test_filepath", "bogus", 0, fullpath)); YAZ_CHECK(yaz_filepath_resolve("test_filepath", "bogus:.", 0, fullpath)); } int main (int argc, char **argv) { YAZ_CHECK_INIT(argc, argv); tst(); YAZ_CHECK_TERM; } /* * Local variables: * c-basic-offset: 4 * c-file-style: "Stroustrup" * indent-tabs-mode: nil * End: * vim: shiftwidth=4 tabstop=8 expandtab */ yaz-4.2.30/test/cql2pqf/0000755000175000017500000000000011741237740011741 500000000000000yaz-4.2.30/test/cql2pqf/4.9.out0000644000175000017500000000014611741237740012725 00000000000000Parsing CQL a#a? @attr 6=1 @attr 2=3 @attr 4=1 @attr 3=3 @attr 6=1 @attr 5=104 @attr 1=1016 "a\\#a#" yaz-4.2.30/test/cql2pqf/4.6.out0000644000175000017500000000014011741237740012714 00000000000000Parsing CQL a? @attr 6=1 @attr 2=3 @attr 4=1 @attr 3=3 @attr 6=1 @attr 5=104 @attr 1=1016 "a#" yaz-4.2.30/test/cql2pqf/1.2.err0000644000175000017500000000000011741237740012661 00000000000000yaz-4.2.30/test/cql2pqf/1.3.err0000644000175000017500000000000011741237740012662 00000000000000yaz-4.2.30/test/cql2pqf/3.1.err0000644000175000017500000000000011741237740012662 00000000000000yaz-4.2.30/test/cql2pqf/3.1.out0000644000175000017500000000027611741237740012720 00000000000000Parsing CQL cat or dog @or @attr 6=1 @attr 2=3 @attr 4=1 @attr 3=3 @attr 6=1 @attr 5=100 @attr 1=1016 "cat" @attr 6=1 @attr 2=3 @attr 4=1 @attr 3=3 @attr 6=1 @attr 5=100 @attr 1=1016 "dog" yaz-4.2.30/test/cql2pqf/2.2.err0000644000175000017500000000000011741237740012662 00000000000000yaz-4.2.30/test/cql2pqf/5.5.err0000644000175000017500000000000011741237740012670 00000000000000yaz-4.2.30/test/cql2pqf/5.2.out0000644000175000017500000000014311741237740012714 00000000000000Parsing CQL \*a# @attr 6=1 @attr 2=3 @attr 4=1 @attr 3=3 @attr 6=1 @attr 5=100 @attr 1=1016 "*a#" yaz-4.2.30/test/cql2pqf/4.10.err0000644000175000017500000000000011741237740012743 00000000000000yaz-4.2.30/test/cql2pqf/3.5.err0000644000175000017500000000000011741237740012666 00000000000000yaz-4.2.30/test/cql2pqf/4.5.err0000644000175000017500000000000011741237740012667 00000000000000yaz-4.2.30/test/cql2pqf/2.1.err0000644000175000017500000000000011741237740012661 00000000000000yaz-4.2.30/test/cql2pqf/5.4.err0000644000175000017500000000000011741237740012667 00000000000000yaz-4.2.30/test/cql2pqf/4.4.err0000644000175000017500000000000011741237740012666 00000000000000yaz-4.2.30/test/cql2pqf/3.7.err0000644000175000017500000000000011741237740012670 00000000000000yaz-4.2.30/test/cql2pqf/3.4.err0000644000175000017500000000000011741237740012665 00000000000000yaz-4.2.30/test/cql2pqf/3.6.out0000644000175000017500000000031211741237740012714 00000000000000Parsing CQL xml and "prox///" @and @attr 6=1 @attr 2=3 @attr 4=1 @attr 3=3 @attr 6=1 @attr 5=100 @attr 1=1016 "xml" @attr 6=1 @attr 2=3 @attr 4=1 @attr 3=3 @attr 6=1 @attr 5=100 @attr 1=1016 "prox///" yaz-4.2.30/test/cql2pqf/3.3.out0000644000175000017500000000030211741237740012710 00000000000000Parsing CQL cat not frog @not @attr 6=1 @attr 2=3 @attr 4=1 @attr 3=3 @attr 6=1 @attr 5=100 @attr 1=1016 "cat" @attr 6=1 @attr 2=3 @attr 4=1 @attr 3=3 @attr 6=1 @attr 5=100 @attr 1=1016 "frog" yaz-4.2.30/test/cql2pqf/3.9.out0000644000175000017500000000055311741237740012726 00000000000000Parsing CQL a or b and c not d @not @and @or @attr 6=1 @attr 2=3 @attr 4=1 @attr 3=3 @attr 6=1 @attr 5=100 @attr 1=1016 "a" @attr 6=1 @attr 2=3 @attr 4=1 @attr 3=3 @attr 6=1 @attr 5=100 @attr 1=1016 "b" @attr 6=1 @attr 2=3 @attr 4=1 @attr 3=3 @attr 6=1 @attr 5=100 @attr 1=1016 "c" @attr 6=1 @attr 2=3 @attr 4=1 @attr 3=3 @attr 6=1 @attr 5=100 @attr 1=1016 "d" yaz-4.2.30/test/cql2pqf/3.5.out0000644000175000017500000000032011741237740012712 00000000000000Parsing CQL "cat" not "fish food" @not @attr 6=1 @attr 2=3 @attr 4=1 @attr 3=3 @attr 6=1 @attr 5=100 @attr 1=1016 "cat" @attr 6=1 @attr 2=3 @attr 4=1 @attr 3=3 @attr 6=1 @attr 5=100 @attr 1=1016 "fish food" yaz-4.2.30/test/cql2pqf/3.7.out0000644000175000017500000000030211741237740012714 00000000000000Parsing CQL fred and any @and @attr 6=1 @attr 2=3 @attr 4=1 @attr 3=3 @attr 6=1 @attr 5=100 @attr 1=1016 "fred" @attr 6=1 @attr 2=3 @attr 4=1 @attr 3=3 @attr 6=1 @attr 5=100 @attr 1=1016 "any" yaz-4.2.30/test/cql2pqf/1.3.out0000644000175000017500000000014411741237740012712 00000000000000Parsing CQL "a b" @attr 6=1 @attr 2=3 @attr 4=1 @attr 3=3 @attr 6=1 @attr 5=100 @attr 1=1016 "a b" yaz-4.2.30/test/cql2pqf/4.1.err0000644000175000017500000000000011741237740012663 00000000000000yaz-4.2.30/test/cql2pqf/4.2.out0000644000175000017500000000013511741237740012714 00000000000000Parsing CQL a* @attr 6=1 @attr 2=3 @attr 4=1 @attr 3=3 @attr 6=1 @attr 5=1 @attr 1=1016 "a" yaz-4.2.30/test/cql2pqf/3.6.err0000644000175000017500000000000011741237740012667 00000000000000yaz-4.2.30/test/cql2pqf/4.10.out0000644000175000017500000000013711741237740012775 00000000000000Parsing CQL *a# @attr 6=1 @attr 2=3 @attr 4=1 @attr 3=3 @attr 6=1 @attr 5=2 @attr 1=1016 "a#" yaz-4.2.30/test/cql2pqf/5.5.out0000644000175000017500000000014411741237740012720 00000000000000Parsing CQL @and @attr 6=1 @attr 2=3 @attr 4=1 @attr 3=3 @attr 6=1 @attr 5=100 @attr 1=1016 "@and" yaz-4.2.30/test/cql2pqf/2.1.out0000644000175000017500000000015111741237740012707 00000000000000Parsing CQL title = fish @attr 6=1 @attr 2=3 @attr 4=1 @attr 3=3 @attr 6=1 @attr 5=100 @attr 1=4 "fish" yaz-4.2.30/test/cql2pqf/4.8.out0000644000175000017500000000014211741237740012720 00000000000000Parsing CQL a?a @attr 6=1 @attr 2=3 @attr 4=1 @attr 3=3 @attr 6=1 @attr 5=104 @attr 1=1016 "a#a" yaz-4.2.30/test/cql2pqf/4.12.out0000644000175000017500000000014411741237740012775 00000000000000Parsing CQL a*3 @attr 6=1 @attr 2=3 @attr 4=1 @attr 3=3 @attr 6=1 @attr 5=104 @attr 1=1016 "a?\\3" yaz-4.2.30/test/cql2pqf/5.3.out0000644000175000017500000000015111741237740012714 00000000000000Parsing CQL \*a*b# @attr 6=1 @attr 2=3 @attr 4=1 @attr 3=3 @attr 6=1 @attr 5=104 @attr 1=1016 "*a?b\\#" yaz-4.2.30/test/cql2pqf/3.4.out0000644000175000017500000000030411741237740012713 00000000000000Parsing CQL (cat not frog) @not @attr 6=1 @attr 2=3 @attr 4=1 @attr 3=3 @attr 6=1 @attr 5=100 @attr 1=1016 "cat" @attr 6=1 @attr 2=3 @attr 4=1 @attr 3=3 @attr 6=1 @attr 5=100 @attr 1=1016 "frog" yaz-4.2.30/test/cql2pqf/5.3.err0000644000175000017500000000000011741237740012666 00000000000000yaz-4.2.30/test/cql2pqf/4.3.err0000644000175000017500000000000011741237740012665 00000000000000yaz-4.2.30/test/cql2pqf/3.3.err0000644000175000017500000000000011741237740012664 00000000000000yaz-4.2.30/test/cql2pqf/5.4.out0000644000175000017500000000014011741237740012713 00000000000000Parsing CQL \" @attr 6=1 @attr 2=3 @attr 4=1 @attr 3=3 @attr 6=1 @attr 5=100 @attr 1=1016 "\"" yaz-4.2.30/test/cql2pqf/1.1.err0000644000175000017500000000000011741237740012660 00000000000000yaz-4.2.30/test/cql2pqf/2.2.out0000644000175000017500000000015411741237740012713 00000000000000Parsing CQL dc.title = fish @attr 6=1 @attr 2=3 @attr 4=1 @attr 3=3 @attr 6=1 @attr 5=100 @attr 1=4 "fish" yaz-4.2.30/test/cql2pqf/4.12.err0000644000175000017500000000000011741237740012745 00000000000000yaz-4.2.30/test/cql2pqf/3.9.err0000644000175000017500000000000011741237740012672 00000000000000yaz-4.2.30/test/cql2pqf/4.7.out0000644000175000017500000000014211741237740012717 00000000000000Parsing CQL ?a? @attr 6=1 @attr 2=3 @attr 4=1 @attr 3=3 @attr 6=1 @attr 5=104 @attr 1=1016 "#a#" yaz-4.2.30/test/cql2pqf/3.8.err0000644000175000017500000000000011741237740012671 00000000000000yaz-4.2.30/test/cql2pqf/4.11.err0000644000175000017500000000000011741237740012744 00000000000000yaz-4.2.30/test/cql2pqf/5.1.out0000644000175000017500000000014311741237740012713 00000000000000Parsing CQL a*\3 @attr 6=1 @attr 2=3 @attr 4=1 @attr 3=3 @attr 6=1 @attr 5=104 @attr 1=1016 "a?3" yaz-4.2.30/test/cql2pqf/4.1.out0000644000175000017500000000013511741237740012713 00000000000000Parsing CQL *a @attr 6=1 @attr 2=3 @attr 4=1 @attr 3=3 @attr 6=1 @attr 5=2 @attr 1=1016 "a" yaz-4.2.30/test/cql2pqf/4.5.out0000644000175000017500000000014011741237740012713 00000000000000Parsing CQL ?a @attr 6=1 @attr 2=3 @attr 4=1 @attr 3=3 @attr 6=1 @attr 5=104 @attr 1=1016 "#a" yaz-4.2.30/test/cql2pqf/3.2.out0000644000175000017500000000030211741237740012707 00000000000000Parsing CQL cat and fish @and @attr 6=1 @attr 2=3 @attr 4=1 @attr 3=3 @attr 6=1 @attr 5=100 @attr 1=1016 "cat" @attr 6=1 @attr 2=3 @attr 4=1 @attr 3=3 @attr 6=1 @attr 5=100 @attr 1=1016 "fish" yaz-4.2.30/test/cql2pqf/4.4.out0000644000175000017500000000014211741237740012714 00000000000000Parsing CQL a*a @attr 6=1 @attr 2=3 @attr 4=1 @attr 3=3 @attr 6=1 @attr 5=104 @attr 1=1016 "a?a" yaz-4.2.30/test/cql2pqf/4.8.err0000644000175000017500000000000011741237740012672 00000000000000yaz-4.2.30/test/cql2pqf/4.3.out0000644000175000017500000000013611741237740012716 00000000000000Parsing CQL *a* @attr 6=1 @attr 2=3 @attr 4=1 @attr 3=3 @attr 6=1 @attr 5=3 @attr 1=1016 "a" yaz-4.2.30/test/cql2pqf/4.11.out0000644000175000017500000000014111741237740012771 00000000000000Parsing CQL a#a* @attr 6=1 @attr 2=3 @attr 4=1 @attr 3=3 @attr 6=1 @attr 5=1 @attr 1=1016 "a#a" yaz-4.2.30/test/cql2pqf/4.7.err0000644000175000017500000000000011741237740012671 00000000000000yaz-4.2.30/test/cql2pqf/1.1.out0000644000175000017500000000013611741237740012711 00000000000000Parsing CQL a @attr 6=1 @attr 2=3 @attr 4=1 @attr 3=3 @attr 6=1 @attr 5=100 @attr 1=1016 "a" yaz-4.2.30/test/cql2pqf/5.2.err0000644000175000017500000000000011741237740012665 00000000000000yaz-4.2.30/test/cql2pqf/4.2.err0000644000175000017500000000000011741237740012664 00000000000000yaz-4.2.30/test/cql2pqf/4.6.err0000644000175000017500000000000011741237740012670 00000000000000yaz-4.2.30/test/cql2pqf/3.2.err0000644000175000017500000000000011741237740012663 00000000000000yaz-4.2.30/test/cql2pqf/5.1.err0000644000175000017500000000000011741237740012664 00000000000000yaz-4.2.30/test/cql2pqf/1.2.out0000644000175000017500000000022611741237740012712 00000000000000Parsing CQL a b @attr 6=1 @attr 2=3 @attr 4=1 @and @attr 3=3 @attr 6=1 @attr 5=100 @attr 1=1016 "a" @attr 3=3 @attr 6=1 @attr 5=100 @attr 1=1016 "b" yaz-4.2.30/test/cql2pqf/4.9.err0000644000175000017500000000000011741237740012673 00000000000000yaz-4.2.30/test/cql2pqf/3.8.out0000644000175000017500000000030411741237740012717 00000000000000Parsing CQL ((fred or all)) @or @attr 6=1 @attr 2=3 @attr 4=1 @attr 3=3 @attr 6=1 @attr 5=100 @attr 1=1016 "fred" @attr 6=1 @attr 2=3 @attr 4=1 @attr 3=3 @attr 6=1 @attr 5=100 @attr 1=1016 "all" yaz-4.2.30/test/tstodr.asn0000644000175000017500000000064511733047144012336 00000000000000-- Small ASN.1 spec for tstodr test test_odrcodec {test_odrcodec} DEFINITIONS ::= BEGIN MySequence ::= SEQUENCE { first [1] IMPLICIT INTEGER, second [2] IMPLICIT OCTET STRING, third [3] IMPLICIT BOOLEAN, fourth [4] IMPLICIT NULL, fifth [5] IMPLICIT INTEGER { enum1(0), enum2(1) }, myoid [6] IMPLICIT OBJECT IDENTIFIER } END yaz-4.2.30/test/test_file_glob.c0000644000175000017500000000402211733047144013432 00000000000000/* This file is part of the YAZ toolkit. * Copyright (C) 1995-2012 Index Data * See the file LICENSE for details. */ #if HAVE_CONFIG_H #include #endif #include #include #include #include #include #include #include void tst_with_path(const char *tpath) { yaz_glob_res_t glob_res; int ret = yaz_file_glob(tpath, &glob_res); if (ret == 0) { size_t n = yaz_file_glob_get_num(glob_res); size_t i; for (i = 0; i < n; i++) { yaz_log(YLOG_LOG, "match %s", yaz_file_glob_get_file(glob_res, i)); } } yaz_file_globfree(&glob_res); } static int check_file(const char *got, const char *expect) { const char *f = got; size_t l_match = strlen(expect); YAZ_CHECK(f && strlen(f) >= l_match); if (f && strlen(f) >= l_match && !strcmp(f + strlen(f) - l_match, expect)) return 1; return 0; } void tst(void) { yaz_glob_res_t glob_res; int ret; WRBUF tpath = wrbuf_alloc(); const char *srcdir = getenv("srcdir"); if (srcdir) { wrbuf_puts(tpath, srcdir); wrbuf_puts(tpath, "/"); } wrbuf_puts(tpath, "test_file*.c"); ret = yaz_file_glob(wrbuf_cstr(tpath), &glob_res); YAZ_CHECK_EQ(ret, 0); YAZ_CHECK_EQ(2, yaz_file_glob_get_num(glob_res)); if (yaz_file_glob_get_num(glob_res) == 2) { YAZ_CHECK(check_file(yaz_file_glob_get_file(glob_res, 0), "test_file_glob.c")); YAZ_CHECK(check_file(yaz_file_glob_get_file(glob_res, 1), "test_filepath.c")); } wrbuf_destroy(tpath); yaz_file_globfree(&glob_res); } int main (int argc, char **argv) { YAZ_CHECK_INIT(argc, argv); if (argc >= 2) tst_with_path(argv[1]); else tst(); YAZ_CHECK_TERM; } /* * Local variables: * c-basic-offset: 4 * c-file-style: "Stroustrup" * indent-tabs-mode: nil * End: * vim: shiftwidth=4 tabstop=8 expandtab */ yaz-4.2.30/test/test_cql2ccl.c0000644000175000017500000001664311733047144013047 00000000000000/* This file is part of the YAZ toolkit. * Copyright (C) 1995-2012 Index Data * See the file LICENSE for details. */ #if HAVE_CONFIG_H #include #endif #include #include #include #include #include static int tst_query_s(const char *cql, const char *expected_ccl, const char *expected_keys) { int ret = 1; CQL_parser cp = cql_parser_create(); int r = cql_parser_string(cp, cql); if (r) { yaz_log(YLOG_WARN, "cql: parse error: %s", cql); ret = 0; } else { /* cql parse OK */ WRBUF w = wrbuf_alloc(); r = cql_to_ccl(cql_parser_result(cp), wrbuf_vp_puts, w); if (expected_ccl && r == 0 && strcmp(wrbuf_cstr(w), expected_ccl) == 0) ; else if (!expected_ccl) { if (!r) { ret = 0; yaz_log(YLOG_WARN, "cql: diff: %s", cql); yaz_log(YLOG_WARN, " exp error"); yaz_log(YLOG_WARN, " got ccl %s", wrbuf_cstr(w)); } } else { ret = 0; yaz_log(YLOG_WARN, "cql: diff: %s", cql); yaz_log(YLOG_WARN, " exp ccl %s", expected_ccl); if (!r) yaz_log(YLOG_WARN, " got ccl %s", wrbuf_cstr(w)); else yaz_log(YLOG_WARN, " got error"); } wrbuf_rewind(w); r = cql_sortby_to_sortkeys(cql_parser_result(cp), wrbuf_vp_puts, w); if (expected_keys && !r && !strcmp(wrbuf_cstr(w), expected_keys)) ; else if (!expected_keys) { if (!r) { ret = 0; yaz_log(YLOG_WARN, "cql: diff: %s", cql); yaz_log(YLOG_WARN, " exp error"); yaz_log(YLOG_WARN, " got sortkeys %s", wrbuf_cstr(w)); } } else { ret = 0; yaz_log(YLOG_WARN, "cql: diff: %s", cql); yaz_log(YLOG_WARN, " exp sortkeys %s", expected_keys); if (!r) yaz_log(YLOG_WARN, " got sortkeys %s", wrbuf_cstr(w)); else yaz_log(YLOG_WARN, " got error"); } wrbuf_destroy(w); } cql_parser_destroy(cp); return ret; } static int tst_query(const char *cql, const char *expected_ccl) { return tst_query_s(cql, expected_ccl, ""); } static void tst(void) { YAZ_CHECK(tst_query("\"\"", "\"\"")); YAZ_CHECK(tst_query("x", "\"x\"")); YAZ_CHECK(tst_query("\"x\"", "\"x\"")); YAZ_CHECK(tst_query("\"xy\"", "\"xy\"")); YAZ_CHECK(tst_query("?", "#")); YAZ_CHECK(tst_query("?a?", "#\"a\"#")); YAZ_CHECK(tst_query("?a", "#\"a\"")); YAZ_CHECK(tst_query("a?", "\"a\"#")); YAZ_CHECK(tst_query("\"?\"", "#")); YAZ_CHECK(tst_query("\\?", "\"?\"")); YAZ_CHECK(tst_query("\"\\?\"", "\"?\"")); YAZ_CHECK(tst_query("*", "?")); YAZ_CHECK(tst_query("*a*", "?\"a\"?")); YAZ_CHECK(tst_query("*a", "?\"a\"")); YAZ_CHECK(tst_query("a*", "\"a\"?")); YAZ_CHECK(tst_query("\"*\"", "?")); YAZ_CHECK(tst_query("\\*", "\"*\"")); YAZ_CHECK(tst_query("\"\\*\"", "\"*\"")); YAZ_CHECK(tst_query("a b", "\"a\" \"b\"")); YAZ_CHECK(tst_query("ab bc", "\"ab\" \"bc\"")); YAZ_CHECK(tst_query("\\\\", "\"\\\\\"")); YAZ_CHECK(tst_query("\\\"", "\"\\\"\"")); YAZ_CHECK(tst_query("\\x" , "\"x\"")); YAZ_CHECK(tst_query("\\*", "\"*\"")); YAZ_CHECK(tst_query("\"\\*\"", "\"*\"")); YAZ_CHECK(tst_query("\\#", "\"#\"")); YAZ_CHECK(tst_query("\"\\#\"", "\"#\"")); YAZ_CHECK(tst_query("title=x", "title=\"x\"")); YAZ_CHECK(tst_query("title=x or author=y", "(title=\"x\") or (author=\"y\")")); YAZ_CHECK(tst_query("title=x or author=y and date=z", "((title=\"x\") or (author=\"y\")) and (date=\"z\")")); YAZ_CHECK(tst_query("title all \"\"", "title=\"\"")); YAZ_CHECK(tst_query("title all x", "title=\"x\"")); YAZ_CHECK(tst_query("title all x y", "title=\"x\" and title=\"y\"")); YAZ_CHECK(tst_query("title all \"x y\"", "title=\"x\" and title=\"y\"")); YAZ_CHECK(tst_query("title any x", "title=\"x\"")); YAZ_CHECK(tst_query("title any x y", "title=\"x\" or title=\"y\"")); YAZ_CHECK(tst_query("title any \"x y\"", "title=\"x\" or title=\"y\"")); YAZ_CHECK(tst_query("title = \"x y\"", "title=\"x y\"")); YAZ_CHECK(tst_query("title = x y", "title=\"x\" \"y\"")); YAZ_CHECK(tst_query("title = x y z", "title=\"x\" \"y\" \"z\"")); YAZ_CHECK(tst_query("dc.title=encyclopedia prox dinosaurs", "(dc.title=\"encyclopedia\") % (\"dinosaurs\")")); YAZ_CHECK(tst_query("dc.title=encyclopedia prox/distance<=3 dinosaurs", "(dc.title=\"encyclopedia\") %3 (\"dinosaurs\")")); YAZ_CHECK(tst_query("dc.title=encyclopedia prox/distance<=3/unit=word " "dinosaurs", "(dc.title=\"encyclopedia\") %3 (\"dinosaurs\")")); YAZ_CHECK(tst_query("dc.title=encyclopedia prox/distance<=3/unit=phrase " "dinosaurs", 0)); YAZ_CHECK(tst_query("dc.title=encyclopedia prox/distance<=3/a=b " "dinosaurs", 0)); YAZ_CHECK(tst_query("dc.title=encyclopedia prox/a=b dinosaurs", 0)); YAZ_CHECK(tst_query("dc.title=encyclopedia prox/distance<3 dinosaurs", "(dc.title=\"encyclopedia\") %2 (\"dinosaurs\")")); YAZ_CHECK(tst_query("dc.title=encyclopedia prox/distance=3 dinosaurs", 0)); YAZ_CHECK(tst_query("dc.title=encyclopedia prox/distance>3 dinosaurs", 0)); YAZ_CHECK(tst_query("dc.title=encyclopedia prox/distance>=3 dinosaurs", 0)); YAZ_CHECK(tst_query_s("a sortby title", "\"a\"", "title,,1,0,highValue")); YAZ_CHECK(tst_query_s("a sortby dc.title", "\"a\"", "title,dc,1,0,highValue")); YAZ_CHECK(tst_query_s("a sortby title/ascending", "\"a\"", "title,,1,0,highValue")); YAZ_CHECK(tst_query_s("a sortby title/descending", "\"a\"", "title,,0,0,highValue")); YAZ_CHECK(tst_query_s("a sortby title/ignoreCase", "\"a\"", "title,,1,0,highValue")); YAZ_CHECK(tst_query_s("a sortby title/respectCase", "\"a\"", "title,,1,1,highValue")); YAZ_CHECK(tst_query_s("a sortby title/missingOmit", "\"a\"", "title,,1,0,omit")); YAZ_CHECK(tst_query_s("a sortby title/missingFail", "\"a\"", "title,,1,0,abort")); YAZ_CHECK(tst_query_s("a sortby title/missingLow", "\"a\"", "title,,1,0,lowValue")); YAZ_CHECK(tst_query_s("a sortby title/missingHigh", "\"a\"", "title,,1,0,highValue")); YAZ_CHECK(tst_query_s("a sortby title/sort.missingHigh", "\"a\"", "title,,1,0,highValue")); YAZ_CHECK(tst_query_s("a sortby title/bogus", "\"a\"", 0)); YAZ_CHECK(tst_query_s("a sortby dc.year dc.author", "\"a\"", "year,dc,1,0,highValue author,dc,1,0,highValue")); } int main(int argc, char **argv) { YAZ_CHECK_INIT(argc, argv); YAZ_CHECK_LOG(); tst(); YAZ_CHECK_TERM; } /* * Local variables: * c-basic-offset: 4 * c-file-style: "Stroustrup" * indent-tabs-mode: nil * End: * vim: shiftwidth=4 tabstop=8 expandtab */ yaz-4.2.30/test/test_record_conv.xsl0000644000175000017500000000054511733047144014405 00000000000000 yaz-4.2.30/m4/0000755000175000017500000000000011741237737007740 500000000000000yaz-4.2.30/m4/lt~obsolete.m40000644000175000017500000001375611653051561012477 00000000000000# lt~obsolete.m4 -- aclocal satisfying obsolete definitions. -*-Autoconf-*- # # Copyright (C) 2004, 2005, 2007, 2009 Free Software Foundation, Inc. # Written by Scott James Remnant, 2004. # # This file is free software; the Free Software Foundation gives # unlimited permission to copy and/or distribute it, with or without # modifications, as long as this notice is preserved. # serial 5 lt~obsolete.m4 # These exist entirely to fool aclocal when bootstrapping libtool. # # In the past libtool.m4 has provided macros via AC_DEFUN (or AU_DEFUN) # which have later been changed to m4_define as they aren't part of the # exported API, or moved to Autoconf or Automake where they belong. # # The trouble is, aclocal is a bit thick. It'll see the old AC_DEFUN # in /usr/share/aclocal/libtool.m4 and remember it, then when it sees us # using a macro with the same name in our local m4/libtool.m4 it'll # pull the old libtool.m4 in (it doesn't see our shiny new m4_define # and doesn't know about Autoconf macros at all.) # # So we provide this file, which has a silly filename so it's always # included after everything else. This provides aclocal with the # AC_DEFUNs it wants, but when m4 processes it, it doesn't do anything # because those macros already exist, or will be overwritten later. # We use AC_DEFUN over AU_DEFUN for compatibility with aclocal-1.6. # # Anytime we withdraw an AC_DEFUN or AU_DEFUN, remember to add it here. # Yes, that means every name once taken will need to remain here until # we give up compatibility with versions before 1.7, at which point # we need to keep only those names which we still refer to. # This is to help aclocal find these macros, as it can't see m4_define. AC_DEFUN([LTOBSOLETE_VERSION], [m4_if([1])]) m4_ifndef([AC_LIBTOOL_LINKER_OPTION], [AC_DEFUN([AC_LIBTOOL_LINKER_OPTION])]) m4_ifndef([AC_PROG_EGREP], [AC_DEFUN([AC_PROG_EGREP])]) m4_ifndef([_LT_AC_PROG_ECHO_BACKSLASH], [AC_DEFUN([_LT_AC_PROG_ECHO_BACKSLASH])]) m4_ifndef([_LT_AC_SHELL_INIT], [AC_DEFUN([_LT_AC_SHELL_INIT])]) m4_ifndef([_LT_AC_SYS_LIBPATH_AIX], [AC_DEFUN([_LT_AC_SYS_LIBPATH_AIX])]) m4_ifndef([_LT_PROG_LTMAIN], [AC_DEFUN([_LT_PROG_LTMAIN])]) m4_ifndef([_LT_AC_TAGVAR], [AC_DEFUN([_LT_AC_TAGVAR])]) m4_ifndef([AC_LTDL_ENABLE_INSTALL], [AC_DEFUN([AC_LTDL_ENABLE_INSTALL])]) m4_ifndef([AC_LTDL_PREOPEN], [AC_DEFUN([AC_LTDL_PREOPEN])]) m4_ifndef([_LT_AC_SYS_COMPILER], [AC_DEFUN([_LT_AC_SYS_COMPILER])]) m4_ifndef([_LT_AC_LOCK], [AC_DEFUN([_LT_AC_LOCK])]) m4_ifndef([AC_LIBTOOL_SYS_OLD_ARCHIVE], [AC_DEFUN([AC_LIBTOOL_SYS_OLD_ARCHIVE])]) m4_ifndef([_LT_AC_TRY_DLOPEN_SELF], [AC_DEFUN([_LT_AC_TRY_DLOPEN_SELF])]) m4_ifndef([AC_LIBTOOL_PROG_CC_C_O], [AC_DEFUN([AC_LIBTOOL_PROG_CC_C_O])]) m4_ifndef([AC_LIBTOOL_SYS_HARD_LINK_LOCKS], [AC_DEFUN([AC_LIBTOOL_SYS_HARD_LINK_LOCKS])]) m4_ifndef([AC_LIBTOOL_OBJDIR], [AC_DEFUN([AC_LIBTOOL_OBJDIR])]) m4_ifndef([AC_LTDL_OBJDIR], [AC_DEFUN([AC_LTDL_OBJDIR])]) m4_ifndef([AC_LIBTOOL_PROG_LD_HARDCODE_LIBPATH], [AC_DEFUN([AC_LIBTOOL_PROG_LD_HARDCODE_LIBPATH])]) m4_ifndef([AC_LIBTOOL_SYS_LIB_STRIP], [AC_DEFUN([AC_LIBTOOL_SYS_LIB_STRIP])]) m4_ifndef([AC_PATH_MAGIC], [AC_DEFUN([AC_PATH_MAGIC])]) m4_ifndef([AC_PROG_LD_GNU], [AC_DEFUN([AC_PROG_LD_GNU])]) m4_ifndef([AC_PROG_LD_RELOAD_FLAG], [AC_DEFUN([AC_PROG_LD_RELOAD_FLAG])]) m4_ifndef([AC_DEPLIBS_CHECK_METHOD], [AC_DEFUN([AC_DEPLIBS_CHECK_METHOD])]) m4_ifndef([AC_LIBTOOL_PROG_COMPILER_NO_RTTI], [AC_DEFUN([AC_LIBTOOL_PROG_COMPILER_NO_RTTI])]) m4_ifndef([AC_LIBTOOL_SYS_GLOBAL_SYMBOL_PIPE], [AC_DEFUN([AC_LIBTOOL_SYS_GLOBAL_SYMBOL_PIPE])]) m4_ifndef([AC_LIBTOOL_PROG_COMPILER_PIC], [AC_DEFUN([AC_LIBTOOL_PROG_COMPILER_PIC])]) m4_ifndef([AC_LIBTOOL_PROG_LD_SHLIBS], [AC_DEFUN([AC_LIBTOOL_PROG_LD_SHLIBS])]) m4_ifndef([AC_LIBTOOL_POSTDEP_PREDEP], [AC_DEFUN([AC_LIBTOOL_POSTDEP_PREDEP])]) m4_ifndef([LT_AC_PROG_EGREP], [AC_DEFUN([LT_AC_PROG_EGREP])]) m4_ifndef([LT_AC_PROG_SED], [AC_DEFUN([LT_AC_PROG_SED])]) m4_ifndef([_LT_CC_BASENAME], [AC_DEFUN([_LT_CC_BASENAME])]) m4_ifndef([_LT_COMPILER_BOILERPLATE], [AC_DEFUN([_LT_COMPILER_BOILERPLATE])]) m4_ifndef([_LT_LINKER_BOILERPLATE], [AC_DEFUN([_LT_LINKER_BOILERPLATE])]) m4_ifndef([_AC_PROG_LIBTOOL], [AC_DEFUN([_AC_PROG_LIBTOOL])]) m4_ifndef([AC_LIBTOOL_SETUP], [AC_DEFUN([AC_LIBTOOL_SETUP])]) m4_ifndef([_LT_AC_CHECK_DLFCN], [AC_DEFUN([_LT_AC_CHECK_DLFCN])]) m4_ifndef([AC_LIBTOOL_SYS_DYNAMIC_LINKER], [AC_DEFUN([AC_LIBTOOL_SYS_DYNAMIC_LINKER])]) m4_ifndef([_LT_AC_TAGCONFIG], [AC_DEFUN([_LT_AC_TAGCONFIG])]) m4_ifndef([AC_DISABLE_FAST_INSTALL], [AC_DEFUN([AC_DISABLE_FAST_INSTALL])]) m4_ifndef([_LT_AC_LANG_CXX], [AC_DEFUN([_LT_AC_LANG_CXX])]) m4_ifndef([_LT_AC_LANG_F77], [AC_DEFUN([_LT_AC_LANG_F77])]) m4_ifndef([_LT_AC_LANG_GCJ], [AC_DEFUN([_LT_AC_LANG_GCJ])]) m4_ifndef([AC_LIBTOOL_LANG_C_CONFIG], [AC_DEFUN([AC_LIBTOOL_LANG_C_CONFIG])]) m4_ifndef([_LT_AC_LANG_C_CONFIG], [AC_DEFUN([_LT_AC_LANG_C_CONFIG])]) m4_ifndef([AC_LIBTOOL_LANG_CXX_CONFIG], [AC_DEFUN([AC_LIBTOOL_LANG_CXX_CONFIG])]) m4_ifndef([_LT_AC_LANG_CXX_CONFIG], [AC_DEFUN([_LT_AC_LANG_CXX_CONFIG])]) m4_ifndef([AC_LIBTOOL_LANG_F77_CONFIG], [AC_DEFUN([AC_LIBTOOL_LANG_F77_CONFIG])]) m4_ifndef([_LT_AC_LANG_F77_CONFIG], [AC_DEFUN([_LT_AC_LANG_F77_CONFIG])]) m4_ifndef([AC_LIBTOOL_LANG_GCJ_CONFIG], [AC_DEFUN([AC_LIBTOOL_LANG_GCJ_CONFIG])]) m4_ifndef([_LT_AC_LANG_GCJ_CONFIG], [AC_DEFUN([_LT_AC_LANG_GCJ_CONFIG])]) m4_ifndef([AC_LIBTOOL_LANG_RC_CONFIG], [AC_DEFUN([AC_LIBTOOL_LANG_RC_CONFIG])]) m4_ifndef([_LT_AC_LANG_RC_CONFIG], [AC_DEFUN([_LT_AC_LANG_RC_CONFIG])]) m4_ifndef([AC_LIBTOOL_CONFIG], [AC_DEFUN([AC_LIBTOOL_CONFIG])]) m4_ifndef([_LT_AC_FILE_LTDLL_C], [AC_DEFUN([_LT_AC_FILE_LTDLL_C])]) m4_ifndef([_LT_REQUIRED_DARWIN_CHECKS], [AC_DEFUN([_LT_REQUIRED_DARWIN_CHECKS])]) m4_ifndef([_LT_AC_PROG_CXXCPP], [AC_DEFUN([_LT_AC_PROG_CXXCPP])]) m4_ifndef([_LT_PREPARE_SED_QUOTE_VARS], [AC_DEFUN([_LT_PREPARE_SED_QUOTE_VARS])]) m4_ifndef([_LT_PROG_ECHO_BACKSLASH], [AC_DEFUN([_LT_PROG_ECHO_BACKSLASH])]) m4_ifndef([_LT_PROG_F77], [AC_DEFUN([_LT_PROG_F77])]) m4_ifndef([_LT_PROG_FC], [AC_DEFUN([_LT_PROG_FC])]) m4_ifndef([_LT_PROG_CXX], [AC_DEFUN([_LT_PROG_CXX])]) yaz-4.2.30/m4/yaz.m40000644000175000017500000001001211733047146010711 00000000000000# Use this m4 function for autoconf if you use YAZ in your own # configure script. dnl ----- Setup Docbook documentation for YAZ AC_DEFUN([YAZ_DOC], [ dnl autoconf < 2.60 does not define docdir if test -n "$docdir"; then docdir="${datadir}/doc/${PACKAGE}" AC_SUBST([docdir]) fi AC_SUBST(XSLTPROC_COMPILE) XSLTPROC_COMPILE='xsltproc --xinclude -path ".:$(srcdir)"' AC_SUBST(MAN_COMPILE) MAN_COMPILE='$(XSLTPROC_COMPILE) $(srcdir)/common/id.man.xsl' AC_SUBST(HTML_COMPILE) HTML_COMPILE='$(XSLTPROC_COMPILE) $(srcdir)/common/id.htmlhelp.xsl' AC_SUBST(TKL_COMPILE) TKL_COMPILE='$(XSLTPROC_COMPILE) $(srcdir)/common/id.tkl.xsl' AC_SUBST(PDF_COMPILE) PDF_COMPILE='dblatex -P latex.class.options=a4paper,12pt,twoside,openright' AC_SUBST(DTD_DIR) AC_ARG_WITH(docbook-dtd,[[ --with-docbook-dtd=DIR use docbookx.dtd in DIR]], [ if test -f "$withval/docbookx.dtd"; then DTD_DIR=$withval fi ],[ AC_MSG_CHECKING(for docbookx.dtd) DTD_DIR="" for d in /usr/lib/sgml/dtd/docbook-xml \ /usr/share/sgml/docbook/dtd/4.2 \ /usr/share/sgml/docbook/dtd/xml/4.* \ /usr/share/sgml/docbook/xml-dtd-4.* \ /usr/local/share/xml/docbook/4.* do if test -f $d/docbookx.dtd; then DTD_DIR=$d fi done if test -z "$DTD_DIR"; then AC_MSG_RESULT(Not found) else AC_MSG_RESULT($d) fi ]) AC_SUBST(DSSSL_DIR) AC_ARG_WITH(docbook-dsssl,[[ --with-docbook-dsssl=DIR use Docbook DSSSL in DIR/{html,print}/docbook.dsl]], [ if test -f "$withval/html/docbook.dsl"; then DSSSL_DIR=$withval fi ],[ AC_MSG_CHECKING(for docbook.dsl) DSSSL_DIR="" for d in /usr/share/sgml/docbook/stylesheet/dsssl/modular \ /usr/share/sgml/docbook/dsssl-stylesheets-1.* \ /usr/lib/sgml/stylesheet/dsssl/docbook/nwalsh \ /usr/local/share/sgml/docbook/dsssl/modular do if test -f $d/html/docbook.dsl; then AC_MSG_RESULT($d) DSSSL_DIR=$d break fi done if test -z "$DSSSL_DIR"; then AC_MSG_RESULT(Not found) fi ]) AC_SUBST(XSL_DIR) AC_ARG_WITH(docbook-xsl,[[ --with-docbook-xsl=DIR use Docbook XSL in DIR/{htmlhelp,xhtml}]], [ if test -f "$withval/htmlhelp/htmlhelp.xsl"; then XSL_DIR=$withval fi ],[ AC_MSG_CHECKING(for htmlhelp.xsl) for d in /usr/share/sgml/docbook/stylesheet/xsl/nwalsh \ /usr/local/share/xsl/docbook \ /usr/share/sgml/docbook/xsl-stylesheets-1.* do if test -f $d/htmlhelp/htmlhelp.xsl; then AC_MSG_RESULT($d) XSL_DIR=$d break fi done if test -z "$XSL_DIR"; then AC_MSG_RESULT(Not found) fi ]) ]) AC_DEFUN([YAZ_INIT], [ AC_SUBST(YAZLIB) AC_SUBST(YAZLALIB) AC_SUBST(YAZINC) AC_SUBST(YAZVERSION) yazconfig=NONE yazpath=NONE AC_ARG_WITH(yaz, [ --with-yaz=DIR use yaz-config in DIR (example /home/yaz-1.7)], [yazpath=$withval]) if test "x$yazpath" != "xNONE"; then yazconfig=$yazpath/yaz-config else if test "x$srcdir" = "x"; then yazsrcdir=. else yazsrcdir=$srcdir fi for i in ${yazsrcdir}/../../yaz ${yazsrcdir}/../yaz-* ${yazsrcdir}/../yaz; do if test -d $i; then if test -r $i/yaz-config; then yazconfig=$i/yaz-config fi fi done if test "x$yazconfig" = "xNONE"; then AC_PATH_PROG(yazconfig, yaz-config, NONE) fi fi AC_MSG_CHECKING(for YAZ) if $yazconfig --version >/dev/null 2>&1; then YAZLIB=`$yazconfig --libs $1` # if this is empty, it's a simple version YAZ 1.6 script # so we have to source it instead... if test "X$YAZLIB" = "X"; then . $yazconfig else YAZLALIB=`$yazconfig --lalibs $1` YAZINC=`$yazconfig --cflags $1` YAZVERSION=`$yazconfig --version` fi AC_MSG_RESULT([$yazconfig]) else AC_MSG_RESULT(Not found) YAZVERSION=NONE fi if test "X$YAZVERSION" != "XNONE"; then AC_MSG_CHECKING([for YAZ version]) AC_MSG_RESULT([$YAZVERSION]) if test "$2"; then have_yaz_version=`echo "$YAZVERSION" | awk 'BEGIN { FS = "."; } { printf "%d", ([$]1 * 1000 + [$]2) * 1000 + [$]3;}'` req_yaz_version=`echo "$2" | awk 'BEGIN { FS = "."; } { printf "%d", ([$]1 * 1000 + [$]2) * 1000 + [$]3;}'` if test "$have_yaz_version" -lt "$req_yaz_version"; then AC_MSG_ERROR([$YAZVERSION. Requires YAZ $2 or later]) fi fi fi ]) yaz-4.2.30/m4/ac_check_icu.m40000644000175000017500000000504611733047146012501 00000000000000##### http://autoconf-archive.cryp.to/ac_check_icu.html # # SYNOPSIS # # AC_CHECK_ICU(version, action-if, action-if-not) # # DESCRIPTION # # Defines ICU_LIBS, ICU_CFLAGS, ICU_CXXFLAGS. See icu-config(1) man # page. # # LAST MODIFICATION # # 2005-09-20 # # COPYLEFT # # Copyright (c) 2005 Akos Maroy # # Copying and distribution of this file, with or without # modification, are permitted in any medium without royalty provided # the copyright notice and this notice are preserved. AC_DEFUN([AC_CHECK_ICU],[ succeeded=no icudir=default AC_ARG_WITH(icu,[ --with-icu[=PREFIX] use ICU libs in PREFIX],icudir=$withval) if test "$icudir" != "no"; then if test "$icudir" = "yes" -o "$icudir" = "default"; then AC_PATH_PROG(ICU_CONFIG, icu-config, no) else ICU_CONFIG=${icudir}/bin/icu-config fi if test -x $ICU_CONFIG; then ICU_VERSION=`$ICU_CONFIG --version` AC_MSG_CHECKING(for ICU >= $1) VERSION_CHECK=`expr $ICU_VERSION \>\= $1` if test "$VERSION_CHECK" = "1" ; then AC_MSG_RESULT(yes) succeeded=yes ICU_PREFIX=`$ICU_CONFIG --prefix` AC_MSG_CHECKING(ICU_CPPFLAGS) ICU_CPPFLAGS=`$ICU_CONFIG --cppflags-searchpath`"" if test "$ICU_PREFIX" = "/usr"; then ICU_CPPFLAGS=`echo $ICU_CPPFLAGS|sed 's@-I/usr/include@@'` fi AC_MSG_RESULT($ICU_CPPFLAGS) AC_MSG_CHECKING(ICU_CFLAGS) ICU_CFLAGS=`$ICU_CONFIG --cflags` AC_MSG_RESULT($ICU_CFLAGS) AC_MSG_CHECKING(ICU_CXXFLAGS) ICU_CXXFLAGS=`$ICU_CONFIG --cxxflags` AC_MSG_RESULT($ICU_CXXFLAGS) AC_MSG_CHECKING(ICU_LIBS) if test "$ICU_PREFIX" = "/usr"; then ICU_LIBS=`$ICU_CONFIG --ldflags-libsonly` else ICU_LIBS=`$ICU_CONFIG --ldflags` fi case $host_os in solaris*) AC_CHECK_LIB([Crun],[_fini],[ICU_LIBS="$ICU_LIBS -lCrun"]) ;; esac AC_MSG_RESULT($ICU_LIBS) else ICU_CPPFLAGS="" ICU_CFLAGS="" ICU_CXXFLAGS="" ICU_LIBS="" AC_MSG_RESULT([can not find ICU >= $1]) fi AC_SUBST(ICU_CPPFLAGS) AC_SUBST(ICU_CFLAGS) AC_SUBST(ICU_CXXFLAGS) AC_SUBST(ICU_LIBS) fi if test "$succeeded" = "no"; then if test "$icudir" != "default"; then AC_MSG_ERROR([libicu development libraries not found.]) fi fi fi if test "$succeeded" = "yes"; then ifelse([$2], , :, [$2]) else ifelse([$3], , :, [$3]) fi ]) dnl Local Variables: dnl mode:shell-script dnl sh-indentation:2 dnl sh-basic-offset: 4 dnl End: yaz-4.2.30/m4/libtool.m40000644000175000017500000106043411653051561011565 00000000000000# libtool.m4 - Configure libtool for the host system. -*-Autoconf-*- # # Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2003, 2004, 2005, # 2006, 2007, 2008, 2009, 2010, 2011 Free Software # Foundation, Inc. # Written by Gordon Matzigkeit, 1996 # # This file is free software; the Free Software Foundation gives # unlimited permission to copy and/or distribute it, with or without # modifications, as long as this notice is preserved. m4_define([_LT_COPYING], [dnl # Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2003, 2004, 2005, # 2006, 2007, 2008, 2009, 2010, 2011 Free Software # Foundation, Inc. # Written by Gordon Matzigkeit, 1996 # # This file is part of GNU Libtool. # # GNU Libtool is free software; you can redistribute it and/or # modify it under the terms of the GNU General Public License as # published by the Free Software Foundation; either version 2 of # the License, or (at your option) any later version. # # As a special exception to the GNU General Public License, # if you distribute this file as part of a program or library that # is built using GNU Libtool, you may include this file under the # same distribution terms that you use for the rest of that program. # # GNU Libtool is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with GNU Libtool; see the file COPYING. If not, a copy # can be downloaded from http://www.gnu.org/licenses/gpl.html, or # obtained by writing to the Free Software Foundation, Inc., # 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. ]) # serial 57 LT_INIT # LT_PREREQ(VERSION) # ------------------ # Complain and exit if this libtool version is less that VERSION. m4_defun([LT_PREREQ], [m4_if(m4_version_compare(m4_defn([LT_PACKAGE_VERSION]), [$1]), -1, [m4_default([$3], [m4_fatal([Libtool version $1 or higher is required], 63)])], [$2])]) # _LT_CHECK_BUILDDIR # ------------------ # Complain if the absolute build directory name contains unusual characters m4_defun([_LT_CHECK_BUILDDIR], [case `pwd` in *\ * | *\ *) AC_MSG_WARN([Libtool does not cope well with whitespace in `pwd`]) ;; esac ]) # LT_INIT([OPTIONS]) # ------------------ AC_DEFUN([LT_INIT], [AC_PREREQ([2.58])dnl We use AC_INCLUDES_DEFAULT AC_REQUIRE([AC_CONFIG_AUX_DIR_DEFAULT])dnl AC_BEFORE([$0], [LT_LANG])dnl AC_BEFORE([$0], [LT_OUTPUT])dnl AC_BEFORE([$0], [LTDL_INIT])dnl m4_require([_LT_CHECK_BUILDDIR])dnl dnl Autoconf doesn't catch unexpanded LT_ macros by default: m4_pattern_forbid([^_?LT_[A-Z_]+$])dnl m4_pattern_allow([^(_LT_EOF|LT_DLGLOBAL|LT_DLLAZY_OR_NOW|LT_MULTI_MODULE)$])dnl dnl aclocal doesn't pull ltoptions.m4, ltsugar.m4, or ltversion.m4 dnl unless we require an AC_DEFUNed macro: AC_REQUIRE([LTOPTIONS_VERSION])dnl AC_REQUIRE([LTSUGAR_VERSION])dnl AC_REQUIRE([LTVERSION_VERSION])dnl AC_REQUIRE([LTOBSOLETE_VERSION])dnl m4_require([_LT_PROG_LTMAIN])dnl _LT_SHELL_INIT([SHELL=${CONFIG_SHELL-/bin/sh}]) dnl Parse OPTIONS _LT_SET_OPTIONS([$0], [$1]) # This can be used to rebuild libtool when needed LIBTOOL_DEPS="$ltmain" # Always use our own libtool. LIBTOOL='$(SHELL) $(top_builddir)/libtool' AC_SUBST(LIBTOOL)dnl _LT_SETUP # Only expand once: m4_define([LT_INIT]) ])# LT_INIT # Old names: AU_ALIAS([AC_PROG_LIBTOOL], [LT_INIT]) AU_ALIAS([AM_PROG_LIBTOOL], [LT_INIT]) dnl aclocal-1.4 backwards compatibility: dnl AC_DEFUN([AC_PROG_LIBTOOL], []) dnl AC_DEFUN([AM_PROG_LIBTOOL], []) # _LT_CC_BASENAME(CC) # ------------------- # Calculate cc_basename. Skip known compiler wrappers and cross-prefix. m4_defun([_LT_CC_BASENAME], [for cc_temp in $1""; do case $cc_temp in compile | *[[\\/]]compile | ccache | *[[\\/]]ccache ) ;; distcc | *[[\\/]]distcc | purify | *[[\\/]]purify ) ;; \-*) ;; *) break;; esac done cc_basename=`$ECHO "$cc_temp" | $SED "s%.*/%%; s%^$host_alias-%%"` ]) # _LT_FILEUTILS_DEFAULTS # ---------------------- # It is okay to use these file commands and assume they have been set # sensibly after `m4_require([_LT_FILEUTILS_DEFAULTS])'. m4_defun([_LT_FILEUTILS_DEFAULTS], [: ${CP="cp -f"} : ${MV="mv -f"} : ${RM="rm -f"} ])# _LT_FILEUTILS_DEFAULTS # _LT_SETUP # --------- m4_defun([_LT_SETUP], [AC_REQUIRE([AC_CANONICAL_HOST])dnl AC_REQUIRE([AC_CANONICAL_BUILD])dnl AC_REQUIRE([_LT_PREPARE_SED_QUOTE_VARS])dnl AC_REQUIRE([_LT_PROG_ECHO_BACKSLASH])dnl _LT_DECL([], [PATH_SEPARATOR], [1], [The PATH separator for the build system])dnl dnl _LT_DECL([], [host_alias], [0], [The host system])dnl _LT_DECL([], [host], [0])dnl _LT_DECL([], [host_os], [0])dnl dnl _LT_DECL([], [build_alias], [0], [The build system])dnl _LT_DECL([], [build], [0])dnl _LT_DECL([], [build_os], [0])dnl dnl AC_REQUIRE([AC_PROG_CC])dnl AC_REQUIRE([LT_PATH_LD])dnl AC_REQUIRE([LT_PATH_NM])dnl dnl AC_REQUIRE([AC_PROG_LN_S])dnl test -z "$LN_S" && LN_S="ln -s" _LT_DECL([], [LN_S], [1], [Whether we need soft or hard links])dnl dnl AC_REQUIRE([LT_CMD_MAX_LEN])dnl _LT_DECL([objext], [ac_objext], [0], [Object file suffix (normally "o")])dnl _LT_DECL([], [exeext], [0], [Executable file suffix (normally "")])dnl dnl m4_require([_LT_FILEUTILS_DEFAULTS])dnl m4_require([_LT_CHECK_SHELL_FEATURES])dnl m4_require([_LT_PATH_CONVERSION_FUNCTIONS])dnl m4_require([_LT_CMD_RELOAD])dnl m4_require([_LT_CHECK_MAGIC_METHOD])dnl m4_require([_LT_CHECK_SHAREDLIB_FROM_LINKLIB])dnl m4_require([_LT_CMD_OLD_ARCHIVE])dnl m4_require([_LT_CMD_GLOBAL_SYMBOLS])dnl m4_require([_LT_WITH_SYSROOT])dnl _LT_CONFIG_LIBTOOL_INIT([ # See if we are running on zsh, and set the options which allow our # commands through without removal of \ escapes INIT. if test -n "\${ZSH_VERSION+set}" ; then setopt NO_GLOB_SUBST fi ]) if test -n "${ZSH_VERSION+set}" ; then setopt NO_GLOB_SUBST fi _LT_CHECK_OBJDIR m4_require([_LT_TAG_COMPILER])dnl case $host_os in aix3*) # AIX sometimes has problems with the GCC collect2 program. For some # reason, if we set the COLLECT_NAMES environment variable, the problems # vanish in a puff of smoke. if test "X${COLLECT_NAMES+set}" != Xset; then COLLECT_NAMES= export COLLECT_NAMES fi ;; esac # Global variables: ofile=libtool can_build_shared=yes # All known linkers require a `.a' archive for static linking (except MSVC, # which needs '.lib'). libext=a with_gnu_ld="$lt_cv_prog_gnu_ld" old_CC="$CC" old_CFLAGS="$CFLAGS" # Set sane defaults for various variables test -z "$CC" && CC=cc test -z "$LTCC" && LTCC=$CC test -z "$LTCFLAGS" && LTCFLAGS=$CFLAGS test -z "$LD" && LD=ld test -z "$ac_objext" && ac_objext=o _LT_CC_BASENAME([$compiler]) # Only perform the check for file, if the check method requires it test -z "$MAGIC_CMD" && MAGIC_CMD=file case $deplibs_check_method in file_magic*) if test "$file_magic_cmd" = '$MAGIC_CMD'; then _LT_PATH_MAGIC fi ;; esac # Use C for the default configuration in the libtool script LT_SUPPORTED_TAG([CC]) _LT_LANG_C_CONFIG _LT_LANG_DEFAULT_CONFIG _LT_CONFIG_COMMANDS ])# _LT_SETUP # _LT_PREPARE_SED_QUOTE_VARS # -------------------------- # Define a few sed substitution that help us do robust quoting. m4_defun([_LT_PREPARE_SED_QUOTE_VARS], [# Backslashify metacharacters that are still active within # double-quoted strings. sed_quote_subst='s/\([["`$\\]]\)/\\\1/g' # Same as above, but do not quote variable references. double_quote_subst='s/\([["`\\]]\)/\\\1/g' # Sed substitution to delay expansion of an escaped shell variable in a # double_quote_subst'ed string. delay_variable_subst='s/\\\\\\\\\\\$/\\\\\\$/g' # Sed substitution to delay expansion of an escaped single quote. delay_single_quote_subst='s/'\''/'\'\\\\\\\'\''/g' # Sed substitution to avoid accidental globbing in evaled expressions no_glob_subst='s/\*/\\\*/g' ]) # _LT_PROG_LTMAIN # --------------- # Note that this code is called both from `configure', and `config.status' # now that we use AC_CONFIG_COMMANDS to generate libtool. Notably, # `config.status' has no value for ac_aux_dir unless we are using Automake, # so we pass a copy along to make sure it has a sensible value anyway. m4_defun([_LT_PROG_LTMAIN], [m4_ifdef([AC_REQUIRE_AUX_FILE], [AC_REQUIRE_AUX_FILE([ltmain.sh])])dnl _LT_CONFIG_LIBTOOL_INIT([ac_aux_dir='$ac_aux_dir']) ltmain="$ac_aux_dir/ltmain.sh" ])# _LT_PROG_LTMAIN ## ------------------------------------- ## ## Accumulate code for creating libtool. ## ## ------------------------------------- ## # So that we can recreate a full libtool script including additional # tags, we accumulate the chunks of code to send to AC_CONFIG_COMMANDS # in macros and then make a single call at the end using the `libtool' # label. # _LT_CONFIG_LIBTOOL_INIT([INIT-COMMANDS]) # ---------------------------------------- # Register INIT-COMMANDS to be passed to AC_CONFIG_COMMANDS later. m4_define([_LT_CONFIG_LIBTOOL_INIT], [m4_ifval([$1], [m4_append([_LT_OUTPUT_LIBTOOL_INIT], [$1 ])])]) # Initialize. m4_define([_LT_OUTPUT_LIBTOOL_INIT]) # _LT_CONFIG_LIBTOOL([COMMANDS]) # ------------------------------ # Register COMMANDS to be passed to AC_CONFIG_COMMANDS later. m4_define([_LT_CONFIG_LIBTOOL], [m4_ifval([$1], [m4_append([_LT_OUTPUT_LIBTOOL_COMMANDS], [$1 ])])]) # Initialize. m4_define([_LT_OUTPUT_LIBTOOL_COMMANDS]) # _LT_CONFIG_SAVE_COMMANDS([COMMANDS], [INIT_COMMANDS]) # ----------------------------------------------------- m4_defun([_LT_CONFIG_SAVE_COMMANDS], [_LT_CONFIG_LIBTOOL([$1]) _LT_CONFIG_LIBTOOL_INIT([$2]) ]) # _LT_FORMAT_COMMENT([COMMENT]) # ----------------------------- # Add leading comment marks to the start of each line, and a trailing # full-stop to the whole comment if one is not present already. m4_define([_LT_FORMAT_COMMENT], [m4_ifval([$1], [ m4_bpatsubst([m4_bpatsubst([$1], [^ *], [# ])], [['`$\]], [\\\&])]m4_bmatch([$1], [[!?.]$], [], [.]) )]) ## ------------------------ ## ## FIXME: Eliminate VARNAME ## ## ------------------------ ## # _LT_DECL([CONFIGNAME], VARNAME, VALUE, [DESCRIPTION], [IS-TAGGED?]) # ------------------------------------------------------------------- # CONFIGNAME is the name given to the value in the libtool script. # VARNAME is the (base) name used in the configure script. # VALUE may be 0, 1 or 2 for a computed quote escaped value based on # VARNAME. Any other value will be used directly. m4_define([_LT_DECL], [lt_if_append_uniq([lt_decl_varnames], [$2], [, ], [lt_dict_add_subkey([lt_decl_dict], [$2], [libtool_name], [m4_ifval([$1], [$1], [$2])]) lt_dict_add_subkey([lt_decl_dict], [$2], [value], [$3]) m4_ifval([$4], [lt_dict_add_subkey([lt_decl_dict], [$2], [description], [$4])]) lt_dict_add_subkey([lt_decl_dict], [$2], [tagged?], [m4_ifval([$5], [yes], [no])])]) ]) # _LT_TAGDECL([CONFIGNAME], VARNAME, VALUE, [DESCRIPTION]) # -------------------------------------------------------- m4_define([_LT_TAGDECL], [_LT_DECL([$1], [$2], [$3], [$4], [yes])]) # lt_decl_tag_varnames([SEPARATOR], [VARNAME1...]) # ------------------------------------------------ m4_define([lt_decl_tag_varnames], [_lt_decl_filter([tagged?], [yes], $@)]) # _lt_decl_filter(SUBKEY, VALUE, [SEPARATOR], [VARNAME1..]) # --------------------------------------------------------- m4_define([_lt_decl_filter], [m4_case([$#], [0], [m4_fatal([$0: too few arguments: $#])], [1], [m4_fatal([$0: too few arguments: $#: $1])], [2], [lt_dict_filter([lt_decl_dict], [$1], [$2], [], lt_decl_varnames)], [3], [lt_dict_filter([lt_decl_dict], [$1], [$2], [$3], lt_decl_varnames)], [lt_dict_filter([lt_decl_dict], $@)])[]dnl ]) # lt_decl_quote_varnames([SEPARATOR], [VARNAME1...]) # -------------------------------------------------- m4_define([lt_decl_quote_varnames], [_lt_decl_filter([value], [1], $@)]) # lt_decl_dquote_varnames([SEPARATOR], [VARNAME1...]) # --------------------------------------------------- m4_define([lt_decl_dquote_varnames], [_lt_decl_filter([value], [2], $@)]) # lt_decl_varnames_tagged([SEPARATOR], [VARNAME1...]) # --------------------------------------------------- m4_define([lt_decl_varnames_tagged], [m4_assert([$# <= 2])dnl _$0(m4_quote(m4_default([$1], [[, ]])), m4_ifval([$2], [[$2]], [m4_dquote(lt_decl_tag_varnames)]), m4_split(m4_normalize(m4_quote(_LT_TAGS)), [ ]))]) m4_define([_lt_decl_varnames_tagged], [m4_ifval([$3], [lt_combine([$1], [$2], [_], $3)])]) # lt_decl_all_varnames([SEPARATOR], [VARNAME1...]) # ------------------------------------------------ m4_define([lt_decl_all_varnames], [_$0(m4_quote(m4_default([$1], [[, ]])), m4_if([$2], [], m4_quote(lt_decl_varnames), m4_quote(m4_shift($@))))[]dnl ]) m4_define([_lt_decl_all_varnames], [lt_join($@, lt_decl_varnames_tagged([$1], lt_decl_tag_varnames([[, ]], m4_shift($@))))dnl ]) # _LT_CONFIG_STATUS_DECLARE([VARNAME]) # ------------------------------------ # Quote a variable value, and forward it to `config.status' so that its # declaration there will have the same value as in `configure'. VARNAME # must have a single quote delimited value for this to work. m4_define([_LT_CONFIG_STATUS_DECLARE], [$1='`$ECHO "$][$1" | $SED "$delay_single_quote_subst"`']) # _LT_CONFIG_STATUS_DECLARATIONS # ------------------------------ # We delimit libtool config variables with single quotes, so when # we write them to config.status, we have to be sure to quote all # embedded single quotes properly. In configure, this macro expands # each variable declared with _LT_DECL (and _LT_TAGDECL) into: # # ='`$ECHO "$" | $SED "$delay_single_quote_subst"`' m4_defun([_LT_CONFIG_STATUS_DECLARATIONS], [m4_foreach([_lt_var], m4_quote(lt_decl_all_varnames), [m4_n([_LT_CONFIG_STATUS_DECLARE(_lt_var)])])]) # _LT_LIBTOOL_TAGS # ---------------- # Output comment and list of tags supported by the script m4_defun([_LT_LIBTOOL_TAGS], [_LT_FORMAT_COMMENT([The names of the tagged configurations supported by this script])dnl available_tags="_LT_TAGS"dnl ]) # _LT_LIBTOOL_DECLARE(VARNAME, [TAG]) # ----------------------------------- # Extract the dictionary values for VARNAME (optionally with TAG) and # expand to a commented shell variable setting: # # # Some comment about what VAR is for. # visible_name=$lt_internal_name m4_define([_LT_LIBTOOL_DECLARE], [_LT_FORMAT_COMMENT(m4_quote(lt_dict_fetch([lt_decl_dict], [$1], [description])))[]dnl m4_pushdef([_libtool_name], m4_quote(lt_dict_fetch([lt_decl_dict], [$1], [libtool_name])))[]dnl m4_case(m4_quote(lt_dict_fetch([lt_decl_dict], [$1], [value])), [0], [_libtool_name=[$]$1], [1], [_libtool_name=$lt_[]$1], [2], [_libtool_name=$lt_[]$1], [_libtool_name=lt_dict_fetch([lt_decl_dict], [$1], [value])])[]dnl m4_ifval([$2], [_$2])[]m4_popdef([_libtool_name])[]dnl ]) # _LT_LIBTOOL_CONFIG_VARS # ----------------------- # Produce commented declarations of non-tagged libtool config variables # suitable for insertion in the LIBTOOL CONFIG section of the `libtool' # script. Tagged libtool config variables (even for the LIBTOOL CONFIG # section) are produced by _LT_LIBTOOL_TAG_VARS. m4_defun([_LT_LIBTOOL_CONFIG_VARS], [m4_foreach([_lt_var], m4_quote(_lt_decl_filter([tagged?], [no], [], lt_decl_varnames)), [m4_n([_LT_LIBTOOL_DECLARE(_lt_var)])])]) # _LT_LIBTOOL_TAG_VARS(TAG) # ------------------------- m4_define([_LT_LIBTOOL_TAG_VARS], [m4_foreach([_lt_var], m4_quote(lt_decl_tag_varnames), [m4_n([_LT_LIBTOOL_DECLARE(_lt_var, [$1])])])]) # _LT_TAGVAR(VARNAME, [TAGNAME]) # ------------------------------ m4_define([_LT_TAGVAR], [m4_ifval([$2], [$1_$2], [$1])]) # _LT_CONFIG_COMMANDS # ------------------- # Send accumulated output to $CONFIG_STATUS. Thanks to the lists of # variables for single and double quote escaping we saved from calls # to _LT_DECL, we can put quote escaped variables declarations # into `config.status', and then the shell code to quote escape them in # for loops in `config.status'. Finally, any additional code accumulated # from calls to _LT_CONFIG_LIBTOOL_INIT is expanded. m4_defun([_LT_CONFIG_COMMANDS], [AC_PROVIDE_IFELSE([LT_OUTPUT], dnl If the libtool generation code has been placed in $CONFIG_LT, dnl instead of duplicating it all over again into config.status, dnl then we will have config.status run $CONFIG_LT later, so it dnl needs to know what name is stored there: [AC_CONFIG_COMMANDS([libtool], [$SHELL $CONFIG_LT || AS_EXIT(1)], [CONFIG_LT='$CONFIG_LT'])], dnl If the libtool generation code is destined for config.status, dnl expand the accumulated commands and init code now: [AC_CONFIG_COMMANDS([libtool], [_LT_OUTPUT_LIBTOOL_COMMANDS], [_LT_OUTPUT_LIBTOOL_COMMANDS_INIT])]) ])#_LT_CONFIG_COMMANDS # Initialize. m4_define([_LT_OUTPUT_LIBTOOL_COMMANDS_INIT], [ # The HP-UX ksh and POSIX shell print the target directory to stdout # if CDPATH is set. (unset CDPATH) >/dev/null 2>&1 && unset CDPATH sed_quote_subst='$sed_quote_subst' double_quote_subst='$double_quote_subst' delay_variable_subst='$delay_variable_subst' _LT_CONFIG_STATUS_DECLARATIONS LTCC='$LTCC' LTCFLAGS='$LTCFLAGS' compiler='$compiler_DEFAULT' # A function that is used when there is no print builtin or printf. func_fallback_echo () { eval 'cat <<_LTECHO_EOF \$[]1 _LTECHO_EOF' } # Quote evaled strings. for var in lt_decl_all_varnames([[ \ ]], lt_decl_quote_varnames); do case \`eval \\\\\$ECHO \\\\""\\\\\$\$var"\\\\"\` in *[[\\\\\\\`\\"\\\$]]*) eval "lt_\$var=\\\\\\"\\\`\\\$ECHO \\"\\\$\$var\\" | \\\$SED \\"\\\$sed_quote_subst\\"\\\`\\\\\\"" ;; *) eval "lt_\$var=\\\\\\"\\\$\$var\\\\\\"" ;; esac done # Double-quote double-evaled strings. for var in lt_decl_all_varnames([[ \ ]], lt_decl_dquote_varnames); do case \`eval \\\\\$ECHO \\\\""\\\\\$\$var"\\\\"\` in *[[\\\\\\\`\\"\\\$]]*) eval "lt_\$var=\\\\\\"\\\`\\\$ECHO \\"\\\$\$var\\" | \\\$SED -e \\"\\\$double_quote_subst\\" -e \\"\\\$sed_quote_subst\\" -e \\"\\\$delay_variable_subst\\"\\\`\\\\\\"" ;; *) eval "lt_\$var=\\\\\\"\\\$\$var\\\\\\"" ;; esac done _LT_OUTPUT_LIBTOOL_INIT ]) # _LT_GENERATED_FILE_INIT(FILE, [COMMENT]) # ------------------------------------ # Generate a child script FILE with all initialization necessary to # reuse the environment learned by the parent script, and make the # file executable. If COMMENT is supplied, it is inserted after the # `#!' sequence but before initialization text begins. After this # macro, additional text can be appended to FILE to form the body of # the child script. The macro ends with non-zero status if the # file could not be fully written (such as if the disk is full). m4_ifdef([AS_INIT_GENERATED], [m4_defun([_LT_GENERATED_FILE_INIT],[AS_INIT_GENERATED($@)])], [m4_defun([_LT_GENERATED_FILE_INIT], [m4_require([AS_PREPARE])]dnl [m4_pushdef([AS_MESSAGE_LOG_FD])]dnl [lt_write_fail=0 cat >$1 <<_ASEOF || lt_write_fail=1 #! $SHELL # Generated by $as_me. $2 SHELL=\${CONFIG_SHELL-$SHELL} export SHELL _ASEOF cat >>$1 <<\_ASEOF || lt_write_fail=1 AS_SHELL_SANITIZE _AS_PREPARE exec AS_MESSAGE_FD>&1 _ASEOF test $lt_write_fail = 0 && chmod +x $1[]dnl m4_popdef([AS_MESSAGE_LOG_FD])])])# _LT_GENERATED_FILE_INIT # LT_OUTPUT # --------- # This macro allows early generation of the libtool script (before # AC_OUTPUT is called), incase it is used in configure for compilation # tests. AC_DEFUN([LT_OUTPUT], [: ${CONFIG_LT=./config.lt} AC_MSG_NOTICE([creating $CONFIG_LT]) _LT_GENERATED_FILE_INIT(["$CONFIG_LT"], [# Run this file to recreate a libtool stub with the current configuration.]) cat >>"$CONFIG_LT" <<\_LTEOF lt_cl_silent=false exec AS_MESSAGE_LOG_FD>>config.log { echo AS_BOX([Running $as_me.]) } >&AS_MESSAGE_LOG_FD lt_cl_help="\ \`$as_me' creates a local libtool stub from the current configuration, for use in further configure time tests before the real libtool is generated. Usage: $[0] [[OPTIONS]] -h, --help print this help, then exit -V, --version print version number, then exit -q, --quiet do not print progress messages -d, --debug don't remove temporary files Report bugs to ." lt_cl_version="\ m4_ifset([AC_PACKAGE_NAME], [AC_PACKAGE_NAME ])config.lt[]dnl m4_ifset([AC_PACKAGE_VERSION], [ AC_PACKAGE_VERSION]) configured by $[0], generated by m4_PACKAGE_STRING. Copyright (C) 2011 Free Software Foundation, Inc. This config.lt script is free software; the Free Software Foundation gives unlimited permision to copy, distribute and modify it." while test $[#] != 0 do case $[1] in --version | --v* | -V ) echo "$lt_cl_version"; exit 0 ;; --help | --h* | -h ) echo "$lt_cl_help"; exit 0 ;; --debug | --d* | -d ) debug=: ;; --quiet | --q* | --silent | --s* | -q ) lt_cl_silent=: ;; -*) AC_MSG_ERROR([unrecognized option: $[1] Try \`$[0] --help' for more information.]) ;; *) AC_MSG_ERROR([unrecognized argument: $[1] Try \`$[0] --help' for more information.]) ;; esac shift done if $lt_cl_silent; then exec AS_MESSAGE_FD>/dev/null fi _LTEOF cat >>"$CONFIG_LT" <<_LTEOF _LT_OUTPUT_LIBTOOL_COMMANDS_INIT _LTEOF cat >>"$CONFIG_LT" <<\_LTEOF AC_MSG_NOTICE([creating $ofile]) _LT_OUTPUT_LIBTOOL_COMMANDS AS_EXIT(0) _LTEOF chmod +x "$CONFIG_LT" # configure is writing to config.log, but config.lt does its own redirection, # appending to config.log, which fails on DOS, as config.log is still kept # open by configure. Here we exec the FD to /dev/null, effectively closing # config.log, so it can be properly (re)opened and appended to by config.lt. lt_cl_success=: test "$silent" = yes && lt_config_lt_args="$lt_config_lt_args --quiet" exec AS_MESSAGE_LOG_FD>/dev/null $SHELL "$CONFIG_LT" $lt_config_lt_args || lt_cl_success=false exec AS_MESSAGE_LOG_FD>>config.log $lt_cl_success || AS_EXIT(1) ])# LT_OUTPUT # _LT_CONFIG(TAG) # --------------- # If TAG is the built-in tag, create an initial libtool script with a # default configuration from the untagged config vars. Otherwise add code # to config.status for appending the configuration named by TAG from the # matching tagged config vars. m4_defun([_LT_CONFIG], [m4_require([_LT_FILEUTILS_DEFAULTS])dnl _LT_CONFIG_SAVE_COMMANDS([ m4_define([_LT_TAG], m4_if([$1], [], [C], [$1]))dnl m4_if(_LT_TAG, [C], [ # See if we are running on zsh, and set the options which allow our # commands through without removal of \ escapes. if test -n "${ZSH_VERSION+set}" ; then setopt NO_GLOB_SUBST fi cfgfile="${ofile}T" trap "$RM \"$cfgfile\"; exit 1" 1 2 15 $RM "$cfgfile" cat <<_LT_EOF >> "$cfgfile" #! $SHELL # `$ECHO "$ofile" | sed 's%^.*/%%'` - Provide generalized library-building support services. # Generated automatically by $as_me ($PACKAGE$TIMESTAMP) $VERSION # Libtool was configured on host `(hostname || uname -n) 2>/dev/null | sed 1q`: # NOTE: Changes made to this file will be lost: look at ltmain.sh. # _LT_COPYING _LT_LIBTOOL_TAGS # ### BEGIN LIBTOOL CONFIG _LT_LIBTOOL_CONFIG_VARS _LT_LIBTOOL_TAG_VARS # ### END LIBTOOL CONFIG _LT_EOF case $host_os in aix3*) cat <<\_LT_EOF >> "$cfgfile" # AIX sometimes has problems with the GCC collect2 program. For some # reason, if we set the COLLECT_NAMES environment variable, the problems # vanish in a puff of smoke. if test "X${COLLECT_NAMES+set}" != Xset; then COLLECT_NAMES= export COLLECT_NAMES fi _LT_EOF ;; esac _LT_PROG_LTMAIN # We use sed instead of cat because bash on DJGPP gets confused if # if finds mixed CR/LF and LF-only lines. Since sed operates in # text mode, it properly converts lines to CR/LF. This bash problem # is reportedly fixed, but why not run on old versions too? sed '$q' "$ltmain" >> "$cfgfile" \ || (rm -f "$cfgfile"; exit 1) _LT_PROG_REPLACE_SHELLFNS mv -f "$cfgfile" "$ofile" || (rm -f "$ofile" && cp "$cfgfile" "$ofile" && rm -f "$cfgfile") chmod +x "$ofile" ], [cat <<_LT_EOF >> "$ofile" dnl Unfortunately we have to use $1 here, since _LT_TAG is not expanded dnl in a comment (ie after a #). # ### BEGIN LIBTOOL TAG CONFIG: $1 _LT_LIBTOOL_TAG_VARS(_LT_TAG) # ### END LIBTOOL TAG CONFIG: $1 _LT_EOF ])dnl /m4_if ], [m4_if([$1], [], [ PACKAGE='$PACKAGE' VERSION='$VERSION' TIMESTAMP='$TIMESTAMP' RM='$RM' ofile='$ofile'], []) ])dnl /_LT_CONFIG_SAVE_COMMANDS ])# _LT_CONFIG # LT_SUPPORTED_TAG(TAG) # --------------------- # Trace this macro to discover what tags are supported by the libtool # --tag option, using: # autoconf --trace 'LT_SUPPORTED_TAG:$1' AC_DEFUN([LT_SUPPORTED_TAG], []) # C support is built-in for now m4_define([_LT_LANG_C_enabled], []) m4_define([_LT_TAGS], []) # LT_LANG(LANG) # ------------- # Enable libtool support for the given language if not already enabled. AC_DEFUN([LT_LANG], [AC_BEFORE([$0], [LT_OUTPUT])dnl m4_case([$1], [C], [_LT_LANG(C)], [C++], [_LT_LANG(CXX)], [Go], [_LT_LANG(GO)], [Java], [_LT_LANG(GCJ)], [Fortran 77], [_LT_LANG(F77)], [Fortran], [_LT_LANG(FC)], [Windows Resource], [_LT_LANG(RC)], [m4_ifdef([_LT_LANG_]$1[_CONFIG], [_LT_LANG($1)], [m4_fatal([$0: unsupported language: "$1"])])])dnl ])# LT_LANG # _LT_LANG(LANGNAME) # ------------------ m4_defun([_LT_LANG], [m4_ifdef([_LT_LANG_]$1[_enabled], [], [LT_SUPPORTED_TAG([$1])dnl m4_append([_LT_TAGS], [$1 ])dnl m4_define([_LT_LANG_]$1[_enabled], [])dnl _LT_LANG_$1_CONFIG($1)])dnl ])# _LT_LANG m4_ifndef([AC_PROG_GO], [ ############################################################ # NOTE: This macro has been submitted for inclusion into # # GNU Autoconf as AC_PROG_GO. When it is available in # # a released version of Autoconf we should remove this # # macro and use it instead. # ############################################################ m4_defun([AC_PROG_GO], [AC_LANG_PUSH(Go)dnl AC_ARG_VAR([GOC], [Go compiler command])dnl AC_ARG_VAR([GOFLAGS], [Go compiler flags])dnl _AC_ARG_VAR_LDFLAGS()dnl AC_CHECK_TOOL(GOC, gccgo) if test -z "$GOC"; then if test -n "$ac_tool_prefix"; then AC_CHECK_PROG(GOC, [${ac_tool_prefix}gccgo], [${ac_tool_prefix}gccgo]) fi fi if test -z "$GOC"; then AC_CHECK_PROG(GOC, gccgo, gccgo, false) fi ])#m4_defun ])#m4_ifndef # _LT_LANG_DEFAULT_CONFIG # ----------------------- m4_defun([_LT_LANG_DEFAULT_CONFIG], [AC_PROVIDE_IFELSE([AC_PROG_CXX], [LT_LANG(CXX)], [m4_define([AC_PROG_CXX], defn([AC_PROG_CXX])[LT_LANG(CXX)])]) AC_PROVIDE_IFELSE([AC_PROG_F77], [LT_LANG(F77)], [m4_define([AC_PROG_F77], defn([AC_PROG_F77])[LT_LANG(F77)])]) AC_PROVIDE_IFELSE([AC_PROG_FC], [LT_LANG(FC)], [m4_define([AC_PROG_FC], defn([AC_PROG_FC])[LT_LANG(FC)])]) dnl The call to [A][M_PROG_GCJ] is quoted like that to stop aclocal dnl pulling things in needlessly. AC_PROVIDE_IFELSE([AC_PROG_GCJ], [LT_LANG(GCJ)], [AC_PROVIDE_IFELSE([A][M_PROG_GCJ], [LT_LANG(GCJ)], [AC_PROVIDE_IFELSE([LT_PROG_GCJ], [LT_LANG(GCJ)], [m4_ifdef([AC_PROG_GCJ], [m4_define([AC_PROG_GCJ], defn([AC_PROG_GCJ])[LT_LANG(GCJ)])]) m4_ifdef([A][M_PROG_GCJ], [m4_define([A][M_PROG_GCJ], defn([A][M_PROG_GCJ])[LT_LANG(GCJ)])]) m4_ifdef([LT_PROG_GCJ], [m4_define([LT_PROG_GCJ], defn([LT_PROG_GCJ])[LT_LANG(GCJ)])])])])]) AC_PROVIDE_IFELSE([AC_PROG_GO], [LT_LANG(GO)], [m4_define([AC_PROG_GO], defn([AC_PROG_GO])[LT_LANG(GO)])]) AC_PROVIDE_IFELSE([LT_PROG_RC], [LT_LANG(RC)], [m4_define([LT_PROG_RC], defn([LT_PROG_RC])[LT_LANG(RC)])]) ])# _LT_LANG_DEFAULT_CONFIG # Obsolete macros: AU_DEFUN([AC_LIBTOOL_CXX], [LT_LANG(C++)]) AU_DEFUN([AC_LIBTOOL_F77], [LT_LANG(Fortran 77)]) AU_DEFUN([AC_LIBTOOL_FC], [LT_LANG(Fortran)]) AU_DEFUN([AC_LIBTOOL_GCJ], [LT_LANG(Java)]) AU_DEFUN([AC_LIBTOOL_RC], [LT_LANG(Windows Resource)]) dnl aclocal-1.4 backwards compatibility: dnl AC_DEFUN([AC_LIBTOOL_CXX], []) dnl AC_DEFUN([AC_LIBTOOL_F77], []) dnl AC_DEFUN([AC_LIBTOOL_FC], []) dnl AC_DEFUN([AC_LIBTOOL_GCJ], []) dnl AC_DEFUN([AC_LIBTOOL_RC], []) # _LT_TAG_COMPILER # ---------------- m4_defun([_LT_TAG_COMPILER], [AC_REQUIRE([AC_PROG_CC])dnl _LT_DECL([LTCC], [CC], [1], [A C compiler])dnl _LT_DECL([LTCFLAGS], [CFLAGS], [1], [LTCC compiler flags])dnl _LT_TAGDECL([CC], [compiler], [1], [A language specific compiler])dnl _LT_TAGDECL([with_gcc], [GCC], [0], [Is the compiler the GNU compiler?])dnl # If no C compiler was specified, use CC. LTCC=${LTCC-"$CC"} # If no C compiler flags were specified, use CFLAGS. LTCFLAGS=${LTCFLAGS-"$CFLAGS"} # Allow CC to be a program name with arguments. compiler=$CC ])# _LT_TAG_COMPILER # _LT_COMPILER_BOILERPLATE # ------------------------ # Check for compiler boilerplate output or warnings with # the simple compiler test code. m4_defun([_LT_COMPILER_BOILERPLATE], [m4_require([_LT_DECL_SED])dnl ac_outfile=conftest.$ac_objext echo "$lt_simple_compile_test_code" >conftest.$ac_ext eval "$ac_compile" 2>&1 >/dev/null | $SED '/^$/d; /^ *+/d' >conftest.err _lt_compiler_boilerplate=`cat conftest.err` $RM conftest* ])# _LT_COMPILER_BOILERPLATE # _LT_LINKER_BOILERPLATE # ---------------------- # Check for linker boilerplate output or warnings with # the simple link test code. m4_defun([_LT_LINKER_BOILERPLATE], [m4_require([_LT_DECL_SED])dnl ac_outfile=conftest.$ac_objext echo "$lt_simple_link_test_code" >conftest.$ac_ext eval "$ac_link" 2>&1 >/dev/null | $SED '/^$/d; /^ *+/d' >conftest.err _lt_linker_boilerplate=`cat conftest.err` $RM -r conftest* ])# _LT_LINKER_BOILERPLATE # _LT_REQUIRED_DARWIN_CHECKS # ------------------------- m4_defun_once([_LT_REQUIRED_DARWIN_CHECKS],[ case $host_os in rhapsody* | darwin*) AC_CHECK_TOOL([DSYMUTIL], [dsymutil], [:]) AC_CHECK_TOOL([NMEDIT], [nmedit], [:]) AC_CHECK_TOOL([LIPO], [lipo], [:]) AC_CHECK_TOOL([OTOOL], [otool], [:]) AC_CHECK_TOOL([OTOOL64], [otool64], [:]) _LT_DECL([], [DSYMUTIL], [1], [Tool to manipulate archived DWARF debug symbol files on Mac OS X]) _LT_DECL([], [NMEDIT], [1], [Tool to change global to local symbols on Mac OS X]) _LT_DECL([], [LIPO], [1], [Tool to manipulate fat objects and archives on Mac OS X]) _LT_DECL([], [OTOOL], [1], [ldd/readelf like tool for Mach-O binaries on Mac OS X]) _LT_DECL([], [OTOOL64], [1], [ldd/readelf like tool for 64 bit Mach-O binaries on Mac OS X 10.4]) AC_CACHE_CHECK([for -single_module linker flag],[lt_cv_apple_cc_single_mod], [lt_cv_apple_cc_single_mod=no if test -z "${LT_MULTI_MODULE}"; then # By default we will add the -single_module flag. You can override # by either setting the environment variable LT_MULTI_MODULE # non-empty at configure time, or by adding -multi_module to the # link flags. rm -rf libconftest.dylib* echo "int foo(void){return 1;}" > conftest.c echo "$LTCC $LTCFLAGS $LDFLAGS -o libconftest.dylib \ -dynamiclib -Wl,-single_module conftest.c" >&AS_MESSAGE_LOG_FD $LTCC $LTCFLAGS $LDFLAGS -o libconftest.dylib \ -dynamiclib -Wl,-single_module conftest.c 2>conftest.err _lt_result=$? # If there is a non-empty error log, and "single_module" # appears in it, assume the flag caused a linker warning if test -s conftest.err && $GREP single_module conftest.err; then cat conftest.err >&AS_MESSAGE_LOG_FD # Otherwise, if the output was created with a 0 exit code from # the compiler, it worked. elif test -f libconftest.dylib && test $_lt_result -eq 0; then lt_cv_apple_cc_single_mod=yes else cat conftest.err >&AS_MESSAGE_LOG_FD fi rm -rf libconftest.dylib* rm -f conftest.* fi]) AC_CACHE_CHECK([for -exported_symbols_list linker flag], [lt_cv_ld_exported_symbols_list], [lt_cv_ld_exported_symbols_list=no save_LDFLAGS=$LDFLAGS echo "_main" > conftest.sym LDFLAGS="$LDFLAGS -Wl,-exported_symbols_list,conftest.sym" AC_LINK_IFELSE([AC_LANG_PROGRAM([],[])], [lt_cv_ld_exported_symbols_list=yes], [lt_cv_ld_exported_symbols_list=no]) LDFLAGS="$save_LDFLAGS" ]) AC_CACHE_CHECK([for -force_load linker flag],[lt_cv_ld_force_load], [lt_cv_ld_force_load=no cat > conftest.c << _LT_EOF int forced_loaded() { return 2;} _LT_EOF echo "$LTCC $LTCFLAGS -c -o conftest.o conftest.c" >&AS_MESSAGE_LOG_FD $LTCC $LTCFLAGS -c -o conftest.o conftest.c 2>&AS_MESSAGE_LOG_FD echo "$AR cru libconftest.a conftest.o" >&AS_MESSAGE_LOG_FD $AR cru libconftest.a conftest.o 2>&AS_MESSAGE_LOG_FD echo "$RANLIB libconftest.a" >&AS_MESSAGE_LOG_FD $RANLIB libconftest.a 2>&AS_MESSAGE_LOG_FD cat > conftest.c << _LT_EOF int main() { return 0;} _LT_EOF echo "$LTCC $LTCFLAGS $LDFLAGS -o conftest conftest.c -Wl,-force_load,./libconftest.a" >&AS_MESSAGE_LOG_FD $LTCC $LTCFLAGS $LDFLAGS -o conftest conftest.c -Wl,-force_load,./libconftest.a 2>conftest.err _lt_result=$? if test -s conftest.err && $GREP force_load conftest.err; then cat conftest.err >&AS_MESSAGE_LOG_FD elif test -f conftest && test $_lt_result -eq 0 && $GREP forced_load conftest >/dev/null 2>&1 ; then lt_cv_ld_force_load=yes else cat conftest.err >&AS_MESSAGE_LOG_FD fi rm -f conftest.err libconftest.a conftest conftest.c rm -rf conftest.dSYM ]) case $host_os in rhapsody* | darwin1.[[012]]) _lt_dar_allow_undefined='${wl}-undefined ${wl}suppress' ;; darwin1.*) _lt_dar_allow_undefined='${wl}-flat_namespace ${wl}-undefined ${wl}suppress' ;; darwin*) # darwin 5.x on # if running on 10.5 or later, the deployment target defaults # to the OS version, if on x86, and 10.4, the deployment # target defaults to 10.4. Don't you love it? case ${MACOSX_DEPLOYMENT_TARGET-10.0},$host in 10.0,*86*-darwin8*|10.0,*-darwin[[91]]*) _lt_dar_allow_undefined='${wl}-undefined ${wl}dynamic_lookup' ;; 10.[[012]]*) _lt_dar_allow_undefined='${wl}-flat_namespace ${wl}-undefined ${wl}suppress' ;; 10.*) _lt_dar_allow_undefined='${wl}-undefined ${wl}dynamic_lookup' ;; esac ;; esac if test "$lt_cv_apple_cc_single_mod" = "yes"; then _lt_dar_single_mod='$single_module' fi if test "$lt_cv_ld_exported_symbols_list" = "yes"; then _lt_dar_export_syms=' ${wl}-exported_symbols_list,$output_objdir/${libname}-symbols.expsym' else _lt_dar_export_syms='~$NMEDIT -s $output_objdir/${libname}-symbols.expsym ${lib}' fi if test "$DSYMUTIL" != ":" && test "$lt_cv_ld_force_load" = "no"; then _lt_dsymutil='~$DSYMUTIL $lib || :' else _lt_dsymutil= fi ;; esac ]) # _LT_DARWIN_LINKER_FEATURES([TAG]) # --------------------------------- # Checks for linker and compiler features on darwin m4_defun([_LT_DARWIN_LINKER_FEATURES], [ m4_require([_LT_REQUIRED_DARWIN_CHECKS]) _LT_TAGVAR(archive_cmds_need_lc, $1)=no _LT_TAGVAR(hardcode_direct, $1)=no _LT_TAGVAR(hardcode_automatic, $1)=yes _LT_TAGVAR(hardcode_shlibpath_var, $1)=unsupported if test "$lt_cv_ld_force_load" = "yes"; then _LT_TAGVAR(whole_archive_flag_spec, $1)='`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience ${wl}-force_load,$conv\"; done; func_echo_all \"$new_convenience\"`' m4_case([$1], [F77], [_LT_TAGVAR(compiler_needs_object, $1)=yes], [FC], [_LT_TAGVAR(compiler_needs_object, $1)=yes]) else _LT_TAGVAR(whole_archive_flag_spec, $1)='' fi _LT_TAGVAR(link_all_deplibs, $1)=yes _LT_TAGVAR(allow_undefined_flag, $1)="$_lt_dar_allow_undefined" case $cc_basename in ifort*) _lt_dar_can_shared=yes ;; *) _lt_dar_can_shared=$GCC ;; esac if test "$_lt_dar_can_shared" = "yes"; then output_verbose_link_cmd=func_echo_all _LT_TAGVAR(archive_cmds, $1)="\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$libobjs \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring $_lt_dar_single_mod${_lt_dsymutil}" _LT_TAGVAR(module_cmds, $1)="\$CC \$allow_undefined_flag -o \$lib -bundle \$libobjs \$deplibs \$compiler_flags${_lt_dsymutil}" _LT_TAGVAR(archive_expsym_cmds, $1)="sed 's,^,_,' < \$export_symbols > \$output_objdir/\${libname}-symbols.expsym~\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$libobjs \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring ${_lt_dar_single_mod}${_lt_dar_export_syms}${_lt_dsymutil}" _LT_TAGVAR(module_expsym_cmds, $1)="sed -e 's,^,_,' < \$export_symbols > \$output_objdir/\${libname}-symbols.expsym~\$CC \$allow_undefined_flag -o \$lib -bundle \$libobjs \$deplibs \$compiler_flags${_lt_dar_export_syms}${_lt_dsymutil}" m4_if([$1], [CXX], [ if test "$lt_cv_apple_cc_single_mod" != "yes"; then _LT_TAGVAR(archive_cmds, $1)="\$CC -r -keep_private_externs -nostdlib -o \${lib}-master.o \$libobjs~\$CC -dynamiclib \$allow_undefined_flag -o \$lib \${lib}-master.o \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring${_lt_dsymutil}" _LT_TAGVAR(archive_expsym_cmds, $1)="sed 's,^,_,' < \$export_symbols > \$output_objdir/\${libname}-symbols.expsym~\$CC -r -keep_private_externs -nostdlib -o \${lib}-master.o \$libobjs~\$CC -dynamiclib \$allow_undefined_flag -o \$lib \${lib}-master.o \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring${_lt_dar_export_syms}${_lt_dsymutil}" fi ],[]) else _LT_TAGVAR(ld_shlibs, $1)=no fi ]) # _LT_SYS_MODULE_PATH_AIX([TAGNAME]) # ---------------------------------- # Links a minimal program and checks the executable # for the system default hardcoded library path. In most cases, # this is /usr/lib:/lib, but when the MPI compilers are used # the location of the communication and MPI libs are included too. # If we don't find anything, use the default library path according # to the aix ld manual. # Store the results from the different compilers for each TAGNAME. # Allow to override them for all tags through lt_cv_aix_libpath. m4_defun([_LT_SYS_MODULE_PATH_AIX], [m4_require([_LT_DECL_SED])dnl if test "${lt_cv_aix_libpath+set}" = set; then aix_libpath=$lt_cv_aix_libpath else AC_CACHE_VAL([_LT_TAGVAR([lt_cv_aix_libpath_], [$1])], [AC_LINK_IFELSE([AC_LANG_PROGRAM],[ lt_aix_libpath_sed='[ /Import File Strings/,/^$/ { /^0/ { s/^0 *\([^ ]*\) *$/\1/ p } }]' _LT_TAGVAR([lt_cv_aix_libpath_], [$1])=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"` # Check for a 64-bit object if we didn't find anything. if test -z "$_LT_TAGVAR([lt_cv_aix_libpath_], [$1])"; then _LT_TAGVAR([lt_cv_aix_libpath_], [$1])=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"` fi],[]) if test -z "$_LT_TAGVAR([lt_cv_aix_libpath_], [$1])"; then _LT_TAGVAR([lt_cv_aix_libpath_], [$1])="/usr/lib:/lib" fi ]) aix_libpath=$_LT_TAGVAR([lt_cv_aix_libpath_], [$1]) fi ])# _LT_SYS_MODULE_PATH_AIX # _LT_SHELL_INIT(ARG) # ------------------- m4_define([_LT_SHELL_INIT], [m4_divert_text([M4SH-INIT], [$1 ])])# _LT_SHELL_INIT # _LT_PROG_ECHO_BACKSLASH # ----------------------- # Find how we can fake an echo command that does not interpret backslash. # In particular, with Autoconf 2.60 or later we add some code to the start # of the generated configure script which will find a shell with a builtin # printf (which we can use as an echo command). m4_defun([_LT_PROG_ECHO_BACKSLASH], [ECHO='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\' ECHO=$ECHO$ECHO$ECHO$ECHO$ECHO ECHO=$ECHO$ECHO$ECHO$ECHO$ECHO$ECHO AC_MSG_CHECKING([how to print strings]) # Test print first, because it will be a builtin if present. if test "X`( print -r -- -n ) 2>/dev/null`" = X-n && \ test "X`print -r -- $ECHO 2>/dev/null`" = "X$ECHO"; then ECHO='print -r --' elif test "X`printf %s $ECHO 2>/dev/null`" = "X$ECHO"; then ECHO='printf %s\n' else # Use this function as a fallback that always works. func_fallback_echo () { eval 'cat <<_LTECHO_EOF $[]1 _LTECHO_EOF' } ECHO='func_fallback_echo' fi # func_echo_all arg... # Invoke $ECHO with all args, space-separated. func_echo_all () { $ECHO "$*" } case "$ECHO" in printf*) AC_MSG_RESULT([printf]) ;; print*) AC_MSG_RESULT([print -r]) ;; *) AC_MSG_RESULT([cat]) ;; esac m4_ifdef([_AS_DETECT_SUGGESTED], [_AS_DETECT_SUGGESTED([ test -n "${ZSH_VERSION+set}${BASH_VERSION+set}" || ( ECHO='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\' ECHO=$ECHO$ECHO$ECHO$ECHO$ECHO ECHO=$ECHO$ECHO$ECHO$ECHO$ECHO$ECHO PATH=/empty FPATH=/empty; export PATH FPATH test "X`printf %s $ECHO`" = "X$ECHO" \ || test "X`print -r -- $ECHO`" = "X$ECHO" )])]) _LT_DECL([], [SHELL], [1], [Shell to use when invoking shell scripts]) _LT_DECL([], [ECHO], [1], [An echo program that protects backslashes]) ])# _LT_PROG_ECHO_BACKSLASH # _LT_WITH_SYSROOT # ---------------- AC_DEFUN([_LT_WITH_SYSROOT], [AC_MSG_CHECKING([for sysroot]) AC_ARG_WITH([sysroot], [ --with-sysroot[=DIR] Search for dependent libraries within DIR (or the compiler's sysroot if not specified).], [], [with_sysroot=no]) dnl lt_sysroot will always be passed unquoted. We quote it here dnl in case the user passed a directory name. lt_sysroot= case ${with_sysroot} in #( yes) if test "$GCC" = yes; then lt_sysroot=`$CC --print-sysroot 2>/dev/null` fi ;; #( /*) lt_sysroot=`echo "$with_sysroot" | sed -e "$sed_quote_subst"` ;; #( no|'') ;; #( *) AC_MSG_RESULT([${with_sysroot}]) AC_MSG_ERROR([The sysroot must be an absolute path.]) ;; esac AC_MSG_RESULT([${lt_sysroot:-no}]) _LT_DECL([], [lt_sysroot], [0], [The root where to search for ]dnl [dependent libraries, and in which our libraries should be installed.])]) # _LT_ENABLE_LOCK # --------------- m4_defun([_LT_ENABLE_LOCK], [AC_ARG_ENABLE([libtool-lock], [AS_HELP_STRING([--disable-libtool-lock], [avoid locking (might break parallel builds)])]) test "x$enable_libtool_lock" != xno && enable_libtool_lock=yes # Some flags need to be propagated to the compiler or linker for good # libtool support. case $host in ia64-*-hpux*) # Find out which ABI we are using. echo 'int i;' > conftest.$ac_ext if AC_TRY_EVAL(ac_compile); then case `/usr/bin/file conftest.$ac_objext` in *ELF-32*) HPUX_IA64_MODE="32" ;; *ELF-64*) HPUX_IA64_MODE="64" ;; esac fi rm -rf conftest* ;; *-*-irix6*) # Find out which ABI we are using. echo '[#]line '$LINENO' "configure"' > conftest.$ac_ext if AC_TRY_EVAL(ac_compile); then if test "$lt_cv_prog_gnu_ld" = yes; then case `/usr/bin/file conftest.$ac_objext` in *32-bit*) LD="${LD-ld} -melf32bsmip" ;; *N32*) LD="${LD-ld} -melf32bmipn32" ;; *64-bit*) LD="${LD-ld} -melf64bmip" ;; esac else case `/usr/bin/file conftest.$ac_objext` in *32-bit*) LD="${LD-ld} -32" ;; *N32*) LD="${LD-ld} -n32" ;; *64-bit*) LD="${LD-ld} -64" ;; esac fi fi rm -rf conftest* ;; x86_64-*kfreebsd*-gnu|x86_64-*linux*|ppc*-*linux*|powerpc*-*linux*| \ s390*-*linux*|s390*-*tpf*|sparc*-*linux*) # Find out which ABI we are using. echo 'int i;' > conftest.$ac_ext if AC_TRY_EVAL(ac_compile); then case `/usr/bin/file conftest.o` in *32-bit*) case $host in x86_64-*kfreebsd*-gnu) LD="${LD-ld} -m elf_i386_fbsd" ;; x86_64-*linux*) LD="${LD-ld} -m elf_i386" ;; ppc64-*linux*|powerpc64-*linux*) LD="${LD-ld} -m elf32ppclinux" ;; s390x-*linux*) LD="${LD-ld} -m elf_s390" ;; sparc64-*linux*) LD="${LD-ld} -m elf32_sparc" ;; esac ;; *64-bit*) case $host in x86_64-*kfreebsd*-gnu) LD="${LD-ld} -m elf_x86_64_fbsd" ;; x86_64-*linux*) LD="${LD-ld} -m elf_x86_64" ;; ppc*-*linux*|powerpc*-*linux*) LD="${LD-ld} -m elf64ppc" ;; s390*-*linux*|s390*-*tpf*) LD="${LD-ld} -m elf64_s390" ;; sparc*-*linux*) LD="${LD-ld} -m elf64_sparc" ;; esac ;; esac fi rm -rf conftest* ;; *-*-sco3.2v5*) # On SCO OpenServer 5, we need -belf to get full-featured binaries. SAVE_CFLAGS="$CFLAGS" CFLAGS="$CFLAGS -belf" AC_CACHE_CHECK([whether the C compiler needs -belf], lt_cv_cc_needs_belf, [AC_LANG_PUSH(C) AC_LINK_IFELSE([AC_LANG_PROGRAM([[]],[[]])],[lt_cv_cc_needs_belf=yes],[lt_cv_cc_needs_belf=no]) AC_LANG_POP]) if test x"$lt_cv_cc_needs_belf" != x"yes"; then # this is probably gcc 2.8.0, egcs 1.0 or newer; no need for -belf CFLAGS="$SAVE_CFLAGS" fi ;; *-*solaris*) # Find out which ABI we are using. echo 'int i;' > conftest.$ac_ext if AC_TRY_EVAL(ac_compile); then case `/usr/bin/file conftest.o` in *64-bit*) case $lt_cv_prog_gnu_ld in yes*) case $host in i?86-*-solaris*) LD="${LD-ld} -m elf_x86_64" ;; sparc*-*-solaris*) LD="${LD-ld} -m elf64_sparc" ;; esac # GNU ld 2.21 introduced _sol2 emulations. Use them if available. if ${LD-ld} -V | grep _sol2 >/dev/null 2>&1; then LD="${LD-ld}_sol2" fi ;; *) if ${LD-ld} -64 -r -o conftest2.o conftest.o >/dev/null 2>&1; then LD="${LD-ld} -64" fi ;; esac ;; esac fi rm -rf conftest* ;; esac need_locks="$enable_libtool_lock" ])# _LT_ENABLE_LOCK # _LT_PROG_AR # ----------- m4_defun([_LT_PROG_AR], [AC_CHECK_TOOLS(AR, [ar], false) : ${AR=ar} : ${AR_FLAGS=cru} _LT_DECL([], [AR], [1], [The archiver]) _LT_DECL([], [AR_FLAGS], [1], [Flags to create an archive]) AC_CACHE_CHECK([for archiver @FILE support], [lt_cv_ar_at_file], [lt_cv_ar_at_file=no AC_COMPILE_IFELSE([AC_LANG_PROGRAM], [echo conftest.$ac_objext > conftest.lst lt_ar_try='$AR $AR_FLAGS libconftest.a @conftest.lst >&AS_MESSAGE_LOG_FD' AC_TRY_EVAL([lt_ar_try]) if test "$ac_status" -eq 0; then # Ensure the archiver fails upon bogus file names. rm -f conftest.$ac_objext libconftest.a AC_TRY_EVAL([lt_ar_try]) if test "$ac_status" -ne 0; then lt_cv_ar_at_file=@ fi fi rm -f conftest.* libconftest.a ]) ]) if test "x$lt_cv_ar_at_file" = xno; then archiver_list_spec= else archiver_list_spec=$lt_cv_ar_at_file fi _LT_DECL([], [archiver_list_spec], [1], [How to feed a file listing to the archiver]) ])# _LT_PROG_AR # _LT_CMD_OLD_ARCHIVE # ------------------- m4_defun([_LT_CMD_OLD_ARCHIVE], [_LT_PROG_AR AC_CHECK_TOOL(STRIP, strip, :) test -z "$STRIP" && STRIP=: _LT_DECL([], [STRIP], [1], [A symbol stripping program]) AC_CHECK_TOOL(RANLIB, ranlib, :) test -z "$RANLIB" && RANLIB=: _LT_DECL([], [RANLIB], [1], [Commands used to install an old-style archive]) # Determine commands to create old-style static archives. old_archive_cmds='$AR $AR_FLAGS $oldlib$oldobjs' old_postinstall_cmds='chmod 644 $oldlib' old_postuninstall_cmds= if test -n "$RANLIB"; then case $host_os in openbsd*) old_postinstall_cmds="$old_postinstall_cmds~\$RANLIB -t \$tool_oldlib" ;; *) old_postinstall_cmds="$old_postinstall_cmds~\$RANLIB \$tool_oldlib" ;; esac old_archive_cmds="$old_archive_cmds~\$RANLIB \$tool_oldlib" fi case $host_os in darwin*) lock_old_archive_extraction=yes ;; *) lock_old_archive_extraction=no ;; esac _LT_DECL([], [old_postinstall_cmds], [2]) _LT_DECL([], [old_postuninstall_cmds], [2]) _LT_TAGDECL([], [old_archive_cmds], [2], [Commands used to build an old-style archive]) _LT_DECL([], [lock_old_archive_extraction], [0], [Whether to use a lock for old archive extraction]) ])# _LT_CMD_OLD_ARCHIVE # _LT_COMPILER_OPTION(MESSAGE, VARIABLE-NAME, FLAGS, # [OUTPUT-FILE], [ACTION-SUCCESS], [ACTION-FAILURE]) # ---------------------------------------------------------------- # Check whether the given compiler option works AC_DEFUN([_LT_COMPILER_OPTION], [m4_require([_LT_FILEUTILS_DEFAULTS])dnl m4_require([_LT_DECL_SED])dnl AC_CACHE_CHECK([$1], [$2], [$2=no m4_if([$4], , [ac_outfile=conftest.$ac_objext], [ac_outfile=$4]) echo "$lt_simple_compile_test_code" > conftest.$ac_ext lt_compiler_flag="$3" # Insert the option either (1) after the last *FLAGS variable, or # (2) before a word containing "conftest.", or (3) at the end. # Note that $ac_compile itself does not contain backslashes and begins # with a dollar sign (not a hyphen), so the echo should work correctly. # The option is referenced via a variable to avoid confusing sed. lt_compile=`echo "$ac_compile" | $SED \ -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ -e 's: [[^ ]]*conftest\.: $lt_compiler_flag&:; t' \ -e 's:$: $lt_compiler_flag:'` (eval echo "\"\$as_me:$LINENO: $lt_compile\"" >&AS_MESSAGE_LOG_FD) (eval "$lt_compile" 2>conftest.err) ac_status=$? cat conftest.err >&AS_MESSAGE_LOG_FD echo "$as_me:$LINENO: \$? = $ac_status" >&AS_MESSAGE_LOG_FD if (exit $ac_status) && test -s "$ac_outfile"; then # The compiler can only warn and ignore the option if not recognized # So say no if there are warnings other than the usual output. $ECHO "$_lt_compiler_boilerplate" | $SED '/^$/d' >conftest.exp $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2 if test ! -s conftest.er2 || diff conftest.exp conftest.er2 >/dev/null; then $2=yes fi fi $RM conftest* ]) if test x"[$]$2" = xyes; then m4_if([$5], , :, [$5]) else m4_if([$6], , :, [$6]) fi ])# _LT_COMPILER_OPTION # Old name: AU_ALIAS([AC_LIBTOOL_COMPILER_OPTION], [_LT_COMPILER_OPTION]) dnl aclocal-1.4 backwards compatibility: dnl AC_DEFUN([AC_LIBTOOL_COMPILER_OPTION], []) # _LT_LINKER_OPTION(MESSAGE, VARIABLE-NAME, FLAGS, # [ACTION-SUCCESS], [ACTION-FAILURE]) # ---------------------------------------------------- # Check whether the given linker option works AC_DEFUN([_LT_LINKER_OPTION], [m4_require([_LT_FILEUTILS_DEFAULTS])dnl m4_require([_LT_DECL_SED])dnl AC_CACHE_CHECK([$1], [$2], [$2=no save_LDFLAGS="$LDFLAGS" LDFLAGS="$LDFLAGS $3" echo "$lt_simple_link_test_code" > conftest.$ac_ext if (eval $ac_link 2>conftest.err) && test -s conftest$ac_exeext; then # The linker can only warn and ignore the option if not recognized # So say no if there are warnings if test -s conftest.err; then # Append any errors to the config.log. cat conftest.err 1>&AS_MESSAGE_LOG_FD $ECHO "$_lt_linker_boilerplate" | $SED '/^$/d' > conftest.exp $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2 if diff conftest.exp conftest.er2 >/dev/null; then $2=yes fi else $2=yes fi fi $RM -r conftest* LDFLAGS="$save_LDFLAGS" ]) if test x"[$]$2" = xyes; then m4_if([$4], , :, [$4]) else m4_if([$5], , :, [$5]) fi ])# _LT_LINKER_OPTION # Old name: AU_ALIAS([AC_LIBTOOL_LINKER_OPTION], [_LT_LINKER_OPTION]) dnl aclocal-1.4 backwards compatibility: dnl AC_DEFUN([AC_LIBTOOL_LINKER_OPTION], []) # LT_CMD_MAX_LEN #--------------- AC_DEFUN([LT_CMD_MAX_LEN], [AC_REQUIRE([AC_CANONICAL_HOST])dnl # find the maximum length of command line arguments AC_MSG_CHECKING([the maximum length of command line arguments]) AC_CACHE_VAL([lt_cv_sys_max_cmd_len], [dnl i=0 teststring="ABCD" case $build_os in msdosdjgpp*) # On DJGPP, this test can blow up pretty badly due to problems in libc # (any single argument exceeding 2000 bytes causes a buffer overrun # during glob expansion). Even if it were fixed, the result of this # check would be larger than it should be. lt_cv_sys_max_cmd_len=12288; # 12K is about right ;; gnu*) # Under GNU Hurd, this test is not required because there is # no limit to the length of command line arguments. # Libtool will interpret -1 as no limit whatsoever lt_cv_sys_max_cmd_len=-1; ;; cygwin* | mingw* | cegcc*) # On Win9x/ME, this test blows up -- it succeeds, but takes # about 5 minutes as the teststring grows exponentially. # Worse, since 9x/ME are not pre-emptively multitasking, # you end up with a "frozen" computer, even though with patience # the test eventually succeeds (with a max line length of 256k). # Instead, let's just punt: use the minimum linelength reported by # all of the supported platforms: 8192 (on NT/2K/XP). lt_cv_sys_max_cmd_len=8192; ;; mint*) # On MiNT this can take a long time and run out of memory. lt_cv_sys_max_cmd_len=8192; ;; amigaos*) # On AmigaOS with pdksh, this test takes hours, literally. # So we just punt and use a minimum line length of 8192. lt_cv_sys_max_cmd_len=8192; ;; netbsd* | freebsd* | openbsd* | darwin* | dragonfly*) # This has been around since 386BSD, at least. Likely further. if test -x /sbin/sysctl; then lt_cv_sys_max_cmd_len=`/sbin/sysctl -n kern.argmax` elif test -x /usr/sbin/sysctl; then lt_cv_sys_max_cmd_len=`/usr/sbin/sysctl -n kern.argmax` else lt_cv_sys_max_cmd_len=65536 # usable default for all BSDs fi # And add a safety zone lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \/ 4` lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \* 3` ;; interix*) # We know the value 262144 and hardcode it with a safety zone (like BSD) lt_cv_sys_max_cmd_len=196608 ;; os2*) # The test takes a long time on OS/2. lt_cv_sys_max_cmd_len=8192 ;; osf*) # Dr. Hans Ekkehard Plesser reports seeing a kernel panic running configure # due to this test when exec_disable_arg_limit is 1 on Tru64. It is not # nice to cause kernel panics so lets avoid the loop below. # First set a reasonable default. lt_cv_sys_max_cmd_len=16384 # if test -x /sbin/sysconfig; then case `/sbin/sysconfig -q proc exec_disable_arg_limit` in *1*) lt_cv_sys_max_cmd_len=-1 ;; esac fi ;; sco3.2v5*) lt_cv_sys_max_cmd_len=102400 ;; sysv5* | sco5v6* | sysv4.2uw2*) kargmax=`grep ARG_MAX /etc/conf/cf.d/stune 2>/dev/null` if test -n "$kargmax"; then lt_cv_sys_max_cmd_len=`echo $kargmax | sed 's/.*[[ ]]//'` else lt_cv_sys_max_cmd_len=32768 fi ;; *) lt_cv_sys_max_cmd_len=`(getconf ARG_MAX) 2> /dev/null` if test -n "$lt_cv_sys_max_cmd_len"; then lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \/ 4` lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \* 3` else # Make teststring a little bigger before we do anything with it. # a 1K string should be a reasonable start. for i in 1 2 3 4 5 6 7 8 ; do teststring=$teststring$teststring done SHELL=${SHELL-${CONFIG_SHELL-/bin/sh}} # If test is not a shell built-in, we'll probably end up computing a # maximum length that is only half of the actual maximum length, but # we can't tell. while { test "X"`env echo "$teststring$teststring" 2>/dev/null` \ = "X$teststring$teststring"; } >/dev/null 2>&1 && test $i != 17 # 1/2 MB should be enough do i=`expr $i + 1` teststring=$teststring$teststring done # Only check the string length outside the loop. lt_cv_sys_max_cmd_len=`expr "X$teststring" : ".*" 2>&1` teststring= # Add a significant safety factor because C++ compilers can tack on # massive amounts of additional arguments before passing them to the # linker. It appears as though 1/2 is a usable value. lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \/ 2` fi ;; esac ]) if test -n $lt_cv_sys_max_cmd_len ; then AC_MSG_RESULT($lt_cv_sys_max_cmd_len) else AC_MSG_RESULT(none) fi max_cmd_len=$lt_cv_sys_max_cmd_len _LT_DECL([], [max_cmd_len], [0], [What is the maximum length of a command?]) ])# LT_CMD_MAX_LEN # Old name: AU_ALIAS([AC_LIBTOOL_SYS_MAX_CMD_LEN], [LT_CMD_MAX_LEN]) dnl aclocal-1.4 backwards compatibility: dnl AC_DEFUN([AC_LIBTOOL_SYS_MAX_CMD_LEN], []) # _LT_HEADER_DLFCN # ---------------- m4_defun([_LT_HEADER_DLFCN], [AC_CHECK_HEADERS([dlfcn.h], [], [], [AC_INCLUDES_DEFAULT])dnl ])# _LT_HEADER_DLFCN # _LT_TRY_DLOPEN_SELF (ACTION-IF-TRUE, ACTION-IF-TRUE-W-USCORE, # ACTION-IF-FALSE, ACTION-IF-CROSS-COMPILING) # ---------------------------------------------------------------- m4_defun([_LT_TRY_DLOPEN_SELF], [m4_require([_LT_HEADER_DLFCN])dnl if test "$cross_compiling" = yes; then : [$4] else lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2 lt_status=$lt_dlunknown cat > conftest.$ac_ext <<_LT_EOF [#line $LINENO "configure" #include "confdefs.h" #if HAVE_DLFCN_H #include #endif #include #ifdef RTLD_GLOBAL # define LT_DLGLOBAL RTLD_GLOBAL #else # ifdef DL_GLOBAL # define LT_DLGLOBAL DL_GLOBAL # else # define LT_DLGLOBAL 0 # endif #endif /* We may have to define LT_DLLAZY_OR_NOW in the command line if we find out it does not work in some platform. */ #ifndef LT_DLLAZY_OR_NOW # ifdef RTLD_LAZY # define LT_DLLAZY_OR_NOW RTLD_LAZY # else # ifdef DL_LAZY # define LT_DLLAZY_OR_NOW DL_LAZY # else # ifdef RTLD_NOW # define LT_DLLAZY_OR_NOW RTLD_NOW # else # ifdef DL_NOW # define LT_DLLAZY_OR_NOW DL_NOW # else # define LT_DLLAZY_OR_NOW 0 # endif # endif # endif # endif #endif /* When -fvisbility=hidden is used, assume the code has been annotated correspondingly for the symbols needed. */ #if defined(__GNUC__) && (((__GNUC__ == 3) && (__GNUC_MINOR__ >= 3)) || (__GNUC__ > 3)) int fnord () __attribute__((visibility("default"))); #endif int fnord () { return 42; } int main () { void *self = dlopen (0, LT_DLGLOBAL|LT_DLLAZY_OR_NOW); int status = $lt_dlunknown; if (self) { if (dlsym (self,"fnord")) status = $lt_dlno_uscore; else { if (dlsym( self,"_fnord")) status = $lt_dlneed_uscore; else puts (dlerror ()); } /* dlclose (self); */ } else puts (dlerror ()); return status; }] _LT_EOF if AC_TRY_EVAL(ac_link) && test -s conftest${ac_exeext} 2>/dev/null; then (./conftest; exit; ) >&AS_MESSAGE_LOG_FD 2>/dev/null lt_status=$? case x$lt_status in x$lt_dlno_uscore) $1 ;; x$lt_dlneed_uscore) $2 ;; x$lt_dlunknown|x*) $3 ;; esac else : # compilation failed $3 fi fi rm -fr conftest* ])# _LT_TRY_DLOPEN_SELF # LT_SYS_DLOPEN_SELF # ------------------ AC_DEFUN([LT_SYS_DLOPEN_SELF], [m4_require([_LT_HEADER_DLFCN])dnl if test "x$enable_dlopen" != xyes; then enable_dlopen=unknown enable_dlopen_self=unknown enable_dlopen_self_static=unknown else lt_cv_dlopen=no lt_cv_dlopen_libs= case $host_os in beos*) lt_cv_dlopen="load_add_on" lt_cv_dlopen_libs= lt_cv_dlopen_self=yes ;; mingw* | pw32* | cegcc*) lt_cv_dlopen="LoadLibrary" lt_cv_dlopen_libs= ;; cygwin*) lt_cv_dlopen="dlopen" lt_cv_dlopen_libs= ;; darwin*) # if libdl is installed we need to link against it AC_CHECK_LIB([dl], [dlopen], [lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-ldl"],[ lt_cv_dlopen="dyld" lt_cv_dlopen_libs= lt_cv_dlopen_self=yes ]) ;; *) AC_CHECK_FUNC([shl_load], [lt_cv_dlopen="shl_load"], [AC_CHECK_LIB([dld], [shl_load], [lt_cv_dlopen="shl_load" lt_cv_dlopen_libs="-ldld"], [AC_CHECK_FUNC([dlopen], [lt_cv_dlopen="dlopen"], [AC_CHECK_LIB([dl], [dlopen], [lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-ldl"], [AC_CHECK_LIB([svld], [dlopen], [lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-lsvld"], [AC_CHECK_LIB([dld], [dld_link], [lt_cv_dlopen="dld_link" lt_cv_dlopen_libs="-ldld"]) ]) ]) ]) ]) ]) ;; esac if test "x$lt_cv_dlopen" != xno; then enable_dlopen=yes else enable_dlopen=no fi case $lt_cv_dlopen in dlopen) save_CPPFLAGS="$CPPFLAGS" test "x$ac_cv_header_dlfcn_h" = xyes && CPPFLAGS="$CPPFLAGS -DHAVE_DLFCN_H" save_LDFLAGS="$LDFLAGS" wl=$lt_prog_compiler_wl eval LDFLAGS=\"\$LDFLAGS $export_dynamic_flag_spec\" save_LIBS="$LIBS" LIBS="$lt_cv_dlopen_libs $LIBS" AC_CACHE_CHECK([whether a program can dlopen itself], lt_cv_dlopen_self, [dnl _LT_TRY_DLOPEN_SELF( lt_cv_dlopen_self=yes, lt_cv_dlopen_self=yes, lt_cv_dlopen_self=no, lt_cv_dlopen_self=cross) ]) if test "x$lt_cv_dlopen_self" = xyes; then wl=$lt_prog_compiler_wl eval LDFLAGS=\"\$LDFLAGS $lt_prog_compiler_static\" AC_CACHE_CHECK([whether a statically linked program can dlopen itself], lt_cv_dlopen_self_static, [dnl _LT_TRY_DLOPEN_SELF( lt_cv_dlopen_self_static=yes, lt_cv_dlopen_self_static=yes, lt_cv_dlopen_self_static=no, lt_cv_dlopen_self_static=cross) ]) fi CPPFLAGS="$save_CPPFLAGS" LDFLAGS="$save_LDFLAGS" LIBS="$save_LIBS" ;; esac case $lt_cv_dlopen_self in yes|no) enable_dlopen_self=$lt_cv_dlopen_self ;; *) enable_dlopen_self=unknown ;; esac case $lt_cv_dlopen_self_static in yes|no) enable_dlopen_self_static=$lt_cv_dlopen_self_static ;; *) enable_dlopen_self_static=unknown ;; esac fi _LT_DECL([dlopen_support], [enable_dlopen], [0], [Whether dlopen is supported]) _LT_DECL([dlopen_self], [enable_dlopen_self], [0], [Whether dlopen of programs is supported]) _LT_DECL([dlopen_self_static], [enable_dlopen_self_static], [0], [Whether dlopen of statically linked programs is supported]) ])# LT_SYS_DLOPEN_SELF # Old name: AU_ALIAS([AC_LIBTOOL_DLOPEN_SELF], [LT_SYS_DLOPEN_SELF]) dnl aclocal-1.4 backwards compatibility: dnl AC_DEFUN([AC_LIBTOOL_DLOPEN_SELF], []) # _LT_COMPILER_C_O([TAGNAME]) # --------------------------- # Check to see if options -c and -o are simultaneously supported by compiler. # This macro does not hard code the compiler like AC_PROG_CC_C_O. m4_defun([_LT_COMPILER_C_O], [m4_require([_LT_DECL_SED])dnl m4_require([_LT_FILEUTILS_DEFAULTS])dnl m4_require([_LT_TAG_COMPILER])dnl AC_CACHE_CHECK([if $compiler supports -c -o file.$ac_objext], [_LT_TAGVAR(lt_cv_prog_compiler_c_o, $1)], [_LT_TAGVAR(lt_cv_prog_compiler_c_o, $1)=no $RM -r conftest 2>/dev/null mkdir conftest cd conftest mkdir out echo "$lt_simple_compile_test_code" > conftest.$ac_ext lt_compiler_flag="-o out/conftest2.$ac_objext" # Insert the option either (1) after the last *FLAGS variable, or # (2) before a word containing "conftest.", or (3) at the end. # Note that $ac_compile itself does not contain backslashes and begins # with a dollar sign (not a hyphen), so the echo should work correctly. lt_compile=`echo "$ac_compile" | $SED \ -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ -e 's: [[^ ]]*conftest\.: $lt_compiler_flag&:; t' \ -e 's:$: $lt_compiler_flag:'` (eval echo "\"\$as_me:$LINENO: $lt_compile\"" >&AS_MESSAGE_LOG_FD) (eval "$lt_compile" 2>out/conftest.err) ac_status=$? cat out/conftest.err >&AS_MESSAGE_LOG_FD echo "$as_me:$LINENO: \$? = $ac_status" >&AS_MESSAGE_LOG_FD if (exit $ac_status) && test -s out/conftest2.$ac_objext then # The compiler can only warn and ignore the option if not recognized # So say no if there are warnings $ECHO "$_lt_compiler_boilerplate" | $SED '/^$/d' > out/conftest.exp $SED '/^$/d; /^ *+/d' out/conftest.err >out/conftest.er2 if test ! -s out/conftest.er2 || diff out/conftest.exp out/conftest.er2 >/dev/null; then _LT_TAGVAR(lt_cv_prog_compiler_c_o, $1)=yes fi fi chmod u+w . 2>&AS_MESSAGE_LOG_FD $RM conftest* # SGI C++ compiler will create directory out/ii_files/ for # template instantiation test -d out/ii_files && $RM out/ii_files/* && rmdir out/ii_files $RM out/* && rmdir out cd .. $RM -r conftest $RM conftest* ]) _LT_TAGDECL([compiler_c_o], [lt_cv_prog_compiler_c_o], [1], [Does compiler simultaneously support -c and -o options?]) ])# _LT_COMPILER_C_O # _LT_COMPILER_FILE_LOCKS([TAGNAME]) # ---------------------------------- # Check to see if we can do hard links to lock some files if needed m4_defun([_LT_COMPILER_FILE_LOCKS], [m4_require([_LT_ENABLE_LOCK])dnl m4_require([_LT_FILEUTILS_DEFAULTS])dnl _LT_COMPILER_C_O([$1]) hard_links="nottested" if test "$_LT_TAGVAR(lt_cv_prog_compiler_c_o, $1)" = no && test "$need_locks" != no; then # do not overwrite the value of need_locks provided by the user AC_MSG_CHECKING([if we can lock with hard links]) hard_links=yes $RM conftest* ln conftest.a conftest.b 2>/dev/null && hard_links=no touch conftest.a ln conftest.a conftest.b 2>&5 || hard_links=no ln conftest.a conftest.b 2>/dev/null && hard_links=no AC_MSG_RESULT([$hard_links]) if test "$hard_links" = no; then AC_MSG_WARN([`$CC' does not support `-c -o', so `make -j' may be unsafe]) need_locks=warn fi else need_locks=no fi _LT_DECL([], [need_locks], [1], [Must we lock files when doing compilation?]) ])# _LT_COMPILER_FILE_LOCKS # _LT_CHECK_OBJDIR # ---------------- m4_defun([_LT_CHECK_OBJDIR], [AC_CACHE_CHECK([for objdir], [lt_cv_objdir], [rm -f .libs 2>/dev/null mkdir .libs 2>/dev/null if test -d .libs; then lt_cv_objdir=.libs else # MS-DOS does not allow filenames that begin with a dot. lt_cv_objdir=_libs fi rmdir .libs 2>/dev/null]) objdir=$lt_cv_objdir _LT_DECL([], [objdir], [0], [The name of the directory that contains temporary libtool files])dnl m4_pattern_allow([LT_OBJDIR])dnl AC_DEFINE_UNQUOTED(LT_OBJDIR, "$lt_cv_objdir/", [Define to the sub-directory in which libtool stores uninstalled libraries.]) ])# _LT_CHECK_OBJDIR # _LT_LINKER_HARDCODE_LIBPATH([TAGNAME]) # -------------------------------------- # Check hardcoding attributes. m4_defun([_LT_LINKER_HARDCODE_LIBPATH], [AC_MSG_CHECKING([how to hardcode library paths into programs]) _LT_TAGVAR(hardcode_action, $1)= if test -n "$_LT_TAGVAR(hardcode_libdir_flag_spec, $1)" || test -n "$_LT_TAGVAR(runpath_var, $1)" || test "X$_LT_TAGVAR(hardcode_automatic, $1)" = "Xyes" ; then # We can hardcode non-existent directories. if test "$_LT_TAGVAR(hardcode_direct, $1)" != no && # If the only mechanism to avoid hardcoding is shlibpath_var, we # have to relink, otherwise we might link with an installed library # when we should be linking with a yet-to-be-installed one ## test "$_LT_TAGVAR(hardcode_shlibpath_var, $1)" != no && test "$_LT_TAGVAR(hardcode_minus_L, $1)" != no; then # Linking always hardcodes the temporary library directory. _LT_TAGVAR(hardcode_action, $1)=relink else # We can link without hardcoding, and we can hardcode nonexisting dirs. _LT_TAGVAR(hardcode_action, $1)=immediate fi else # We cannot hardcode anything, or else we can only hardcode existing # directories. _LT_TAGVAR(hardcode_action, $1)=unsupported fi AC_MSG_RESULT([$_LT_TAGVAR(hardcode_action, $1)]) if test "$_LT_TAGVAR(hardcode_action, $1)" = relink || test "$_LT_TAGVAR(inherit_rpath, $1)" = yes; then # Fast installation is not supported enable_fast_install=no elif test "$shlibpath_overrides_runpath" = yes || test "$enable_shared" = no; then # Fast installation is not necessary enable_fast_install=needless fi _LT_TAGDECL([], [hardcode_action], [0], [How to hardcode a shared library path into an executable]) ])# _LT_LINKER_HARDCODE_LIBPATH # _LT_CMD_STRIPLIB # ---------------- m4_defun([_LT_CMD_STRIPLIB], [m4_require([_LT_DECL_EGREP]) striplib= old_striplib= AC_MSG_CHECKING([whether stripping libraries is possible]) if test -n "$STRIP" && $STRIP -V 2>&1 | $GREP "GNU strip" >/dev/null; then test -z "$old_striplib" && old_striplib="$STRIP --strip-debug" test -z "$striplib" && striplib="$STRIP --strip-unneeded" AC_MSG_RESULT([yes]) else # FIXME - insert some real tests, host_os isn't really good enough case $host_os in darwin*) if test -n "$STRIP" ; then striplib="$STRIP -x" old_striplib="$STRIP -S" AC_MSG_RESULT([yes]) else AC_MSG_RESULT([no]) fi ;; *) AC_MSG_RESULT([no]) ;; esac fi _LT_DECL([], [old_striplib], [1], [Commands to strip libraries]) _LT_DECL([], [striplib], [1]) ])# _LT_CMD_STRIPLIB # _LT_SYS_DYNAMIC_LINKER([TAG]) # ----------------------------- # PORTME Fill in your ld.so characteristics m4_defun([_LT_SYS_DYNAMIC_LINKER], [AC_REQUIRE([AC_CANONICAL_HOST])dnl m4_require([_LT_DECL_EGREP])dnl m4_require([_LT_FILEUTILS_DEFAULTS])dnl m4_require([_LT_DECL_OBJDUMP])dnl m4_require([_LT_DECL_SED])dnl m4_require([_LT_CHECK_SHELL_FEATURES])dnl AC_MSG_CHECKING([dynamic linker characteristics]) m4_if([$1], [], [ if test "$GCC" = yes; then case $host_os in darwin*) lt_awk_arg="/^libraries:/,/LR/" ;; *) lt_awk_arg="/^libraries:/" ;; esac case $host_os in mingw* | cegcc*) lt_sed_strip_eq="s,=\([[A-Za-z]]:\),\1,g" ;; *) lt_sed_strip_eq="s,=/,/,g" ;; esac lt_search_path_spec=`$CC -print-search-dirs | awk $lt_awk_arg | $SED -e "s/^libraries://" -e $lt_sed_strip_eq` case $lt_search_path_spec in *\;*) # if the path contains ";" then we assume it to be the separator # otherwise default to the standard path separator (i.e. ":") - it is # assumed that no part of a normal pathname contains ";" but that should # okay in the real world where ";" in dirpaths is itself problematic. lt_search_path_spec=`$ECHO "$lt_search_path_spec" | $SED 's/;/ /g'` ;; *) lt_search_path_spec=`$ECHO "$lt_search_path_spec" | $SED "s/$PATH_SEPARATOR/ /g"` ;; esac # Ok, now we have the path, separated by spaces, we can step through it # and add multilib dir if necessary. lt_tmp_lt_search_path_spec= lt_multi_os_dir=`$CC $CPPFLAGS $CFLAGS $LDFLAGS -print-multi-os-directory 2>/dev/null` for lt_sys_path in $lt_search_path_spec; do if test -d "$lt_sys_path/$lt_multi_os_dir"; then lt_tmp_lt_search_path_spec="$lt_tmp_lt_search_path_spec $lt_sys_path/$lt_multi_os_dir" else test -d "$lt_sys_path" && \ lt_tmp_lt_search_path_spec="$lt_tmp_lt_search_path_spec $lt_sys_path" fi done lt_search_path_spec=`$ECHO "$lt_tmp_lt_search_path_spec" | awk ' BEGIN {RS=" "; FS="/|\n";} { lt_foo=""; lt_count=0; for (lt_i = NF; lt_i > 0; lt_i--) { if ($lt_i != "" && $lt_i != ".") { if ($lt_i == "..") { lt_count++; } else { if (lt_count == 0) { lt_foo="/" $lt_i lt_foo; } else { lt_count--; } } } } if (lt_foo != "") { lt_freq[[lt_foo]]++; } if (lt_freq[[lt_foo]] == 1) { print lt_foo; } }'` # AWK program above erroneously prepends '/' to C:/dos/paths # for these hosts. case $host_os in mingw* | cegcc*) lt_search_path_spec=`$ECHO "$lt_search_path_spec" |\ $SED 's,/\([[A-Za-z]]:\),\1,g'` ;; esac sys_lib_search_path_spec=`$ECHO "$lt_search_path_spec" | $lt_NL2SP` else sys_lib_search_path_spec="/lib /usr/lib /usr/local/lib" fi]) library_names_spec= libname_spec='lib$name' soname_spec= shrext_cmds=".so" postinstall_cmds= postuninstall_cmds= finish_cmds= finish_eval= shlibpath_var= shlibpath_overrides_runpath=unknown version_type=none dynamic_linker="$host_os ld.so" sys_lib_dlsearch_path_spec="/lib /usr/lib" need_lib_prefix=unknown hardcode_into_libs=no # when you set need_version to no, make sure it does not cause -set_version # flags to be left without arguments need_version=unknown case $host_os in aix3*) version_type=linux # correct to gnu/linux during the next big refactor library_names_spec='${libname}${release}${shared_ext}$versuffix $libname.a' shlibpath_var=LIBPATH # AIX 3 has no versioning support, so we append a major version to the name. soname_spec='${libname}${release}${shared_ext}$major' ;; aix[[4-9]]*) version_type=linux # correct to gnu/linux during the next big refactor need_lib_prefix=no need_version=no hardcode_into_libs=yes if test "$host_cpu" = ia64; then # AIX 5 supports IA64 library_names_spec='${libname}${release}${shared_ext}$major ${libname}${release}${shared_ext}$versuffix $libname${shared_ext}' shlibpath_var=LD_LIBRARY_PATH else # With GCC up to 2.95.x, collect2 would create an import file # for dependence libraries. The import file would start with # the line `#! .'. This would cause the generated library to # depend on `.', always an invalid library. This was fixed in # development snapshots of GCC prior to 3.0. case $host_os in aix4 | aix4.[[01]] | aix4.[[01]].*) if { echo '#if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 97)' echo ' yes ' echo '#endif'; } | ${CC} -E - | $GREP yes > /dev/null; then : else can_build_shared=no fi ;; esac # AIX (on Power*) has no versioning support, so currently we can not hardcode correct # soname into executable. Probably we can add versioning support to # collect2, so additional links can be useful in future. if test "$aix_use_runtimelinking" = yes; then # If using run time linking (on AIX 4.2 or later) use lib.so # instead of lib.a to let people know that these are not # typical AIX shared libraries. library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' else # We preserve .a as extension for shared libraries through AIX4.2 # and later when we are not doing run time linking. library_names_spec='${libname}${release}.a $libname.a' soname_spec='${libname}${release}${shared_ext}$major' fi shlibpath_var=LIBPATH fi ;; amigaos*) case $host_cpu in powerpc) # Since July 2007 AmigaOS4 officially supports .so libraries. # When compiling the executable, add -use-dynld -Lsobjs: to the compileline. library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' ;; m68k) library_names_spec='$libname.ixlibrary $libname.a' # Create ${libname}_ixlibrary.a entries in /sys/libs. finish_eval='for lib in `ls $libdir/*.ixlibrary 2>/dev/null`; do libname=`func_echo_all "$lib" | $SED '\''s%^.*/\([[^/]]*\)\.ixlibrary$%\1%'\''`; test $RM /sys/libs/${libname}_ixlibrary.a; $show "cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a"; cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a || exit 1; done' ;; esac ;; beos*) library_names_spec='${libname}${shared_ext}' dynamic_linker="$host_os ld.so" shlibpath_var=LIBRARY_PATH ;; bsdi[[45]]*) version_type=linux # correct to gnu/linux during the next big refactor need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' finish_cmds='PATH="\$PATH:/sbin" ldconfig $libdir' shlibpath_var=LD_LIBRARY_PATH sys_lib_search_path_spec="/shlib /usr/lib /usr/X11/lib /usr/contrib/lib /lib /usr/local/lib" sys_lib_dlsearch_path_spec="/shlib /usr/lib /usr/local/lib" # the default ld.so.conf also contains /usr/contrib/lib and # /usr/X11R6/lib (/usr/X11 is a link to /usr/X11R6), but let us allow # libtool to hard-code these into programs ;; cygwin* | mingw* | pw32* | cegcc*) version_type=windows shrext_cmds=".dll" need_version=no need_lib_prefix=no case $GCC,$cc_basename in yes,*) # gcc library_names_spec='$libname.dll.a' # DLL is installed to $(libdir)/../bin by postinstall_cmds postinstall_cmds='base_file=`basename \${file}`~ dlpath=`$SHELL 2>&1 -c '\''. $dir/'\''\${base_file}'\''i; echo \$dlname'\''`~ dldir=$destdir/`dirname \$dlpath`~ test -d \$dldir || mkdir -p \$dldir~ $install_prog $dir/$dlname \$dldir/$dlname~ chmod a+x \$dldir/$dlname~ if test -n '\''$stripme'\'' && test -n '\''$striplib'\''; then eval '\''$striplib \$dldir/$dlname'\'' || exit \$?; fi' postuninstall_cmds='dldll=`$SHELL 2>&1 -c '\''. $file; echo \$dlname'\''`~ dlpath=$dir/\$dldll~ $RM \$dlpath' shlibpath_overrides_runpath=yes case $host_os in cygwin*) # Cygwin DLLs use 'cyg' prefix rather than 'lib' soname_spec='`echo ${libname} | sed -e 's/^lib/cyg/'``echo ${release} | $SED -e 's/[[.]]/-/g'`${versuffix}${shared_ext}' m4_if([$1], [],[ sys_lib_search_path_spec="$sys_lib_search_path_spec /usr/lib/w32api"]) ;; mingw* | cegcc*) # MinGW DLLs use traditional 'lib' prefix soname_spec='${libname}`echo ${release} | $SED -e 's/[[.]]/-/g'`${versuffix}${shared_ext}' ;; pw32*) # pw32 DLLs use 'pw' prefix rather than 'lib' library_names_spec='`echo ${libname} | sed -e 's/^lib/pw/'``echo ${release} | $SED -e 's/[[.]]/-/g'`${versuffix}${shared_ext}' ;; esac dynamic_linker='Win32 ld.exe' ;; *,cl*) # Native MSVC libname_spec='$name' soname_spec='${libname}`echo ${release} | $SED -e 's/[[.]]/-/g'`${versuffix}${shared_ext}' library_names_spec='${libname}.dll.lib' case $build_os in mingw*) sys_lib_search_path_spec= lt_save_ifs=$IFS IFS=';' for lt_path in $LIB do IFS=$lt_save_ifs # Let DOS variable expansion print the short 8.3 style file name. lt_path=`cd "$lt_path" 2>/dev/null && cmd //C "for %i in (".") do @echo %~si"` sys_lib_search_path_spec="$sys_lib_search_path_spec $lt_path" done IFS=$lt_save_ifs # Convert to MSYS style. sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | sed -e 's|\\\\|/|g' -e 's| \\([[a-zA-Z]]\\):| /\\1|g' -e 's|^ ||'` ;; cygwin*) # Convert to unix form, then to dos form, then back to unix form # but this time dos style (no spaces!) so that the unix form looks # like /cygdrive/c/PROGRA~1:/cygdr... sys_lib_search_path_spec=`cygpath --path --unix "$LIB"` sys_lib_search_path_spec=`cygpath --path --dos "$sys_lib_search_path_spec" 2>/dev/null` sys_lib_search_path_spec=`cygpath --path --unix "$sys_lib_search_path_spec" | $SED -e "s/$PATH_SEPARATOR/ /g"` ;; *) sys_lib_search_path_spec="$LIB" if $ECHO "$sys_lib_search_path_spec" | [$GREP ';[c-zC-Z]:/' >/dev/null]; then # It is most probably a Windows format PATH. sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | $SED -e 's/;/ /g'` else sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | $SED -e "s/$PATH_SEPARATOR/ /g"` fi # FIXME: find the short name or the path components, as spaces are # common. (e.g. "Program Files" -> "PROGRA~1") ;; esac # DLL is installed to $(libdir)/../bin by postinstall_cmds postinstall_cmds='base_file=`basename \${file}`~ dlpath=`$SHELL 2>&1 -c '\''. $dir/'\''\${base_file}'\''i; echo \$dlname'\''`~ dldir=$destdir/`dirname \$dlpath`~ test -d \$dldir || mkdir -p \$dldir~ $install_prog $dir/$dlname \$dldir/$dlname' postuninstall_cmds='dldll=`$SHELL 2>&1 -c '\''. $file; echo \$dlname'\''`~ dlpath=$dir/\$dldll~ $RM \$dlpath' shlibpath_overrides_runpath=yes dynamic_linker='Win32 link.exe' ;; *) # Assume MSVC wrapper library_names_spec='${libname}`echo ${release} | $SED -e 's/[[.]]/-/g'`${versuffix}${shared_ext} $libname.lib' dynamic_linker='Win32 ld.exe' ;; esac # FIXME: first we should search . and the directory the executable is in shlibpath_var=PATH ;; darwin* | rhapsody*) dynamic_linker="$host_os dyld" version_type=darwin need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${major}$shared_ext ${libname}$shared_ext' soname_spec='${libname}${release}${major}$shared_ext' shlibpath_overrides_runpath=yes shlibpath_var=DYLD_LIBRARY_PATH shrext_cmds='`test .$module = .yes && echo .so || echo .dylib`' m4_if([$1], [],[ sys_lib_search_path_spec="$sys_lib_search_path_spec /usr/local/lib"]) sys_lib_dlsearch_path_spec='/usr/local/lib /lib /usr/lib' ;; dgux*) version_type=linux # correct to gnu/linux during the next big refactor need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname$shared_ext' soname_spec='${libname}${release}${shared_ext}$major' shlibpath_var=LD_LIBRARY_PATH ;; freebsd* | dragonfly*) # DragonFly does not have aout. When/if they implement a new # versioning mechanism, adjust this. if test -x /usr/bin/objformat; then objformat=`/usr/bin/objformat` else case $host_os in freebsd[[23]].*) objformat=aout ;; *) objformat=elf ;; esac fi version_type=freebsd-$objformat case $version_type in freebsd-elf*) library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext} $libname${shared_ext}' need_version=no need_lib_prefix=no ;; freebsd-*) library_names_spec='${libname}${release}${shared_ext}$versuffix $libname${shared_ext}$versuffix' need_version=yes ;; esac shlibpath_var=LD_LIBRARY_PATH case $host_os in freebsd2.*) shlibpath_overrides_runpath=yes ;; freebsd3.[[01]]* | freebsdelf3.[[01]]*) shlibpath_overrides_runpath=yes hardcode_into_libs=yes ;; freebsd3.[[2-9]]* | freebsdelf3.[[2-9]]* | \ freebsd4.[[0-5]] | freebsdelf4.[[0-5]] | freebsd4.1.1 | freebsdelf4.1.1) shlibpath_overrides_runpath=no hardcode_into_libs=yes ;; *) # from 4.6 on, and DragonFly shlibpath_overrides_runpath=yes hardcode_into_libs=yes ;; esac ;; gnu*) version_type=linux # correct to gnu/linux during the next big refactor need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}${major} ${libname}${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=no hardcode_into_libs=yes ;; haiku*) version_type=linux # correct to gnu/linux during the next big refactor need_lib_prefix=no need_version=no dynamic_linker="$host_os runtime_loader" library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}${major} ${libname}${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' shlibpath_var=LIBRARY_PATH shlibpath_overrides_runpath=yes sys_lib_dlsearch_path_spec='/boot/home/config/lib /boot/common/lib /boot/system/lib' hardcode_into_libs=yes ;; hpux9* | hpux10* | hpux11*) # Give a soname corresponding to the major version so that dld.sl refuses to # link against other versions. version_type=sunos need_lib_prefix=no need_version=no case $host_cpu in ia64*) shrext_cmds='.so' hardcode_into_libs=yes dynamic_linker="$host_os dld.so" shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes # Unless +noenvvar is specified. library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' if test "X$HPUX_IA64_MODE" = X32; then sys_lib_search_path_spec="/usr/lib/hpux32 /usr/local/lib/hpux32 /usr/local/lib" else sys_lib_search_path_spec="/usr/lib/hpux64 /usr/local/lib/hpux64" fi sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec ;; hppa*64*) shrext_cmds='.sl' hardcode_into_libs=yes dynamic_linker="$host_os dld.sl" shlibpath_var=LD_LIBRARY_PATH # How should we handle SHLIB_PATH shlibpath_overrides_runpath=yes # Unless +noenvvar is specified. library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' sys_lib_search_path_spec="/usr/lib/pa20_64 /usr/ccs/lib/pa20_64" sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec ;; *) shrext_cmds='.sl' dynamic_linker="$host_os dld.sl" shlibpath_var=SHLIB_PATH shlibpath_overrides_runpath=no # +s is required to enable SHLIB_PATH library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' ;; esac # HP-UX runs *really* slowly unless shared libraries are mode 555, ... postinstall_cmds='chmod 555 $lib' # or fails outright, so override atomically: install_override_mode=555 ;; interix[[3-9]]*) version_type=linux # correct to gnu/linux during the next big refactor need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' dynamic_linker='Interix 3.x ld.so.1 (PE, like ELF)' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=no hardcode_into_libs=yes ;; irix5* | irix6* | nonstopux*) case $host_os in nonstopux*) version_type=nonstopux ;; *) if test "$lt_cv_prog_gnu_ld" = yes; then version_type=linux # correct to gnu/linux during the next big refactor else version_type=irix fi ;; esac need_lib_prefix=no need_version=no soname_spec='${libname}${release}${shared_ext}$major' library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${release}${shared_ext} $libname${shared_ext}' case $host_os in irix5* | nonstopux*) libsuff= shlibsuff= ;; *) case $LD in # libtool.m4 will add one of these switches to LD *-32|*"-32 "|*-melf32bsmip|*"-melf32bsmip ") libsuff= shlibsuff= libmagic=32-bit;; *-n32|*"-n32 "|*-melf32bmipn32|*"-melf32bmipn32 ") libsuff=32 shlibsuff=N32 libmagic=N32;; *-64|*"-64 "|*-melf64bmip|*"-melf64bmip ") libsuff=64 shlibsuff=64 libmagic=64-bit;; *) libsuff= shlibsuff= libmagic=never-match;; esac ;; esac shlibpath_var=LD_LIBRARY${shlibsuff}_PATH shlibpath_overrides_runpath=no sys_lib_search_path_spec="/usr/lib${libsuff} /lib${libsuff} /usr/local/lib${libsuff}" sys_lib_dlsearch_path_spec="/usr/lib${libsuff} /lib${libsuff}" hardcode_into_libs=yes ;; # No shared lib support for Linux oldld, aout, or coff. linux*oldld* | linux*aout* | linux*coff*) dynamic_linker=no ;; # This must be glibc/ELF. linux* | k*bsd*-gnu | kopensolaris*-gnu) version_type=linux # correct to gnu/linux during the next big refactor need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' finish_cmds='PATH="\$PATH:/sbin" ldconfig -n $libdir' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=no # Some binutils ld are patched to set DT_RUNPATH AC_CACHE_VAL([lt_cv_shlibpath_overrides_runpath], [lt_cv_shlibpath_overrides_runpath=no save_LDFLAGS=$LDFLAGS save_libdir=$libdir eval "libdir=/foo; wl=\"$_LT_TAGVAR(lt_prog_compiler_wl, $1)\"; \ LDFLAGS=\"\$LDFLAGS $_LT_TAGVAR(hardcode_libdir_flag_spec, $1)\"" AC_LINK_IFELSE([AC_LANG_PROGRAM([],[])], [AS_IF([ ($OBJDUMP -p conftest$ac_exeext) 2>/dev/null | grep "RUNPATH.*$libdir" >/dev/null], [lt_cv_shlibpath_overrides_runpath=yes])]) LDFLAGS=$save_LDFLAGS libdir=$save_libdir ]) shlibpath_overrides_runpath=$lt_cv_shlibpath_overrides_runpath # This implies no fast_install, which is unacceptable. # Some rework will be needed to allow for fast_install # before this can be enabled. hardcode_into_libs=yes # Append ld.so.conf contents to the search path if test -f /etc/ld.so.conf; then lt_ld_extra=`awk '/^include / { system(sprintf("cd /etc; cat %s 2>/dev/null", \[$]2)); skip = 1; } { if (!skip) print \[$]0; skip = 0; }' < /etc/ld.so.conf | $SED -e 's/#.*//;/^[ ]*hwcap[ ]/d;s/[:, ]/ /g;s/=[^=]*$//;s/=[^= ]* / /g;s/"//g;/^$/d' | tr '\n' ' '` sys_lib_dlsearch_path_spec="/lib /usr/lib $lt_ld_extra" fi # We used to test for /lib/ld.so.1 and disable shared libraries on # powerpc, because MkLinux only supported shared libraries with the # GNU dynamic linker. Since this was broken with cross compilers, # most powerpc-linux boxes support dynamic linking these days and # people can always --disable-shared, the test was removed, and we # assume the GNU/Linux dynamic linker is in use. dynamic_linker='GNU/Linux ld.so' ;; netbsdelf*-gnu) version_type=linux need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=no hardcode_into_libs=yes dynamic_linker='NetBSD ld.elf_so' ;; netbsd*) version_type=sunos need_lib_prefix=no need_version=no if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix' finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir' dynamic_linker='NetBSD (a.out) ld.so' else library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' dynamic_linker='NetBSD ld.elf_so' fi shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes hardcode_into_libs=yes ;; newsos6) version_type=linux # correct to gnu/linux during the next big refactor library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes ;; *nto* | *qnx*) version_type=qnx need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=no hardcode_into_libs=yes dynamic_linker='ldqnx.so' ;; openbsd*) version_type=sunos sys_lib_dlsearch_path_spec="/usr/lib" need_lib_prefix=no # Some older versions of OpenBSD (3.3 at least) *do* need versioned libs. case $host_os in openbsd3.3 | openbsd3.3.*) need_version=yes ;; *) need_version=no ;; esac library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix' finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir' shlibpath_var=LD_LIBRARY_PATH if test -z "`echo __ELF__ | $CC -E - | $GREP __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then case $host_os in openbsd2.[[89]] | openbsd2.[[89]].*) shlibpath_overrides_runpath=no ;; *) shlibpath_overrides_runpath=yes ;; esac else shlibpath_overrides_runpath=yes fi ;; os2*) libname_spec='$name' shrext_cmds=".dll" need_lib_prefix=no library_names_spec='$libname${shared_ext} $libname.a' dynamic_linker='OS/2 ld.exe' shlibpath_var=LIBPATH ;; osf3* | osf4* | osf5*) version_type=osf need_lib_prefix=no need_version=no soname_spec='${libname}${release}${shared_ext}$major' library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' shlibpath_var=LD_LIBRARY_PATH sys_lib_search_path_spec="/usr/shlib /usr/ccs/lib /usr/lib/cmplrs/cc /usr/lib /usr/local/lib /var/shlib" sys_lib_dlsearch_path_spec="$sys_lib_search_path_spec" ;; rdos*) dynamic_linker=no ;; solaris*) version_type=linux # correct to gnu/linux during the next big refactor need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes hardcode_into_libs=yes # ldd complains unless libraries are executable postinstall_cmds='chmod +x $lib' ;; sunos4*) version_type=sunos library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix' finish_cmds='PATH="\$PATH:/usr/etc" ldconfig $libdir' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes if test "$with_gnu_ld" = yes; then need_lib_prefix=no fi need_version=yes ;; sysv4 | sysv4.3*) version_type=linux # correct to gnu/linux during the next big refactor library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' shlibpath_var=LD_LIBRARY_PATH case $host_vendor in sni) shlibpath_overrides_runpath=no need_lib_prefix=no runpath_var=LD_RUN_PATH ;; siemens) need_lib_prefix=no ;; motorola) need_lib_prefix=no need_version=no shlibpath_overrides_runpath=no sys_lib_search_path_spec='/lib /usr/lib /usr/ccs/lib' ;; esac ;; sysv4*MP*) if test -d /usr/nec ;then version_type=linux # correct to gnu/linux during the next big refactor library_names_spec='$libname${shared_ext}.$versuffix $libname${shared_ext}.$major $libname${shared_ext}' soname_spec='$libname${shared_ext}.$major' shlibpath_var=LD_LIBRARY_PATH fi ;; sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX* | sysv4*uw2*) version_type=freebsd-elf need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext} $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes hardcode_into_libs=yes if test "$with_gnu_ld" = yes; then sys_lib_search_path_spec='/usr/local/lib /usr/gnu/lib /usr/ccs/lib /usr/lib /lib' else sys_lib_search_path_spec='/usr/ccs/lib /usr/lib' case $host_os in sco3.2v5*) sys_lib_search_path_spec="$sys_lib_search_path_spec /lib" ;; esac fi sys_lib_dlsearch_path_spec='/usr/lib' ;; tpf*) # TPF is a cross-target only. Preferred cross-host = GNU/Linux. version_type=linux # correct to gnu/linux during the next big refactor need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=no hardcode_into_libs=yes ;; uts4*) version_type=linux # correct to gnu/linux during the next big refactor library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' shlibpath_var=LD_LIBRARY_PATH ;; *) dynamic_linker=no ;; esac AC_MSG_RESULT([$dynamic_linker]) test "$dynamic_linker" = no && can_build_shared=no variables_saved_for_relink="PATH $shlibpath_var $runpath_var" if test "$GCC" = yes; then variables_saved_for_relink="$variables_saved_for_relink GCC_EXEC_PREFIX COMPILER_PATH LIBRARY_PATH" fi if test "${lt_cv_sys_lib_search_path_spec+set}" = set; then sys_lib_search_path_spec="$lt_cv_sys_lib_search_path_spec" fi if test "${lt_cv_sys_lib_dlsearch_path_spec+set}" = set; then sys_lib_dlsearch_path_spec="$lt_cv_sys_lib_dlsearch_path_spec" fi _LT_DECL([], [variables_saved_for_relink], [1], [Variables whose values should be saved in libtool wrapper scripts and restored at link time]) _LT_DECL([], [need_lib_prefix], [0], [Do we need the "lib" prefix for modules?]) _LT_DECL([], [need_version], [0], [Do we need a version for libraries?]) _LT_DECL([], [version_type], [0], [Library versioning type]) _LT_DECL([], [runpath_var], [0], [Shared library runtime path variable]) _LT_DECL([], [shlibpath_var], [0],[Shared library path variable]) _LT_DECL([], [shlibpath_overrides_runpath], [0], [Is shlibpath searched before the hard-coded library search path?]) _LT_DECL([], [libname_spec], [1], [Format of library name prefix]) _LT_DECL([], [library_names_spec], [1], [[List of archive names. First name is the real one, the rest are links. The last name is the one that the linker finds with -lNAME]]) _LT_DECL([], [soname_spec], [1], [[The coded name of the library, if different from the real name]]) _LT_DECL([], [install_override_mode], [1], [Permission mode override for installation of shared libraries]) _LT_DECL([], [postinstall_cmds], [2], [Command to use after installation of a shared archive]) _LT_DECL([], [postuninstall_cmds], [2], [Command to use after uninstallation of a shared archive]) _LT_DECL([], [finish_cmds], [2], [Commands used to finish a libtool library installation in a directory]) _LT_DECL([], [finish_eval], [1], [[As "finish_cmds", except a single script fragment to be evaled but not shown]]) _LT_DECL([], [hardcode_into_libs], [0], [Whether we should hardcode library paths into libraries]) _LT_DECL([], [sys_lib_search_path_spec], [2], [Compile-time system search path for libraries]) _LT_DECL([], [sys_lib_dlsearch_path_spec], [2], [Run-time system search path for libraries]) ])# _LT_SYS_DYNAMIC_LINKER # _LT_PATH_TOOL_PREFIX(TOOL) # -------------------------- # find a file program which can recognize shared library AC_DEFUN([_LT_PATH_TOOL_PREFIX], [m4_require([_LT_DECL_EGREP])dnl AC_MSG_CHECKING([for $1]) AC_CACHE_VAL(lt_cv_path_MAGIC_CMD, [case $MAGIC_CMD in [[\\/*] | ?:[\\/]*]) lt_cv_path_MAGIC_CMD="$MAGIC_CMD" # Let the user override the test with a path. ;; *) lt_save_MAGIC_CMD="$MAGIC_CMD" lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR dnl $ac_dummy forces splitting on constant user-supplied paths. dnl POSIX.2 word splitting is done only on the output of word expansions, dnl not every word. This closes a longstanding sh security hole. ac_dummy="m4_if([$2], , $PATH, [$2])" for ac_dir in $ac_dummy; do IFS="$lt_save_ifs" test -z "$ac_dir" && ac_dir=. if test -f $ac_dir/$1; then lt_cv_path_MAGIC_CMD="$ac_dir/$1" if test -n "$file_magic_test_file"; then case $deplibs_check_method in "file_magic "*) file_magic_regex=`expr "$deplibs_check_method" : "file_magic \(.*\)"` MAGIC_CMD="$lt_cv_path_MAGIC_CMD" if eval $file_magic_cmd \$file_magic_test_file 2> /dev/null | $EGREP "$file_magic_regex" > /dev/null; then : else cat <<_LT_EOF 1>&2 *** Warning: the command libtool uses to detect shared libraries, *** $file_magic_cmd, produces output that libtool cannot recognize. *** The result is that libtool may fail to recognize shared libraries *** as such. This will affect the creation of libtool libraries that *** depend on shared libraries, but programs linked with such libtool *** libraries will work regardless of this problem. Nevertheless, you *** may want to report the problem to your system manager and/or to *** bug-libtool@gnu.org _LT_EOF fi ;; esac fi break fi done IFS="$lt_save_ifs" MAGIC_CMD="$lt_save_MAGIC_CMD" ;; esac]) MAGIC_CMD="$lt_cv_path_MAGIC_CMD" if test -n "$MAGIC_CMD"; then AC_MSG_RESULT($MAGIC_CMD) else AC_MSG_RESULT(no) fi _LT_DECL([], [MAGIC_CMD], [0], [Used to examine libraries when file_magic_cmd begins with "file"])dnl ])# _LT_PATH_TOOL_PREFIX # Old name: AU_ALIAS([AC_PATH_TOOL_PREFIX], [_LT_PATH_TOOL_PREFIX]) dnl aclocal-1.4 backwards compatibility: dnl AC_DEFUN([AC_PATH_TOOL_PREFIX], []) # _LT_PATH_MAGIC # -------------- # find a file program which can recognize a shared library m4_defun([_LT_PATH_MAGIC], [_LT_PATH_TOOL_PREFIX(${ac_tool_prefix}file, /usr/bin$PATH_SEPARATOR$PATH) if test -z "$lt_cv_path_MAGIC_CMD"; then if test -n "$ac_tool_prefix"; then _LT_PATH_TOOL_PREFIX(file, /usr/bin$PATH_SEPARATOR$PATH) else MAGIC_CMD=: fi fi ])# _LT_PATH_MAGIC # LT_PATH_LD # ---------- # find the pathname to the GNU or non-GNU linker AC_DEFUN([LT_PATH_LD], [AC_REQUIRE([AC_PROG_CC])dnl AC_REQUIRE([AC_CANONICAL_HOST])dnl AC_REQUIRE([AC_CANONICAL_BUILD])dnl m4_require([_LT_DECL_SED])dnl m4_require([_LT_DECL_EGREP])dnl m4_require([_LT_PROG_ECHO_BACKSLASH])dnl AC_ARG_WITH([gnu-ld], [AS_HELP_STRING([--with-gnu-ld], [assume the C compiler uses GNU ld @<:@default=no@:>@])], [test "$withval" = no || with_gnu_ld=yes], [with_gnu_ld=no])dnl ac_prog=ld if test "$GCC" = yes; then # Check if gcc -print-prog-name=ld gives a path. AC_MSG_CHECKING([for ld used by $CC]) case $host in *-*-mingw*) # gcc leaves a trailing carriage return which upsets mingw ac_prog=`($CC -print-prog-name=ld) 2>&5 | tr -d '\015'` ;; *) ac_prog=`($CC -print-prog-name=ld) 2>&5` ;; esac case $ac_prog in # Accept absolute paths. [[\\/]]* | ?:[[\\/]]*) re_direlt='/[[^/]][[^/]]*/\.\./' # Canonicalize the pathname of ld ac_prog=`$ECHO "$ac_prog"| $SED 's%\\\\%/%g'` while $ECHO "$ac_prog" | $GREP "$re_direlt" > /dev/null 2>&1; do ac_prog=`$ECHO $ac_prog| $SED "s%$re_direlt%/%"` done test -z "$LD" && LD="$ac_prog" ;; "") # If it fails, then pretend we aren't using GCC. ac_prog=ld ;; *) # If it is relative, then search for the first ld in PATH. with_gnu_ld=unknown ;; esac elif test "$with_gnu_ld" = yes; then AC_MSG_CHECKING([for GNU ld]) else AC_MSG_CHECKING([for non-GNU ld]) fi AC_CACHE_VAL(lt_cv_path_LD, [if test -z "$LD"; then lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR for ac_dir in $PATH; do IFS="$lt_save_ifs" test -z "$ac_dir" && ac_dir=. if test -f "$ac_dir/$ac_prog" || test -f "$ac_dir/$ac_prog$ac_exeext"; then lt_cv_path_LD="$ac_dir/$ac_prog" # Check to see if the program is GNU ld. I'd rather use --version, # but apparently some variants of GNU ld only accept -v. # Break only if it was the GNU/non-GNU ld that we prefer. case `"$lt_cv_path_LD" -v 2>&1 &1 /dev/null 2>&1; then lt_cv_deplibs_check_method='file_magic ^x86 archive import|^x86 DLL' lt_cv_file_magic_cmd='func_win32_libid' else # Keep this pattern in sync with the one in func_win32_libid. lt_cv_deplibs_check_method='file_magic file format (pei*-i386(.*architecture: i386)?|pe-arm-wince|pe-x86-64)' lt_cv_file_magic_cmd='$OBJDUMP -f' fi ;; cegcc*) # use the weaker test based on 'objdump'. See mingw*. lt_cv_deplibs_check_method='file_magic file format pe-arm-.*little(.*architecture: arm)?' lt_cv_file_magic_cmd='$OBJDUMP -f' ;; darwin* | rhapsody*) lt_cv_deplibs_check_method=pass_all ;; freebsd* | dragonfly*) if echo __ELF__ | $CC -E - | $GREP __ELF__ > /dev/null; then case $host_cpu in i*86 ) # Not sure whether the presence of OpenBSD here was a mistake. # Let's accept both of them until this is cleared up. lt_cv_deplibs_check_method='file_magic (FreeBSD|OpenBSD|DragonFly)/i[[3-9]]86 (compact )?demand paged shared library' lt_cv_file_magic_cmd=/usr/bin/file lt_cv_file_magic_test_file=`echo /usr/lib/libc.so.*` ;; esac else lt_cv_deplibs_check_method=pass_all fi ;; gnu*) lt_cv_deplibs_check_method=pass_all ;; haiku*) lt_cv_deplibs_check_method=pass_all ;; hpux10.20* | hpux11*) lt_cv_file_magic_cmd=/usr/bin/file case $host_cpu in ia64*) lt_cv_deplibs_check_method='file_magic (s[[0-9]][[0-9]][[0-9]]|ELF-[[0-9]][[0-9]]) shared object file - IA64' lt_cv_file_magic_test_file=/usr/lib/hpux32/libc.so ;; hppa*64*) [lt_cv_deplibs_check_method='file_magic (s[0-9][0-9][0-9]|ELF[ -][0-9][0-9])(-bit)?( [LM]SB)? shared object( file)?[, -]* PA-RISC [0-9]\.[0-9]'] lt_cv_file_magic_test_file=/usr/lib/pa20_64/libc.sl ;; *) lt_cv_deplibs_check_method='file_magic (s[[0-9]][[0-9]][[0-9]]|PA-RISC[[0-9]]\.[[0-9]]) shared library' lt_cv_file_magic_test_file=/usr/lib/libc.sl ;; esac ;; interix[[3-9]]*) # PIC code is broken on Interix 3.x, that's why |\.a not |_pic\.a here lt_cv_deplibs_check_method='match_pattern /lib[[^/]]+(\.so|\.a)$' ;; irix5* | irix6* | nonstopux*) case $LD in *-32|*"-32 ") libmagic=32-bit;; *-n32|*"-n32 ") libmagic=N32;; *-64|*"-64 ") libmagic=64-bit;; *) libmagic=never-match;; esac lt_cv_deplibs_check_method=pass_all ;; # This must be glibc/ELF. linux* | k*bsd*-gnu | kopensolaris*-gnu) lt_cv_deplibs_check_method=pass_all ;; netbsd* | netbsdelf*-gnu) if echo __ELF__ | $CC -E - | $GREP __ELF__ > /dev/null; then lt_cv_deplibs_check_method='match_pattern /lib[[^/]]+(\.so\.[[0-9]]+\.[[0-9]]+|_pic\.a)$' else lt_cv_deplibs_check_method='match_pattern /lib[[^/]]+(\.so|_pic\.a)$' fi ;; newos6*) lt_cv_deplibs_check_method='file_magic ELF [[0-9]][[0-9]]*-bit [[ML]]SB (executable|dynamic lib)' lt_cv_file_magic_cmd=/usr/bin/file lt_cv_file_magic_test_file=/usr/lib/libnls.so ;; *nto* | *qnx*) lt_cv_deplibs_check_method=pass_all ;; openbsd*) if test -z "`echo __ELF__ | $CC -E - | $GREP __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then lt_cv_deplibs_check_method='match_pattern /lib[[^/]]+(\.so\.[[0-9]]+\.[[0-9]]+|\.so|_pic\.a)$' else lt_cv_deplibs_check_method='match_pattern /lib[[^/]]+(\.so\.[[0-9]]+\.[[0-9]]+|_pic\.a)$' fi ;; osf3* | osf4* | osf5*) lt_cv_deplibs_check_method=pass_all ;; rdos*) lt_cv_deplibs_check_method=pass_all ;; solaris*) lt_cv_deplibs_check_method=pass_all ;; sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX* | sysv4*uw2*) lt_cv_deplibs_check_method=pass_all ;; sysv4 | sysv4.3*) case $host_vendor in motorola) lt_cv_deplibs_check_method='file_magic ELF [[0-9]][[0-9]]*-bit [[ML]]SB (shared object|dynamic lib) M[[0-9]][[0-9]]* Version [[0-9]]' lt_cv_file_magic_test_file=`echo /usr/lib/libc.so*` ;; ncr) lt_cv_deplibs_check_method=pass_all ;; sequent) lt_cv_file_magic_cmd='/bin/file' lt_cv_deplibs_check_method='file_magic ELF [[0-9]][[0-9]]*-bit [[LM]]SB (shared object|dynamic lib )' ;; sni) lt_cv_file_magic_cmd='/bin/file' lt_cv_deplibs_check_method="file_magic ELF [[0-9]][[0-9]]*-bit [[LM]]SB dynamic lib" lt_cv_file_magic_test_file=/lib/libc.so ;; siemens) lt_cv_deplibs_check_method=pass_all ;; pc) lt_cv_deplibs_check_method=pass_all ;; esac ;; tpf*) lt_cv_deplibs_check_method=pass_all ;; esac ]) file_magic_glob= want_nocaseglob=no if test "$build" = "$host"; then case $host_os in mingw* | pw32*) if ( shopt | grep nocaseglob ) >/dev/null 2>&1; then want_nocaseglob=yes else file_magic_glob=`echo aAbBcCdDeEfFgGhHiIjJkKlLmMnNoOpPqQrRsStTuUvVwWxXyYzZ | $SED -e "s/\(..\)/s\/[[\1]]\/[[\1]]\/g;/g"` fi ;; esac fi file_magic_cmd=$lt_cv_file_magic_cmd deplibs_check_method=$lt_cv_deplibs_check_method test -z "$deplibs_check_method" && deplibs_check_method=unknown _LT_DECL([], [deplibs_check_method], [1], [Method to check whether dependent libraries are shared objects]) _LT_DECL([], [file_magic_cmd], [1], [Command to use when deplibs_check_method = "file_magic"]) _LT_DECL([], [file_magic_glob], [1], [How to find potential files when deplibs_check_method = "file_magic"]) _LT_DECL([], [want_nocaseglob], [1], [Find potential files using nocaseglob when deplibs_check_method = "file_magic"]) ])# _LT_CHECK_MAGIC_METHOD # LT_PATH_NM # ---------- # find the pathname to a BSD- or MS-compatible name lister AC_DEFUN([LT_PATH_NM], [AC_REQUIRE([AC_PROG_CC])dnl AC_CACHE_CHECK([for BSD- or MS-compatible name lister (nm)], lt_cv_path_NM, [if test -n "$NM"; then # Let the user override the test. lt_cv_path_NM="$NM" else lt_nm_to_check="${ac_tool_prefix}nm" if test -n "$ac_tool_prefix" && test "$build" = "$host"; then lt_nm_to_check="$lt_nm_to_check nm" fi for lt_tmp_nm in $lt_nm_to_check; do lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR for ac_dir in $PATH /usr/ccs/bin/elf /usr/ccs/bin /usr/ucb /bin; do IFS="$lt_save_ifs" test -z "$ac_dir" && ac_dir=. tmp_nm="$ac_dir/$lt_tmp_nm" if test -f "$tmp_nm" || test -f "$tmp_nm$ac_exeext" ; then # Check to see if the nm accepts a BSD-compat flag. # Adding the `sed 1q' prevents false positives on HP-UX, which says: # nm: unknown option "B" ignored # Tru64's nm complains that /dev/null is an invalid object file case `"$tmp_nm" -B /dev/null 2>&1 | sed '1q'` in */dev/null* | *'Invalid file or object type'*) lt_cv_path_NM="$tmp_nm -B" break ;; *) case `"$tmp_nm" -p /dev/null 2>&1 | sed '1q'` in */dev/null*) lt_cv_path_NM="$tmp_nm -p" break ;; *) lt_cv_path_NM=${lt_cv_path_NM="$tmp_nm"} # keep the first match, but continue # so that we can try to find one that supports BSD flags ;; esac ;; esac fi done IFS="$lt_save_ifs" done : ${lt_cv_path_NM=no} fi]) if test "$lt_cv_path_NM" != "no"; then NM="$lt_cv_path_NM" else # Didn't find any BSD compatible name lister, look for dumpbin. if test -n "$DUMPBIN"; then : # Let the user override the test. else AC_CHECK_TOOLS(DUMPBIN, [dumpbin "link -dump"], :) case `$DUMPBIN -symbols /dev/null 2>&1 | sed '1q'` in *COFF*) DUMPBIN="$DUMPBIN -symbols" ;; *) DUMPBIN=: ;; esac fi AC_SUBST([DUMPBIN]) if test "$DUMPBIN" != ":"; then NM="$DUMPBIN" fi fi test -z "$NM" && NM=nm AC_SUBST([NM]) _LT_DECL([], [NM], [1], [A BSD- or MS-compatible name lister])dnl AC_CACHE_CHECK([the name lister ($NM) interface], [lt_cv_nm_interface], [lt_cv_nm_interface="BSD nm" echo "int some_variable = 0;" > conftest.$ac_ext (eval echo "\"\$as_me:$LINENO: $ac_compile\"" >&AS_MESSAGE_LOG_FD) (eval "$ac_compile" 2>conftest.err) cat conftest.err >&AS_MESSAGE_LOG_FD (eval echo "\"\$as_me:$LINENO: $NM \\\"conftest.$ac_objext\\\"\"" >&AS_MESSAGE_LOG_FD) (eval "$NM \"conftest.$ac_objext\"" 2>conftest.err > conftest.out) cat conftest.err >&AS_MESSAGE_LOG_FD (eval echo "\"\$as_me:$LINENO: output\"" >&AS_MESSAGE_LOG_FD) cat conftest.out >&AS_MESSAGE_LOG_FD if $GREP 'External.*some_variable' conftest.out > /dev/null; then lt_cv_nm_interface="MS dumpbin" fi rm -f conftest*]) ])# LT_PATH_NM # Old names: AU_ALIAS([AM_PROG_NM], [LT_PATH_NM]) AU_ALIAS([AC_PROG_NM], [LT_PATH_NM]) dnl aclocal-1.4 backwards compatibility: dnl AC_DEFUN([AM_PROG_NM], []) dnl AC_DEFUN([AC_PROG_NM], []) # _LT_CHECK_SHAREDLIB_FROM_LINKLIB # -------------------------------- # how to determine the name of the shared library # associated with a specific link library. # -- PORTME fill in with the dynamic library characteristics m4_defun([_LT_CHECK_SHAREDLIB_FROM_LINKLIB], [m4_require([_LT_DECL_EGREP]) m4_require([_LT_DECL_OBJDUMP]) m4_require([_LT_DECL_DLLTOOL]) AC_CACHE_CHECK([how to associate runtime and link libraries], lt_cv_sharedlib_from_linklib_cmd, [lt_cv_sharedlib_from_linklib_cmd='unknown' case $host_os in cygwin* | mingw* | pw32* | cegcc*) # two different shell functions defined in ltmain.sh # decide which to use based on capabilities of $DLLTOOL case `$DLLTOOL --help 2>&1` in *--identify-strict*) lt_cv_sharedlib_from_linklib_cmd=func_cygming_dll_for_implib ;; *) lt_cv_sharedlib_from_linklib_cmd=func_cygming_dll_for_implib_fallback ;; esac ;; *) # fallback: assume linklib IS sharedlib lt_cv_sharedlib_from_linklib_cmd="$ECHO" ;; esac ]) sharedlib_from_linklib_cmd=$lt_cv_sharedlib_from_linklib_cmd test -z "$sharedlib_from_linklib_cmd" && sharedlib_from_linklib_cmd=$ECHO _LT_DECL([], [sharedlib_from_linklib_cmd], [1], [Command to associate shared and link libraries]) ])# _LT_CHECK_SHAREDLIB_FROM_LINKLIB # _LT_PATH_MANIFEST_TOOL # ---------------------- # locate the manifest tool m4_defun([_LT_PATH_MANIFEST_TOOL], [AC_CHECK_TOOL(MANIFEST_TOOL, mt, :) test -z "$MANIFEST_TOOL" && MANIFEST_TOOL=mt AC_CACHE_CHECK([if $MANIFEST_TOOL is a manifest tool], [lt_cv_path_mainfest_tool], [lt_cv_path_mainfest_tool=no echo "$as_me:$LINENO: $MANIFEST_TOOL '-?'" >&AS_MESSAGE_LOG_FD $MANIFEST_TOOL '-?' 2>conftest.err > conftest.out cat conftest.err >&AS_MESSAGE_LOG_FD if $GREP 'Manifest Tool' conftest.out > /dev/null; then lt_cv_path_mainfest_tool=yes fi rm -f conftest*]) if test "x$lt_cv_path_mainfest_tool" != xyes; then MANIFEST_TOOL=: fi _LT_DECL([], [MANIFEST_TOOL], [1], [Manifest tool])dnl ])# _LT_PATH_MANIFEST_TOOL # LT_LIB_M # -------- # check for math library AC_DEFUN([LT_LIB_M], [AC_REQUIRE([AC_CANONICAL_HOST])dnl LIBM= case $host in *-*-beos* | *-*-cegcc* | *-*-cygwin* | *-*-haiku* | *-*-pw32* | *-*-darwin*) # These system don't have libm, or don't need it ;; *-ncr-sysv4.3*) AC_CHECK_LIB(mw, _mwvalidcheckl, LIBM="-lmw") AC_CHECK_LIB(m, cos, LIBM="$LIBM -lm") ;; *) AC_CHECK_LIB(m, cos, LIBM="-lm") ;; esac AC_SUBST([LIBM]) ])# LT_LIB_M # Old name: AU_ALIAS([AC_CHECK_LIBM], [LT_LIB_M]) dnl aclocal-1.4 backwards compatibility: dnl AC_DEFUN([AC_CHECK_LIBM], []) # _LT_COMPILER_NO_RTTI([TAGNAME]) # ------------------------------- m4_defun([_LT_COMPILER_NO_RTTI], [m4_require([_LT_TAG_COMPILER])dnl _LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)= if test "$GCC" = yes; then case $cc_basename in nvcc*) _LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)=' -Xcompiler -fno-builtin' ;; *) _LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)=' -fno-builtin' ;; esac _LT_COMPILER_OPTION([if $compiler supports -fno-rtti -fno-exceptions], lt_cv_prog_compiler_rtti_exceptions, [-fno-rtti -fno-exceptions], [], [_LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)="$_LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1) -fno-rtti -fno-exceptions"]) fi _LT_TAGDECL([no_builtin_flag], [lt_prog_compiler_no_builtin_flag], [1], [Compiler flag to turn off builtin functions]) ])# _LT_COMPILER_NO_RTTI # _LT_CMD_GLOBAL_SYMBOLS # ---------------------- m4_defun([_LT_CMD_GLOBAL_SYMBOLS], [AC_REQUIRE([AC_CANONICAL_HOST])dnl AC_REQUIRE([AC_PROG_CC])dnl AC_REQUIRE([AC_PROG_AWK])dnl AC_REQUIRE([LT_PATH_NM])dnl AC_REQUIRE([LT_PATH_LD])dnl m4_require([_LT_DECL_SED])dnl m4_require([_LT_DECL_EGREP])dnl m4_require([_LT_TAG_COMPILER])dnl # Check for command to grab the raw symbol name followed by C symbol from nm. AC_MSG_CHECKING([command to parse $NM output from $compiler object]) AC_CACHE_VAL([lt_cv_sys_global_symbol_pipe], [ # These are sane defaults that work on at least a few old systems. # [They come from Ultrix. What could be older than Ultrix?!! ;)] # Character class describing NM global symbol codes. symcode='[[BCDEGRST]]' # Regexp to match symbols that can be accessed directly from C. sympat='\([[_A-Za-z]][[_A-Za-z0-9]]*\)' # Define system-specific variables. case $host_os in aix*) symcode='[[BCDT]]' ;; cygwin* | mingw* | pw32* | cegcc*) symcode='[[ABCDGISTW]]' ;; hpux*) if test "$host_cpu" = ia64; then symcode='[[ABCDEGRST]]' fi ;; irix* | nonstopux*) symcode='[[BCDEGRST]]' ;; osf*) symcode='[[BCDEGQRST]]' ;; solaris*) symcode='[[BDRT]]' ;; sco3.2v5*) symcode='[[DT]]' ;; sysv4.2uw2*) symcode='[[DT]]' ;; sysv5* | sco5v6* | unixware* | OpenUNIX*) symcode='[[ABDT]]' ;; sysv4) symcode='[[DFNSTU]]' ;; esac # If we're using GNU nm, then use its standard symbol codes. case `$NM -V 2>&1` in *GNU* | *'with BFD'*) symcode='[[ABCDGIRSTW]]' ;; esac # Transform an extracted symbol line into a proper C declaration. # Some systems (esp. on ia64) link data and code symbols differently, # so use this general approach. lt_cv_sys_global_symbol_to_cdecl="sed -n -e 's/^T .* \(.*\)$/extern int \1();/p' -e 's/^$symcode* .* \(.*\)$/extern char \1;/p'" # Transform an extracted symbol line into symbol name and symbol address lt_cv_sys_global_symbol_to_c_name_address="sed -n -e 's/^: \([[^ ]]*\)[[ ]]*$/ {\\\"\1\\\", (void *) 0},/p' -e 's/^$symcode* \([[^ ]]*\) \([[^ ]]*\)$/ {\"\2\", (void *) \&\2},/p'" lt_cv_sys_global_symbol_to_c_name_address_lib_prefix="sed -n -e 's/^: \([[^ ]]*\)[[ ]]*$/ {\\\"\1\\\", (void *) 0},/p' -e 's/^$symcode* \([[^ ]]*\) \(lib[[^ ]]*\)$/ {\"\2\", (void *) \&\2},/p' -e 's/^$symcode* \([[^ ]]*\) \([[^ ]]*\)$/ {\"lib\2\", (void *) \&\2},/p'" # Handle CRLF in mingw tool chain opt_cr= case $build_os in mingw*) opt_cr=`$ECHO 'x\{0,1\}' | tr x '\015'` # option cr in regexp ;; esac # Try without a prefix underscore, then with it. for ac_symprfx in "" "_"; do # Transform symcode, sympat, and symprfx into a raw symbol and a C symbol. symxfrm="\\1 $ac_symprfx\\2 \\2" # Write the raw and C identifiers. if test "$lt_cv_nm_interface" = "MS dumpbin"; then # Fake it for dumpbin and say T for any non-static function # and D for any global variable. # Also find C++ and __fastcall symbols from MSVC++, # which start with @ or ?. lt_cv_sys_global_symbol_pipe="$AWK ['"\ " {last_section=section; section=\$ 3};"\ " /^COFF SYMBOL TABLE/{for(i in hide) delete hide[i]};"\ " /Section length .*#relocs.*(pick any)/{hide[last_section]=1};"\ " \$ 0!~/External *\|/{next};"\ " / 0+ UNDEF /{next}; / UNDEF \([^|]\)*()/{next};"\ " {if(hide[section]) next};"\ " {f=0}; \$ 0~/\(\).*\|/{f=1}; {printf f ? \"T \" : \"D \"};"\ " {split(\$ 0, a, /\||\r/); split(a[2], s)};"\ " s[1]~/^[@?]/{print s[1], s[1]; next};"\ " s[1]~prfx {split(s[1],t,\"@\"); print t[1], substr(t[1],length(prfx))}"\ " ' prfx=^$ac_symprfx]" else lt_cv_sys_global_symbol_pipe="sed -n -e 's/^.*[[ ]]\($symcode$symcode*\)[[ ]][[ ]]*$ac_symprfx$sympat$opt_cr$/$symxfrm/p'" fi lt_cv_sys_global_symbol_pipe="$lt_cv_sys_global_symbol_pipe | sed '/ __gnu_lto/d'" # Check to see that the pipe works correctly. pipe_works=no rm -f conftest* cat > conftest.$ac_ext <<_LT_EOF #ifdef __cplusplus extern "C" { #endif char nm_test_var; void nm_test_func(void); void nm_test_func(void){} #ifdef __cplusplus } #endif int main(){nm_test_var='a';nm_test_func();return(0);} _LT_EOF if AC_TRY_EVAL(ac_compile); then # Now try to grab the symbols. nlist=conftest.nm if AC_TRY_EVAL(NM conftest.$ac_objext \| "$lt_cv_sys_global_symbol_pipe" \> $nlist) && test -s "$nlist"; then # Try sorting and uniquifying the output. if sort "$nlist" | uniq > "$nlist"T; then mv -f "$nlist"T "$nlist" else rm -f "$nlist"T fi # Make sure that we snagged all the symbols we need. if $GREP ' nm_test_var$' "$nlist" >/dev/null; then if $GREP ' nm_test_func$' "$nlist" >/dev/null; then cat <<_LT_EOF > conftest.$ac_ext /* Keep this code in sync between libtool.m4, ltmain, lt_system.h, and tests. */ #if defined(_WIN32) || defined(__CYGWIN__) || defined(_WIN32_WCE) /* DATA imports from DLLs on WIN32 con't be const, because runtime relocations are performed -- see ld's documentation on pseudo-relocs. */ # define LT@&t@_DLSYM_CONST #elif defined(__osf__) /* This system does not cope well with relocations in const data. */ # define LT@&t@_DLSYM_CONST #else # define LT@&t@_DLSYM_CONST const #endif #ifdef __cplusplus extern "C" { #endif _LT_EOF # Now generate the symbol file. eval "$lt_cv_sys_global_symbol_to_cdecl"' < "$nlist" | $GREP -v main >> conftest.$ac_ext' cat <<_LT_EOF >> conftest.$ac_ext /* The mapping between symbol names and symbols. */ LT@&t@_DLSYM_CONST struct { const char *name; void *address; } lt__PROGRAM__LTX_preloaded_symbols[[]] = { { "@PROGRAM@", (void *) 0 }, _LT_EOF $SED "s/^$symcode$symcode* \(.*\) \(.*\)$/ {\"\2\", (void *) \&\2},/" < "$nlist" | $GREP -v main >> conftest.$ac_ext cat <<\_LT_EOF >> conftest.$ac_ext {0, (void *) 0} }; /* This works around a problem in FreeBSD linker */ #ifdef FREEBSD_WORKAROUND static const void *lt_preloaded_setup() { return lt__PROGRAM__LTX_preloaded_symbols; } #endif #ifdef __cplusplus } #endif _LT_EOF # Now try linking the two files. mv conftest.$ac_objext conftstm.$ac_objext lt_globsym_save_LIBS=$LIBS lt_globsym_save_CFLAGS=$CFLAGS LIBS="conftstm.$ac_objext" CFLAGS="$CFLAGS$_LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)" if AC_TRY_EVAL(ac_link) && test -s conftest${ac_exeext}; then pipe_works=yes fi LIBS=$lt_globsym_save_LIBS CFLAGS=$lt_globsym_save_CFLAGS else echo "cannot find nm_test_func in $nlist" >&AS_MESSAGE_LOG_FD fi else echo "cannot find nm_test_var in $nlist" >&AS_MESSAGE_LOG_FD fi else echo "cannot run $lt_cv_sys_global_symbol_pipe" >&AS_MESSAGE_LOG_FD fi else echo "$progname: failed program was:" >&AS_MESSAGE_LOG_FD cat conftest.$ac_ext >&5 fi rm -rf conftest* conftst* # Do not use the global_symbol_pipe unless it works. if test "$pipe_works" = yes; then break else lt_cv_sys_global_symbol_pipe= fi done ]) if test -z "$lt_cv_sys_global_symbol_pipe"; then lt_cv_sys_global_symbol_to_cdecl= fi if test -z "$lt_cv_sys_global_symbol_pipe$lt_cv_sys_global_symbol_to_cdecl"; then AC_MSG_RESULT(failed) else AC_MSG_RESULT(ok) fi # Response file support. if test "$lt_cv_nm_interface" = "MS dumpbin"; then nm_file_list_spec='@' elif $NM --help 2>/dev/null | grep '[[@]]FILE' >/dev/null; then nm_file_list_spec='@' fi _LT_DECL([global_symbol_pipe], [lt_cv_sys_global_symbol_pipe], [1], [Take the output of nm and produce a listing of raw symbols and C names]) _LT_DECL([global_symbol_to_cdecl], [lt_cv_sys_global_symbol_to_cdecl], [1], [Transform the output of nm in a proper C declaration]) _LT_DECL([global_symbol_to_c_name_address], [lt_cv_sys_global_symbol_to_c_name_address], [1], [Transform the output of nm in a C name address pair]) _LT_DECL([global_symbol_to_c_name_address_lib_prefix], [lt_cv_sys_global_symbol_to_c_name_address_lib_prefix], [1], [Transform the output of nm in a C name address pair when lib prefix is needed]) _LT_DECL([], [nm_file_list_spec], [1], [Specify filename containing input files for $NM]) ]) # _LT_CMD_GLOBAL_SYMBOLS # _LT_COMPILER_PIC([TAGNAME]) # --------------------------- m4_defun([_LT_COMPILER_PIC], [m4_require([_LT_TAG_COMPILER])dnl _LT_TAGVAR(lt_prog_compiler_wl, $1)= _LT_TAGVAR(lt_prog_compiler_pic, $1)= _LT_TAGVAR(lt_prog_compiler_static, $1)= m4_if([$1], [CXX], [ # C++ specific cases for pic, static, wl, etc. if test "$GXX" = yes; then _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' _LT_TAGVAR(lt_prog_compiler_static, $1)='-static' case $host_os in aix*) # All AIX code is PIC. if test "$host_cpu" = ia64; then # AIX 5 now supports IA64 processor _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' fi ;; amigaos*) case $host_cpu in powerpc) # see comment about AmigaOS4 .so support _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' ;; m68k) # FIXME: we need at least 68020 code to build shared libraries, but # adding the `-m68020' flag to GCC prevents building anything better, # like `-m68040'. _LT_TAGVAR(lt_prog_compiler_pic, $1)='-m68020 -resident32 -malways-restore-a4' ;; esac ;; beos* | irix5* | irix6* | nonstopux* | osf3* | osf4* | osf5*) # PIC is the default for these OSes. ;; mingw* | cygwin* | os2* | pw32* | cegcc*) # This hack is so that the source file can tell whether it is being # built for inclusion in a dll (and should export symbols for example). # Although the cygwin gcc ignores -fPIC, still need this for old-style # (--disable-auto-import) libraries m4_if([$1], [GCJ], [], [_LT_TAGVAR(lt_prog_compiler_pic, $1)='-DDLL_EXPORT']) ;; darwin* | rhapsody*) # PIC is the default on this platform # Common symbols not allowed in MH_DYLIB files _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fno-common' ;; *djgpp*) # DJGPP does not support shared libraries at all _LT_TAGVAR(lt_prog_compiler_pic, $1)= ;; haiku*) # PIC is the default for Haiku. # The "-static" flag exists, but is broken. _LT_TAGVAR(lt_prog_compiler_static, $1)= ;; interix[[3-9]]*) # Interix 3.x gcc -fpic/-fPIC options generate broken code. # Instead, we relocate shared libraries at runtime. ;; sysv4*MP*) if test -d /usr/nec; then _LT_TAGVAR(lt_prog_compiler_pic, $1)=-Kconform_pic fi ;; hpux*) # PIC is the default for 64-bit PA HP-UX, but not for 32-bit # PA HP-UX. On IA64 HP-UX, PIC is the default but the pic flag # sets the default TLS model and affects inlining. case $host_cpu in hppa*64*) ;; *) _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' ;; esac ;; *qnx* | *nto*) # QNX uses GNU C++, but need to define -shared option too, otherwise # it will coredump. _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC -shared' ;; *) _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' ;; esac else case $host_os in aix[[4-9]]*) # All AIX code is PIC. if test "$host_cpu" = ia64; then # AIX 5 now supports IA64 processor _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' else _LT_TAGVAR(lt_prog_compiler_static, $1)='-bnso -bI:/lib/syscalls.exp' fi ;; chorus*) case $cc_basename in cxch68*) # Green Hills C++ Compiler # _LT_TAGVAR(lt_prog_compiler_static, $1)="--no_auto_instantiation -u __main -u __premain -u _abort -r $COOL_DIR/lib/libOrb.a $MVME_DIR/lib/CC/libC.a $MVME_DIR/lib/classix/libcx.s.a" ;; esac ;; mingw* | cygwin* | os2* | pw32* | cegcc*) # This hack is so that the source file can tell whether it is being # built for inclusion in a dll (and should export symbols for example). m4_if([$1], [GCJ], [], [_LT_TAGVAR(lt_prog_compiler_pic, $1)='-DDLL_EXPORT']) ;; dgux*) case $cc_basename in ec++*) _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' ;; ghcx*) # Green Hills C++ Compiler _LT_TAGVAR(lt_prog_compiler_pic, $1)='-pic' ;; *) ;; esac ;; freebsd* | dragonfly*) # FreeBSD uses GNU C++ ;; hpux9* | hpux10* | hpux11*) case $cc_basename in CC*) _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' _LT_TAGVAR(lt_prog_compiler_static, $1)='${wl}-a ${wl}archive' if test "$host_cpu" != ia64; then _LT_TAGVAR(lt_prog_compiler_pic, $1)='+Z' fi ;; aCC*) _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' _LT_TAGVAR(lt_prog_compiler_static, $1)='${wl}-a ${wl}archive' case $host_cpu in hppa*64*|ia64*) # +Z the default ;; *) _LT_TAGVAR(lt_prog_compiler_pic, $1)='+Z' ;; esac ;; *) ;; esac ;; interix*) # This is c89, which is MS Visual C++ (no shared libs) # Anyone wants to do a port? ;; irix5* | irix6* | nonstopux*) case $cc_basename in CC*) _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' _LT_TAGVAR(lt_prog_compiler_static, $1)='-non_shared' # CC pic flag -KPIC is the default. ;; *) ;; esac ;; linux* | k*bsd*-gnu | kopensolaris*-gnu) case $cc_basename in KCC*) # KAI C++ Compiler _LT_TAGVAR(lt_prog_compiler_wl, $1)='--backend -Wl,' _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' ;; ecpc* ) # old Intel C++ for x86_64 which still supported -KPIC. _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' _LT_TAGVAR(lt_prog_compiler_static, $1)='-static' ;; icpc* ) # Intel C++, used to be incompatible with GCC. # ICC 10 doesn't accept -KPIC any more. _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' _LT_TAGVAR(lt_prog_compiler_static, $1)='-static' ;; pgCC* | pgcpp*) # Portland Group C++ compiler _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fpic' _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' ;; cxx*) # Compaq C++ # Make sure the PIC flag is empty. It appears that all Alpha # Linux and Compaq Tru64 Unix objects are PIC. _LT_TAGVAR(lt_prog_compiler_pic, $1)= _LT_TAGVAR(lt_prog_compiler_static, $1)='-non_shared' ;; xlc* | xlC* | bgxl[[cC]]* | mpixl[[cC]]*) # IBM XL 8.0, 9.0 on PPC and BlueGene _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' _LT_TAGVAR(lt_prog_compiler_pic, $1)='-qpic' _LT_TAGVAR(lt_prog_compiler_static, $1)='-qstaticlink' ;; *) case `$CC -V 2>&1 | sed 5q` in *Sun\ C*) # Sun C++ 5.9 _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Qoption ld ' ;; esac ;; esac ;; lynxos*) ;; m88k*) ;; mvs*) case $cc_basename in cxx*) _LT_TAGVAR(lt_prog_compiler_pic, $1)='-W c,exportall' ;; *) ;; esac ;; netbsd* | netbsdelf*-gnu) ;; *qnx* | *nto*) # QNX uses GNU C++, but need to define -shared option too, otherwise # it will coredump. _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC -shared' ;; osf3* | osf4* | osf5*) case $cc_basename in KCC*) _LT_TAGVAR(lt_prog_compiler_wl, $1)='--backend -Wl,' ;; RCC*) # Rational C++ 2.4.1 _LT_TAGVAR(lt_prog_compiler_pic, $1)='-pic' ;; cxx*) # Digital/Compaq C++ _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' # Make sure the PIC flag is empty. It appears that all Alpha # Linux and Compaq Tru64 Unix objects are PIC. _LT_TAGVAR(lt_prog_compiler_pic, $1)= _LT_TAGVAR(lt_prog_compiler_static, $1)='-non_shared' ;; *) ;; esac ;; psos*) ;; solaris*) case $cc_basename in CC* | sunCC*) # Sun C++ 4.2, 5.x and Centerline C++ _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Qoption ld ' ;; gcx*) # Green Hills C++ Compiler _LT_TAGVAR(lt_prog_compiler_pic, $1)='-PIC' ;; *) ;; esac ;; sunos4*) case $cc_basename in CC*) # Sun C++ 4.x _LT_TAGVAR(lt_prog_compiler_pic, $1)='-pic' _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' ;; lcc*) # Lucid _LT_TAGVAR(lt_prog_compiler_pic, $1)='-pic' ;; *) ;; esac ;; sysv5* | unixware* | sco3.2v5* | sco5v6* | OpenUNIX*) case $cc_basename in CC*) _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' ;; esac ;; tandem*) case $cc_basename in NCC*) # NonStop-UX NCC 3.20 _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' ;; *) ;; esac ;; vxworks*) ;; *) _LT_TAGVAR(lt_prog_compiler_can_build_shared, $1)=no ;; esac fi ], [ if test "$GCC" = yes; then _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' _LT_TAGVAR(lt_prog_compiler_static, $1)='-static' case $host_os in aix*) # All AIX code is PIC. if test "$host_cpu" = ia64; then # AIX 5 now supports IA64 processor _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' fi ;; amigaos*) case $host_cpu in powerpc) # see comment about AmigaOS4 .so support _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' ;; m68k) # FIXME: we need at least 68020 code to build shared libraries, but # adding the `-m68020' flag to GCC prevents building anything better, # like `-m68040'. _LT_TAGVAR(lt_prog_compiler_pic, $1)='-m68020 -resident32 -malways-restore-a4' ;; esac ;; beos* | irix5* | irix6* | nonstopux* | osf3* | osf4* | osf5*) # PIC is the default for these OSes. ;; mingw* | cygwin* | pw32* | os2* | cegcc*) # This hack is so that the source file can tell whether it is being # built for inclusion in a dll (and should export symbols for example). # Although the cygwin gcc ignores -fPIC, still need this for old-style # (--disable-auto-import) libraries m4_if([$1], [GCJ], [], [_LT_TAGVAR(lt_prog_compiler_pic, $1)='-DDLL_EXPORT']) ;; darwin* | rhapsody*) # PIC is the default on this platform # Common symbols not allowed in MH_DYLIB files _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fno-common' ;; haiku*) # PIC is the default for Haiku. # The "-static" flag exists, but is broken. _LT_TAGVAR(lt_prog_compiler_static, $1)= ;; hpux*) # PIC is the default for 64-bit PA HP-UX, but not for 32-bit # PA HP-UX. On IA64 HP-UX, PIC is the default but the pic flag # sets the default TLS model and affects inlining. case $host_cpu in hppa*64*) # +Z the default ;; *) _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' ;; esac ;; interix[[3-9]]*) # Interix 3.x gcc -fpic/-fPIC options generate broken code. # Instead, we relocate shared libraries at runtime. ;; msdosdjgpp*) # Just because we use GCC doesn't mean we suddenly get shared libraries # on systems that don't support them. _LT_TAGVAR(lt_prog_compiler_can_build_shared, $1)=no enable_shared=no ;; *nto* | *qnx*) # QNX uses GNU C++, but need to define -shared option too, otherwise # it will coredump. _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC -shared' ;; sysv4*MP*) if test -d /usr/nec; then _LT_TAGVAR(lt_prog_compiler_pic, $1)=-Kconform_pic fi ;; *) _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' ;; esac case $cc_basename in nvcc*) # Cuda Compiler Driver 2.2 _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Xlinker ' if test -n "$_LT_TAGVAR(lt_prog_compiler_pic, $1)"; then _LT_TAGVAR(lt_prog_compiler_pic, $1)="-Xcompiler $_LT_TAGVAR(lt_prog_compiler_pic, $1)" fi ;; esac else # PORTME Check for flag to pass linker flags through the system compiler. case $host_os in aix*) _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' if test "$host_cpu" = ia64; then # AIX 5 now supports IA64 processor _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' else _LT_TAGVAR(lt_prog_compiler_static, $1)='-bnso -bI:/lib/syscalls.exp' fi ;; mingw* | cygwin* | pw32* | os2* | cegcc*) # This hack is so that the source file can tell whether it is being # built for inclusion in a dll (and should export symbols for example). m4_if([$1], [GCJ], [], [_LT_TAGVAR(lt_prog_compiler_pic, $1)='-DDLL_EXPORT']) ;; hpux9* | hpux10* | hpux11*) _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' # PIC is the default for IA64 HP-UX and 64-bit HP-UX, but # not for PA HP-UX. case $host_cpu in hppa*64*|ia64*) # +Z the default ;; *) _LT_TAGVAR(lt_prog_compiler_pic, $1)='+Z' ;; esac # Is there a better lt_prog_compiler_static that works with the bundled CC? _LT_TAGVAR(lt_prog_compiler_static, $1)='${wl}-a ${wl}archive' ;; irix5* | irix6* | nonstopux*) _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' # PIC (with -KPIC) is the default. _LT_TAGVAR(lt_prog_compiler_static, $1)='-non_shared' ;; linux* | k*bsd*-gnu | kopensolaris*-gnu) case $cc_basename in # old Intel for x86_64 which still supported -KPIC. ecc*) _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' _LT_TAGVAR(lt_prog_compiler_static, $1)='-static' ;; # icc used to be incompatible with GCC. # ICC 10 doesn't accept -KPIC any more. icc* | ifort*) _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' _LT_TAGVAR(lt_prog_compiler_static, $1)='-static' ;; # Lahey Fortran 8.1. lf95*) _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' _LT_TAGVAR(lt_prog_compiler_pic, $1)='--shared' _LT_TAGVAR(lt_prog_compiler_static, $1)='--static' ;; nagfor*) # NAG Fortran compiler _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,-Wl,,' _LT_TAGVAR(lt_prog_compiler_pic, $1)='-PIC' _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' ;; pgcc* | pgf77* | pgf90* | pgf95* | pgfortran*) # Portland Group compilers (*not* the Pentium gcc compiler, # which looks to be a dead project) _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fpic' _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' ;; ccc*) _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' # All Alpha code is PIC. _LT_TAGVAR(lt_prog_compiler_static, $1)='-non_shared' ;; xl* | bgxl* | bgf* | mpixl*) # IBM XL C 8.0/Fortran 10.1, 11.1 on PPC and BlueGene _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' _LT_TAGVAR(lt_prog_compiler_pic, $1)='-qpic' _LT_TAGVAR(lt_prog_compiler_static, $1)='-qstaticlink' ;; *) case `$CC -V 2>&1 | sed 5q` in *Sun\ Ceres\ Fortran* | *Sun*Fortran*\ [[1-7]].* | *Sun*Fortran*\ 8.[[0-3]]*) # Sun Fortran 8.3 passes all unrecognized flags to the linker _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' _LT_TAGVAR(lt_prog_compiler_wl, $1)='' ;; *Sun\ F* | *Sun*Fortran*) _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Qoption ld ' ;; *Sun\ C*) # Sun C 5.9 _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' ;; *Intel*\ [[CF]]*Compiler*) _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' _LT_TAGVAR(lt_prog_compiler_static, $1)='-static' ;; *Portland\ Group*) _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fpic' _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' ;; esac ;; esac ;; newsos6) _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' ;; *nto* | *qnx*) # QNX uses GNU C++, but need to define -shared option too, otherwise # it will coredump. _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC -shared' ;; osf3* | osf4* | osf5*) _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' # All OSF/1 code is PIC. _LT_TAGVAR(lt_prog_compiler_static, $1)='-non_shared' ;; rdos*) _LT_TAGVAR(lt_prog_compiler_static, $1)='-non_shared' ;; solaris*) _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' case $cc_basename in f77* | f90* | f95* | sunf77* | sunf90* | sunf95*) _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Qoption ld ';; *) _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,';; esac ;; sunos4*) _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Qoption ld ' _LT_TAGVAR(lt_prog_compiler_pic, $1)='-PIC' _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' ;; sysv4 | sysv4.2uw2* | sysv4.3*) _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' ;; sysv4*MP*) if test -d /usr/nec ;then _LT_TAGVAR(lt_prog_compiler_pic, $1)='-Kconform_pic' _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' fi ;; sysv5* | unixware* | sco3.2v5* | sco5v6* | OpenUNIX*) _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' ;; unicos*) _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' _LT_TAGVAR(lt_prog_compiler_can_build_shared, $1)=no ;; uts4*) _LT_TAGVAR(lt_prog_compiler_pic, $1)='-pic' _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' ;; *) _LT_TAGVAR(lt_prog_compiler_can_build_shared, $1)=no ;; esac fi ]) case $host_os in # For platforms which do not support PIC, -DPIC is meaningless: *djgpp*) _LT_TAGVAR(lt_prog_compiler_pic, $1)= ;; *) _LT_TAGVAR(lt_prog_compiler_pic, $1)="$_LT_TAGVAR(lt_prog_compiler_pic, $1)@&t@m4_if([$1],[],[ -DPIC],[m4_if([$1],[CXX],[ -DPIC],[])])" ;; esac AC_CACHE_CHECK([for $compiler option to produce PIC], [_LT_TAGVAR(lt_cv_prog_compiler_pic, $1)], [_LT_TAGVAR(lt_cv_prog_compiler_pic, $1)=$_LT_TAGVAR(lt_prog_compiler_pic, $1)]) _LT_TAGVAR(lt_prog_compiler_pic, $1)=$_LT_TAGVAR(lt_cv_prog_compiler_pic, $1) # # Check to make sure the PIC flag actually works. # if test -n "$_LT_TAGVAR(lt_prog_compiler_pic, $1)"; then _LT_COMPILER_OPTION([if $compiler PIC flag $_LT_TAGVAR(lt_prog_compiler_pic, $1) works], [_LT_TAGVAR(lt_cv_prog_compiler_pic_works, $1)], [$_LT_TAGVAR(lt_prog_compiler_pic, $1)@&t@m4_if([$1],[],[ -DPIC],[m4_if([$1],[CXX],[ -DPIC],[])])], [], [case $_LT_TAGVAR(lt_prog_compiler_pic, $1) in "" | " "*) ;; *) _LT_TAGVAR(lt_prog_compiler_pic, $1)=" $_LT_TAGVAR(lt_prog_compiler_pic, $1)" ;; esac], [_LT_TAGVAR(lt_prog_compiler_pic, $1)= _LT_TAGVAR(lt_prog_compiler_can_build_shared, $1)=no]) fi _LT_TAGDECL([pic_flag], [lt_prog_compiler_pic], [1], [Additional compiler flags for building library objects]) _LT_TAGDECL([wl], [lt_prog_compiler_wl], [1], [How to pass a linker flag through the compiler]) # # Check to make sure the static flag actually works. # wl=$_LT_TAGVAR(lt_prog_compiler_wl, $1) eval lt_tmp_static_flag=\"$_LT_TAGVAR(lt_prog_compiler_static, $1)\" _LT_LINKER_OPTION([if $compiler static flag $lt_tmp_static_flag works], _LT_TAGVAR(lt_cv_prog_compiler_static_works, $1), $lt_tmp_static_flag, [], [_LT_TAGVAR(lt_prog_compiler_static, $1)=]) _LT_TAGDECL([link_static_flag], [lt_prog_compiler_static], [1], [Compiler flag to prevent dynamic linking]) ])# _LT_COMPILER_PIC # _LT_LINKER_SHLIBS([TAGNAME]) # ---------------------------- # See if the linker supports building shared libraries. m4_defun([_LT_LINKER_SHLIBS], [AC_REQUIRE([LT_PATH_LD])dnl AC_REQUIRE([LT_PATH_NM])dnl m4_require([_LT_PATH_MANIFEST_TOOL])dnl m4_require([_LT_FILEUTILS_DEFAULTS])dnl m4_require([_LT_DECL_EGREP])dnl m4_require([_LT_DECL_SED])dnl m4_require([_LT_CMD_GLOBAL_SYMBOLS])dnl m4_require([_LT_TAG_COMPILER])dnl AC_MSG_CHECKING([whether the $compiler linker ($LD) supports shared libraries]) m4_if([$1], [CXX], [ _LT_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols' _LT_TAGVAR(exclude_expsyms, $1)=['_GLOBAL_OFFSET_TABLE_|_GLOBAL__F[ID]_.*'] case $host_os in aix[[4-9]]*) # If we're using GNU nm, then we don't want the "-C" option. # -C means demangle to AIX nm, but means don't demangle with GNU nm # Also, AIX nm treats weak defined symbols like other global defined # symbols, whereas GNU nm marks them as "W". if $NM -V 2>&1 | $GREP 'GNU' > /dev/null; then _LT_TAGVAR(export_symbols_cmds, $1)='$NM -Bpg $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B") || (\$ 2 == "W")) && ([substr](\$ 3,1,1) != ".")) { print \$ 3 } }'\'' | sort -u > $export_symbols' else _LT_TAGVAR(export_symbols_cmds, $1)='$NM -BCpg $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B")) && ([substr](\$ 3,1,1) != ".")) { print \$ 3 } }'\'' | sort -u > $export_symbols' fi ;; pw32*) _LT_TAGVAR(export_symbols_cmds, $1)="$ltdll_cmds" ;; cygwin* | mingw* | cegcc*) case $cc_basename in cl*) _LT_TAGVAR(exclude_expsyms, $1)='_NULL_IMPORT_DESCRIPTOR|_IMPORT_DESCRIPTOR_.*' ;; *) _LT_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[[BCDGRS]][[ ]]/s/.*[[ ]]\([[^ ]]*\)/\1 DATA/;s/^.*[[ ]]__nm__\([[^ ]]*\)[[ ]][[^ ]]*/\1 DATA/;/^I[[ ]]/d;/^[[AITW]][[ ]]/s/.* //'\'' | sort | uniq > $export_symbols' _LT_TAGVAR(exclude_expsyms, $1)=['[_]+GLOBAL_OFFSET_TABLE_|[_]+GLOBAL__[FID]_.*|[_]+head_[A-Za-z0-9_]+_dll|[A-Za-z0-9_]+_dll_iname'] ;; esac ;; linux* | k*bsd*-gnu | gnu*) _LT_TAGVAR(link_all_deplibs, $1)=no ;; *) _LT_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols' ;; esac ], [ runpath_var= _LT_TAGVAR(allow_undefined_flag, $1)= _LT_TAGVAR(always_export_symbols, $1)=no _LT_TAGVAR(archive_cmds, $1)= _LT_TAGVAR(archive_expsym_cmds, $1)= _LT_TAGVAR(compiler_needs_object, $1)=no _LT_TAGVAR(enable_shared_with_static_runtimes, $1)=no _LT_TAGVAR(export_dynamic_flag_spec, $1)= _LT_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols' _LT_TAGVAR(hardcode_automatic, $1)=no _LT_TAGVAR(hardcode_direct, $1)=no _LT_TAGVAR(hardcode_direct_absolute, $1)=no _LT_TAGVAR(hardcode_libdir_flag_spec, $1)= _LT_TAGVAR(hardcode_libdir_separator, $1)= _LT_TAGVAR(hardcode_minus_L, $1)=no _LT_TAGVAR(hardcode_shlibpath_var, $1)=unsupported _LT_TAGVAR(inherit_rpath, $1)=no _LT_TAGVAR(link_all_deplibs, $1)=unknown _LT_TAGVAR(module_cmds, $1)= _LT_TAGVAR(module_expsym_cmds, $1)= _LT_TAGVAR(old_archive_from_new_cmds, $1)= _LT_TAGVAR(old_archive_from_expsyms_cmds, $1)= _LT_TAGVAR(thread_safe_flag_spec, $1)= _LT_TAGVAR(whole_archive_flag_spec, $1)= # include_expsyms should be a list of space-separated symbols to be *always* # included in the symbol list _LT_TAGVAR(include_expsyms, $1)= # exclude_expsyms can be an extended regexp of symbols to exclude # it will be wrapped by ` (' and `)$', so one must not match beginning or # end of line. Example: `a|bc|.*d.*' will exclude the symbols `a' and `bc', # as well as any symbol that contains `d'. _LT_TAGVAR(exclude_expsyms, $1)=['_GLOBAL_OFFSET_TABLE_|_GLOBAL__F[ID]_.*'] # Although _GLOBAL_OFFSET_TABLE_ is a valid symbol C name, most a.out # platforms (ab)use it in PIC code, but their linkers get confused if # the symbol is explicitly referenced. Since portable code cannot # rely on this symbol name, it's probably fine to never include it in # preloaded symbol tables. # Exclude shared library initialization/finalization symbols. dnl Note also adjust exclude_expsyms for C++ above. extract_expsyms_cmds= case $host_os in cygwin* | mingw* | pw32* | cegcc*) # FIXME: the MSVC++ port hasn't been tested in a loooong time # When not using gcc, we currently assume that we are using # Microsoft Visual C++. if test "$GCC" != yes; then with_gnu_ld=no fi ;; interix*) # we just hope/assume this is gcc and not c89 (= MSVC++) with_gnu_ld=yes ;; openbsd*) with_gnu_ld=no ;; linux* | k*bsd*-gnu | gnu*) _LT_TAGVAR(link_all_deplibs, $1)=no ;; esac _LT_TAGVAR(ld_shlibs, $1)=yes # On some targets, GNU ld is compatible enough with the native linker # that we're better off using the native interface for both. lt_use_gnu_ld_interface=no if test "$with_gnu_ld" = yes; then case $host_os in aix*) # The AIX port of GNU ld has always aspired to compatibility # with the native linker. However, as the warning in the GNU ld # block says, versions before 2.19.5* couldn't really create working # shared libraries, regardless of the interface used. case `$LD -v 2>&1` in *\ \(GNU\ Binutils\)\ 2.19.5*) ;; *\ \(GNU\ Binutils\)\ 2.[[2-9]]*) ;; *\ \(GNU\ Binutils\)\ [[3-9]]*) ;; *) lt_use_gnu_ld_interface=yes ;; esac ;; *) lt_use_gnu_ld_interface=yes ;; esac fi if test "$lt_use_gnu_ld_interface" = yes; then # If archive_cmds runs LD, not CC, wlarc should be empty wlarc='${wl}' # Set some defaults for GNU ld with shared library support. These # are reset later if shared libraries are not supported. Putting them # here allows them to be overridden if necessary. runpath_var=LD_RUN_PATH _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir' _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}--export-dynamic' # ancient GNU ld didn't support --whole-archive et. al. if $LD --help 2>&1 | $GREP 'no-whole-archive' > /dev/null; then _LT_TAGVAR(whole_archive_flag_spec, $1)="$wlarc"'--whole-archive$convenience '"$wlarc"'--no-whole-archive' else _LT_TAGVAR(whole_archive_flag_spec, $1)= fi supports_anon_versioning=no case `$LD -v 2>&1` in *GNU\ gold*) supports_anon_versioning=yes ;; *\ [[01]].* | *\ 2.[[0-9]].* | *\ 2.10.*) ;; # catch versions < 2.11 *\ 2.11.93.0.2\ *) supports_anon_versioning=yes ;; # RH7.3 ... *\ 2.11.92.0.12\ *) supports_anon_versioning=yes ;; # Mandrake 8.2 ... *\ 2.11.*) ;; # other 2.11 versions *) supports_anon_versioning=yes ;; esac # See if GNU ld supports shared libraries. case $host_os in aix[[3-9]]*) # On AIX/PPC, the GNU linker is very broken if test "$host_cpu" != ia64; then _LT_TAGVAR(ld_shlibs, $1)=no cat <<_LT_EOF 1>&2 *** Warning: the GNU linker, at least up to release 2.19, is reported *** to be unable to reliably create shared libraries on AIX. *** Therefore, libtool is disabling shared libraries support. If you *** really care for shared libraries, you may want to install binutils *** 2.20 or above, or modify your PATH so that a non-GNU linker is found. *** You will then need to restart the configuration process. _LT_EOF fi ;; amigaos*) case $host_cpu in powerpc) # see comment about AmigaOS4 .so support _LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' _LT_TAGVAR(archive_expsym_cmds, $1)='' ;; m68k) _LT_TAGVAR(archive_cmds, $1)='$RM $output_objdir/a2ixlibrary.data~$ECHO "#define NAME $libname" > $output_objdir/a2ixlibrary.data~$ECHO "#define LIBRARY_ID 1" >> $output_objdir/a2ixlibrary.data~$ECHO "#define VERSION $major" >> $output_objdir/a2ixlibrary.data~$ECHO "#define REVISION $revision" >> $output_objdir/a2ixlibrary.data~$AR $AR_FLAGS $lib $libobjs~$RANLIB $lib~(cd $output_objdir && a2ixlibrary -32)' _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' _LT_TAGVAR(hardcode_minus_L, $1)=yes ;; esac ;; beos*) if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then _LT_TAGVAR(allow_undefined_flag, $1)=unsupported # Joseph Beckenbach says some releases of gcc # support --undefined. This deserves some investigation. FIXME _LT_TAGVAR(archive_cmds, $1)='$CC -nostart $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' else _LT_TAGVAR(ld_shlibs, $1)=no fi ;; cygwin* | mingw* | pw32* | cegcc*) # _LT_TAGVAR(hardcode_libdir_flag_spec, $1) is actually meaningless, # as there is no search path for DLLs. _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}--export-all-symbols' _LT_TAGVAR(allow_undefined_flag, $1)=unsupported _LT_TAGVAR(always_export_symbols, $1)=no _LT_TAGVAR(enable_shared_with_static_runtimes, $1)=yes _LT_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[[BCDGRS]][[ ]]/s/.*[[ ]]\([[^ ]]*\)/\1 DATA/;s/^.*[[ ]]__nm__\([[^ ]]*\)[[ ]][[^ ]]*/\1 DATA/;/^I[[ ]]/d;/^[[AITW]][[ ]]/s/.* //'\'' | sort | uniq > $export_symbols' _LT_TAGVAR(exclude_expsyms, $1)=['[_]+GLOBAL_OFFSET_TABLE_|[_]+GLOBAL__[FID]_.*|[_]+head_[A-Za-z0-9_]+_dll|[A-Za-z0-9_]+_dll_iname'] if $LD --help 2>&1 | $GREP 'auto-import' > /dev/null; then _LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib' # If the export-symbols file already is a .def file (1st line # is EXPORTS), use it as is; otherwise, prepend... _LT_TAGVAR(archive_expsym_cmds, $1)='if test "x`$SED 1q $export_symbols`" = xEXPORTS; then cp $export_symbols $output_objdir/$soname.def; else echo EXPORTS > $output_objdir/$soname.def; cat $export_symbols >> $output_objdir/$soname.def; fi~ $CC -shared $output_objdir/$soname.def $libobjs $deplibs $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib' else _LT_TAGVAR(ld_shlibs, $1)=no fi ;; haiku*) _LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' _LT_TAGVAR(link_all_deplibs, $1)=yes ;; interix[[3-9]]*) _LT_TAGVAR(hardcode_direct, $1)=no _LT_TAGVAR(hardcode_shlibpath_var, $1)=no _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir' _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E' # Hack: On Interix 3.x, we cannot compile PIC because of a broken gcc. # Instead, shared libraries are loaded at an image base (0x10000000 by # default) and relocated if they conflict, which is a slow very memory # consuming and fragmenting process. To avoid this, we pick a random, # 256 KiB-aligned image base between 0x50000000 and 0x6FFC0000 at link # time. Moving up from 0x10000000 also allows more sbrk(2) space. _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-h,$soname ${wl}--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib' _LT_TAGVAR(archive_expsym_cmds, $1)='sed "s,^,_," $export_symbols >$output_objdir/$soname.expsym~$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-h,$soname ${wl}--retain-symbols-file,$output_objdir/$soname.expsym ${wl}--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib' ;; gnu* | linux* | tpf* | k*bsd*-gnu | kopensolaris*-gnu) tmp_diet=no if test "$host_os" = linux-dietlibc; then case $cc_basename in diet\ *) tmp_diet=yes;; # linux-dietlibc with static linking (!diet-dyn) esac fi if $LD --help 2>&1 | $EGREP ': supported targets:.* elf' > /dev/null \ && test "$tmp_diet" = no then tmp_addflag=' $pic_flag' tmp_sharedflag='-shared' case $cc_basename,$host_cpu in pgcc*) # Portland Group C compiler _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}--whole-archive`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` ${wl}--no-whole-archive' tmp_addflag=' $pic_flag' ;; pgf77* | pgf90* | pgf95* | pgfortran*) # Portland Group f77 and f90 compilers _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}--whole-archive`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` ${wl}--no-whole-archive' tmp_addflag=' $pic_flag -Mnomain' ;; ecc*,ia64* | icc*,ia64*) # Intel C compiler on ia64 tmp_addflag=' -i_dynamic' ;; efc*,ia64* | ifort*,ia64*) # Intel Fortran compiler on ia64 tmp_addflag=' -i_dynamic -nofor_main' ;; ifc* | ifort*) # Intel Fortran compiler tmp_addflag=' -nofor_main' ;; lf95*) # Lahey Fortran 8.1 _LT_TAGVAR(whole_archive_flag_spec, $1)= tmp_sharedflag='--shared' ;; xl[[cC]]* | bgxl[[cC]]* | mpixl[[cC]]*) # IBM XL C 8.0 on PPC (deal with xlf below) tmp_sharedflag='-qmkshrobj' tmp_addflag= ;; nvcc*) # Cuda Compiler Driver 2.2 _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}--whole-archive`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` ${wl}--no-whole-archive' _LT_TAGVAR(compiler_needs_object, $1)=yes ;; esac case `$CC -V 2>&1 | sed 5q` in *Sun\ C*) # Sun C 5.9 _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}--whole-archive`new_convenience=; for conv in $convenience\"\"; do test -z \"$conv\" || new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` ${wl}--no-whole-archive' _LT_TAGVAR(compiler_needs_object, $1)=yes tmp_sharedflag='-G' ;; *Sun\ F*) # Sun Fortran 8.3 tmp_sharedflag='-G' ;; esac _LT_TAGVAR(archive_cmds, $1)='$CC '"$tmp_sharedflag""$tmp_addflag"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' if test "x$supports_anon_versioning" = xyes; then _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $output_objdir/$libname.ver~ cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~ echo "local: *; };" >> $output_objdir/$libname.ver~ $CC '"$tmp_sharedflag""$tmp_addflag"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-version-script ${wl}$output_objdir/$libname.ver -o $lib' fi case $cc_basename in xlf* | bgf* | bgxlf* | mpixlf*) # IBM XL Fortran 10.1 on PPC cannot create shared libs itself _LT_TAGVAR(whole_archive_flag_spec, $1)='--whole-archive$convenience --no-whole-archive' _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir' _LT_TAGVAR(archive_cmds, $1)='$LD -shared $libobjs $deplibs $linker_flags -soname $soname -o $lib' if test "x$supports_anon_versioning" = xyes; then _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $output_objdir/$libname.ver~ cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~ echo "local: *; };" >> $output_objdir/$libname.ver~ $LD -shared $libobjs $deplibs $linker_flags -soname $soname -version-script $output_objdir/$libname.ver -o $lib' fi ;; esac else _LT_TAGVAR(ld_shlibs, $1)=no fi ;; netbsd* | netbsdelf*-gnu) if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then _LT_TAGVAR(archive_cmds, $1)='$LD -Bshareable $libobjs $deplibs $linker_flags -o $lib' wlarc= else _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' fi ;; solaris*) if $LD -v 2>&1 | $GREP 'BFD 2\.8' > /dev/null; then _LT_TAGVAR(ld_shlibs, $1)=no cat <<_LT_EOF 1>&2 *** Warning: The releases 2.8.* of the GNU linker cannot reliably *** create shared libraries on Solaris systems. Therefore, libtool *** is disabling shared libraries support. We urge you to upgrade GNU *** binutils to release 2.9.1 or newer. Another option is to modify *** your PATH or compiler configuration so that the native linker is *** used, and then restart. _LT_EOF elif $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' else _LT_TAGVAR(ld_shlibs, $1)=no fi ;; sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX*) case `$LD -v 2>&1` in *\ [[01]].* | *\ 2.[[0-9]].* | *\ 2.1[[0-5]].*) _LT_TAGVAR(ld_shlibs, $1)=no cat <<_LT_EOF 1>&2 *** Warning: Releases of the GNU linker prior to 2.16.91.0.3 can not *** reliably create shared libraries on SCO systems. Therefore, libtool *** is disabling shared libraries support. We urge you to upgrade GNU *** binutils to release 2.16.91.0.3 or newer. Another option is to modify *** your PATH or compiler configuration so that the native linker is *** used, and then restart. _LT_EOF ;; *) # For security reasons, it is highly recommended that you always # use absolute paths for naming shared libraries, and exclude the # DT_RUNPATH tag from executables and libraries. But doing so # requires that you compile everything twice, which is a pain. if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir' _LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' else _LT_TAGVAR(ld_shlibs, $1)=no fi ;; esac ;; sunos4*) _LT_TAGVAR(archive_cmds, $1)='$LD -assert pure-text -Bshareable -o $lib $libobjs $deplibs $linker_flags' wlarc= _LT_TAGVAR(hardcode_direct, $1)=yes _LT_TAGVAR(hardcode_shlibpath_var, $1)=no ;; *) if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' else _LT_TAGVAR(ld_shlibs, $1)=no fi ;; esac if test "$_LT_TAGVAR(ld_shlibs, $1)" = no; then runpath_var= _LT_TAGVAR(hardcode_libdir_flag_spec, $1)= _LT_TAGVAR(export_dynamic_flag_spec, $1)= _LT_TAGVAR(whole_archive_flag_spec, $1)= fi else # PORTME fill in a description of your system's linker (not GNU ld) case $host_os in aix3*) _LT_TAGVAR(allow_undefined_flag, $1)=unsupported _LT_TAGVAR(always_export_symbols, $1)=yes _LT_TAGVAR(archive_expsym_cmds, $1)='$LD -o $output_objdir/$soname $libobjs $deplibs $linker_flags -bE:$export_symbols -T512 -H512 -bM:SRE~$AR $AR_FLAGS $lib $output_objdir/$soname' # Note: this linker hardcodes the directories in LIBPATH if there # are no directories specified by -L. _LT_TAGVAR(hardcode_minus_L, $1)=yes if test "$GCC" = yes && test -z "$lt_prog_compiler_static"; then # Neither direct hardcoding nor static linking is supported with a # broken collect2. _LT_TAGVAR(hardcode_direct, $1)=unsupported fi ;; aix[[4-9]]*) if test "$host_cpu" = ia64; then # On IA64, the linker does run time linking by default, so we don't # have to do anything special. aix_use_runtimelinking=no exp_sym_flag='-Bexport' no_entry_flag="" else # If we're using GNU nm, then we don't want the "-C" option. # -C means demangle to AIX nm, but means don't demangle with GNU nm # Also, AIX nm treats weak defined symbols like other global # defined symbols, whereas GNU nm marks them as "W". if $NM -V 2>&1 | $GREP 'GNU' > /dev/null; then _LT_TAGVAR(export_symbols_cmds, $1)='$NM -Bpg $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B") || (\$ 2 == "W")) && ([substr](\$ 3,1,1) != ".")) { print \$ 3 } }'\'' | sort -u > $export_symbols' else _LT_TAGVAR(export_symbols_cmds, $1)='$NM -BCpg $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B")) && ([substr](\$ 3,1,1) != ".")) { print \$ 3 } }'\'' | sort -u > $export_symbols' fi aix_use_runtimelinking=no # Test if we are trying to use run time linking or normal # AIX style linking. If -brtl is somewhere in LDFLAGS, we # need to do runtime linking. case $host_os in aix4.[[23]]|aix4.[[23]].*|aix[[5-9]]*) for ld_flag in $LDFLAGS; do if (test $ld_flag = "-brtl" || test $ld_flag = "-Wl,-brtl"); then aix_use_runtimelinking=yes break fi done ;; esac exp_sym_flag='-bexport' no_entry_flag='-bnoentry' fi # When large executables or shared objects are built, AIX ld can # have problems creating the table of contents. If linking a library # or program results in "error TOC overflow" add -mminimal-toc to # CXXFLAGS/CFLAGS for g++/gcc. In the cases where that is not # enough to fix the problem, add -Wl,-bbigtoc to LDFLAGS. _LT_TAGVAR(archive_cmds, $1)='' _LT_TAGVAR(hardcode_direct, $1)=yes _LT_TAGVAR(hardcode_direct_absolute, $1)=yes _LT_TAGVAR(hardcode_libdir_separator, $1)=':' _LT_TAGVAR(link_all_deplibs, $1)=yes _LT_TAGVAR(file_list_spec, $1)='${wl}-f,' if test "$GCC" = yes; then case $host_os in aix4.[[012]]|aix4.[[012]].*) # We only want to do this on AIX 4.2 and lower, the check # below for broken collect2 doesn't work under 4.3+ collect2name=`${CC} -print-prog-name=collect2` if test -f "$collect2name" && strings "$collect2name" | $GREP resolve_lib_name >/dev/null then # We have reworked collect2 : else # We have old collect2 _LT_TAGVAR(hardcode_direct, $1)=unsupported # It fails to find uninstalled libraries when the uninstalled # path is not listed in the libpath. Setting hardcode_minus_L # to unsupported forces relinking _LT_TAGVAR(hardcode_minus_L, $1)=yes _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' _LT_TAGVAR(hardcode_libdir_separator, $1)= fi ;; esac shared_flag='-shared' if test "$aix_use_runtimelinking" = yes; then shared_flag="$shared_flag "'${wl}-G' fi _LT_TAGVAR(link_all_deplibs, $1)=no else # not using gcc if test "$host_cpu" = ia64; then # VisualAge C++, Version 5.5 for AIX 5L for IA-64, Beta 3 Release # chokes on -Wl,-G. The following line is correct: shared_flag='-G' else if test "$aix_use_runtimelinking" = yes; then shared_flag='${wl}-G' else shared_flag='${wl}-bM:SRE' fi fi fi _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-bexpall' # It seems that -bexpall does not export symbols beginning with # underscore (_), so it is better to generate a list of symbols to export. _LT_TAGVAR(always_export_symbols, $1)=yes if test "$aix_use_runtimelinking" = yes; then # Warning - without using the other runtime loading flags (-brtl), # -berok will link without error, but may produce a broken library. _LT_TAGVAR(allow_undefined_flag, $1)='-berok' # Determine the default libpath from the value encoded in an # empty executable. _LT_SYS_MODULE_PATH_AIX([$1]) _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-blibpath:$libdir:'"$aix_libpath" _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -o $output_objdir/$soname $libobjs $deplibs '"\${wl}$no_entry_flag"' $compiler_flags `if test "x${allow_undefined_flag}" != "x"; then func_echo_all "${wl}${allow_undefined_flag}"; else :; fi` '"\${wl}$exp_sym_flag:\$export_symbols $shared_flag" else if test "$host_cpu" = ia64; then _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-R $libdir:/usr/lib:/lib' _LT_TAGVAR(allow_undefined_flag, $1)="-z nodefs" _LT_TAGVAR(archive_expsym_cmds, $1)="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs '"\${wl}$no_entry_flag"' $compiler_flags ${wl}${allow_undefined_flag} '"\${wl}$exp_sym_flag:\$export_symbols" else # Determine the default libpath from the value encoded in an # empty executable. _LT_SYS_MODULE_PATH_AIX([$1]) _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-blibpath:$libdir:'"$aix_libpath" # Warning - without using the other run time loading flags, # -berok will link without error, but may produce a broken library. _LT_TAGVAR(no_undefined_flag, $1)=' ${wl}-bernotok' _LT_TAGVAR(allow_undefined_flag, $1)=' ${wl}-berok' if test "$with_gnu_ld" = yes; then # We only use this code for GNU lds that support --whole-archive. _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}--whole-archive$convenience ${wl}--no-whole-archive' else # Exported symbols can be pulled into shared objects from archives _LT_TAGVAR(whole_archive_flag_spec, $1)='$convenience' fi _LT_TAGVAR(archive_cmds_need_lc, $1)=yes # This is similar to how AIX traditionally builds its shared libraries. _LT_TAGVAR(archive_expsym_cmds, $1)="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs ${wl}-bnoentry $compiler_flags ${wl}-bE:$export_symbols${allow_undefined_flag}~$AR $AR_FLAGS $output_objdir/$libname$release.a $output_objdir/$soname' fi fi ;; amigaos*) case $host_cpu in powerpc) # see comment about AmigaOS4 .so support _LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' _LT_TAGVAR(archive_expsym_cmds, $1)='' ;; m68k) _LT_TAGVAR(archive_cmds, $1)='$RM $output_objdir/a2ixlibrary.data~$ECHO "#define NAME $libname" > $output_objdir/a2ixlibrary.data~$ECHO "#define LIBRARY_ID 1" >> $output_objdir/a2ixlibrary.data~$ECHO "#define VERSION $major" >> $output_objdir/a2ixlibrary.data~$ECHO "#define REVISION $revision" >> $output_objdir/a2ixlibrary.data~$AR $AR_FLAGS $lib $libobjs~$RANLIB $lib~(cd $output_objdir && a2ixlibrary -32)' _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' _LT_TAGVAR(hardcode_minus_L, $1)=yes ;; esac ;; bsdi[[45]]*) _LT_TAGVAR(export_dynamic_flag_spec, $1)=-rdynamic ;; cygwin* | mingw* | pw32* | cegcc*) # When not using gcc, we currently assume that we are using # Microsoft Visual C++. # hardcode_libdir_flag_spec is actually meaningless, as there is # no search path for DLLs. case $cc_basename in cl*) # Native MSVC _LT_TAGVAR(hardcode_libdir_flag_spec, $1)=' ' _LT_TAGVAR(allow_undefined_flag, $1)=unsupported _LT_TAGVAR(always_export_symbols, $1)=yes _LT_TAGVAR(file_list_spec, $1)='@' # Tell ltmain to make .lib files, not .a files. libext=lib # Tell ltmain to make .dll files, not .so files. shrext_cmds=".dll" # FIXME: Setting linknames here is a bad hack. _LT_TAGVAR(archive_cmds, $1)='$CC -o $output_objdir/$soname $libobjs $compiler_flags $deplibs -Wl,-dll~linknames=' _LT_TAGVAR(archive_expsym_cmds, $1)='if test "x`$SED 1q $export_symbols`" = xEXPORTS; then sed -n -e 's/\\\\\\\(.*\\\\\\\)/-link\\\ -EXPORT:\\\\\\\1/' -e '1\\\!p' < $export_symbols > $output_objdir/$soname.exp; else sed -e 's/\\\\\\\(.*\\\\\\\)/-link\\\ -EXPORT:\\\\\\\1/' < $export_symbols > $output_objdir/$soname.exp; fi~ $CC -o $tool_output_objdir$soname $libobjs $compiler_flags $deplibs "@$tool_output_objdir$soname.exp" -Wl,-DLL,-IMPLIB:"$tool_output_objdir$libname.dll.lib"~ linknames=' # The linker will not automatically build a static lib if we build a DLL. # _LT_TAGVAR(old_archive_from_new_cmds, $1)='true' _LT_TAGVAR(enable_shared_with_static_runtimes, $1)=yes _LT_TAGVAR(exclude_expsyms, $1)='_NULL_IMPORT_DESCRIPTOR|_IMPORT_DESCRIPTOR_.*' _LT_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[[BCDGRS]][[ ]]/s/.*[[ ]]\([[^ ]]*\)/\1,DATA/'\'' | $SED -e '\''/^[[AITW]][[ ]]/s/.*[[ ]]//'\'' | sort | uniq > $export_symbols' # Don't use ranlib _LT_TAGVAR(old_postinstall_cmds, $1)='chmod 644 $oldlib' _LT_TAGVAR(postlink_cmds, $1)='lt_outputfile="@OUTPUT@"~ lt_tool_outputfile="@TOOL_OUTPUT@"~ case $lt_outputfile in *.exe|*.EXE) ;; *) lt_outputfile="$lt_outputfile.exe" lt_tool_outputfile="$lt_tool_outputfile.exe" ;; esac~ if test "$MANIFEST_TOOL" != ":" && test -f "$lt_outputfile.manifest"; then $MANIFEST_TOOL -manifest "$lt_tool_outputfile.manifest" -outputresource:"$lt_tool_outputfile" || exit 1; $RM "$lt_outputfile.manifest"; fi' ;; *) # Assume MSVC wrapper _LT_TAGVAR(hardcode_libdir_flag_spec, $1)=' ' _LT_TAGVAR(allow_undefined_flag, $1)=unsupported # Tell ltmain to make .lib files, not .a files. libext=lib # Tell ltmain to make .dll files, not .so files. shrext_cmds=".dll" # FIXME: Setting linknames here is a bad hack. _LT_TAGVAR(archive_cmds, $1)='$CC -o $lib $libobjs $compiler_flags `func_echo_all "$deplibs" | $SED '\''s/ -lc$//'\''` -link -dll~linknames=' # The linker will automatically build a .lib file if we build a DLL. _LT_TAGVAR(old_archive_from_new_cmds, $1)='true' # FIXME: Should let the user specify the lib program. _LT_TAGVAR(old_archive_cmds, $1)='lib -OUT:$oldlib$oldobjs$old_deplibs' _LT_TAGVAR(enable_shared_with_static_runtimes, $1)=yes ;; esac ;; darwin* | rhapsody*) _LT_DARWIN_LINKER_FEATURES($1) ;; dgux*) _LT_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' _LT_TAGVAR(hardcode_shlibpath_var, $1)=no ;; # FreeBSD 2.2.[012] allows us to include c++rt0.o to get C++ constructor # support. Future versions do this automatically, but an explicit c++rt0.o # does not break anything, and helps significantly (at the cost of a little # extra space). freebsd2.2*) _LT_TAGVAR(archive_cmds, $1)='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags /usr/lib/c++rt0.o' _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir' _LT_TAGVAR(hardcode_direct, $1)=yes _LT_TAGVAR(hardcode_shlibpath_var, $1)=no ;; # Unfortunately, older versions of FreeBSD 2 do not have this feature. freebsd2.*) _LT_TAGVAR(archive_cmds, $1)='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags' _LT_TAGVAR(hardcode_direct, $1)=yes _LT_TAGVAR(hardcode_minus_L, $1)=yes _LT_TAGVAR(hardcode_shlibpath_var, $1)=no ;; # FreeBSD 3 and greater uses gcc -shared to do shared libraries. freebsd* | dragonfly*) _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags' _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir' _LT_TAGVAR(hardcode_direct, $1)=yes _LT_TAGVAR(hardcode_shlibpath_var, $1)=no ;; hpux9*) if test "$GCC" = yes; then _LT_TAGVAR(archive_cmds, $1)='$RM $output_objdir/$soname~$CC -shared $pic_flag ${wl}+b ${wl}$install_libdir -o $output_objdir/$soname $libobjs $deplibs $compiler_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib' else _LT_TAGVAR(archive_cmds, $1)='$RM $output_objdir/$soname~$LD -b +b $install_libdir -o $output_objdir/$soname $libobjs $deplibs $linker_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib' fi _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}+b ${wl}$libdir' _LT_TAGVAR(hardcode_libdir_separator, $1)=: _LT_TAGVAR(hardcode_direct, $1)=yes # hardcode_minus_L: Not really in the search PATH, # but as the default location of the library. _LT_TAGVAR(hardcode_minus_L, $1)=yes _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E' ;; hpux10*) if test "$GCC" = yes && test "$with_gnu_ld" = no; then _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags' else _LT_TAGVAR(archive_cmds, $1)='$LD -b +h $soname +b $install_libdir -o $lib $libobjs $deplibs $linker_flags' fi if test "$with_gnu_ld" = no; then _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}+b ${wl}$libdir' _LT_TAGVAR(hardcode_libdir_separator, $1)=: _LT_TAGVAR(hardcode_direct, $1)=yes _LT_TAGVAR(hardcode_direct_absolute, $1)=yes _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E' # hardcode_minus_L: Not really in the search PATH, # but as the default location of the library. _LT_TAGVAR(hardcode_minus_L, $1)=yes fi ;; hpux11*) if test "$GCC" = yes && test "$with_gnu_ld" = no; then case $host_cpu in hppa*64*) _LT_TAGVAR(archive_cmds, $1)='$CC -shared ${wl}+h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags' ;; ia64*) _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $libobjs $deplibs $compiler_flags' ;; *) _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags' ;; esac else case $host_cpu in hppa*64*) _LT_TAGVAR(archive_cmds, $1)='$CC -b ${wl}+h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags' ;; ia64*) _LT_TAGVAR(archive_cmds, $1)='$CC -b ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $libobjs $deplibs $compiler_flags' ;; *) m4_if($1, [], [ # Older versions of the 11.00 compiler do not understand -b yet # (HP92453-01 A.11.01.20 doesn't, HP92453-01 B.11.X.35175-35176.GP does) _LT_LINKER_OPTION([if $CC understands -b], _LT_TAGVAR(lt_cv_prog_compiler__b, $1), [-b], [_LT_TAGVAR(archive_cmds, $1)='$CC -b ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags'], [_LT_TAGVAR(archive_cmds, $1)='$LD -b +h $soname +b $install_libdir -o $lib $libobjs $deplibs $linker_flags'])], [_LT_TAGVAR(archive_cmds, $1)='$CC -b ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags']) ;; esac fi if test "$with_gnu_ld" = no; then _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}+b ${wl}$libdir' _LT_TAGVAR(hardcode_libdir_separator, $1)=: case $host_cpu in hppa*64*|ia64*) _LT_TAGVAR(hardcode_direct, $1)=no _LT_TAGVAR(hardcode_shlibpath_var, $1)=no ;; *) _LT_TAGVAR(hardcode_direct, $1)=yes _LT_TAGVAR(hardcode_direct_absolute, $1)=yes _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E' # hardcode_minus_L: Not really in the search PATH, # but as the default location of the library. _LT_TAGVAR(hardcode_minus_L, $1)=yes ;; esac fi ;; irix5* | irix6* | nonstopux*) if test "$GCC" = yes; then _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' # Try to use the -exported_symbol ld option, if it does not # work, assume that -exports_file does not work either and # implicitly export all symbols. # This should be the same for all languages, so no per-tag cache variable. AC_CACHE_CHECK([whether the $host_os linker accepts -exported_symbol], [lt_cv_irix_exported_symbol], [save_LDFLAGS="$LDFLAGS" LDFLAGS="$LDFLAGS -shared ${wl}-exported_symbol ${wl}foo ${wl}-update_registry ${wl}/dev/null" AC_LINK_IFELSE( [AC_LANG_SOURCE( [AC_LANG_CASE([C], [[int foo (void) { return 0; }]], [C++], [[int foo (void) { return 0; }]], [Fortran 77], [[ subroutine foo end]], [Fortran], [[ subroutine foo end]])])], [lt_cv_irix_exported_symbol=yes], [lt_cv_irix_exported_symbol=no]) LDFLAGS="$save_LDFLAGS"]) if test "$lt_cv_irix_exported_symbol" = yes; then _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` ${wl}-update_registry ${wl}${output_objdir}/so_locations ${wl}-exports_file ${wl}$export_symbols -o $lib' fi else _LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry ${output_objdir}/so_locations -o $lib' _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry ${output_objdir}/so_locations -exports_file $export_symbols -o $lib' fi _LT_TAGVAR(archive_cmds_need_lc, $1)='no' _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir' _LT_TAGVAR(hardcode_libdir_separator, $1)=: _LT_TAGVAR(inherit_rpath, $1)=yes _LT_TAGVAR(link_all_deplibs, $1)=yes ;; netbsd* | netbsdelf*-gnu) if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then _LT_TAGVAR(archive_cmds, $1)='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags' # a.out else _LT_TAGVAR(archive_cmds, $1)='$LD -shared -o $lib $libobjs $deplibs $linker_flags' # ELF fi _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir' _LT_TAGVAR(hardcode_direct, $1)=yes _LT_TAGVAR(hardcode_shlibpath_var, $1)=no ;; newsos6) _LT_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' _LT_TAGVAR(hardcode_direct, $1)=yes _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir' _LT_TAGVAR(hardcode_libdir_separator, $1)=: _LT_TAGVAR(hardcode_shlibpath_var, $1)=no ;; *nto* | *qnx*) ;; openbsd*) if test -f /usr/libexec/ld.so; then _LT_TAGVAR(hardcode_direct, $1)=yes _LT_TAGVAR(hardcode_shlibpath_var, $1)=no _LT_TAGVAR(hardcode_direct_absolute, $1)=yes if test -z "`echo __ELF__ | $CC -E - | $GREP __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags' _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags ${wl}-retain-symbols-file,$export_symbols' _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir' _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E' else case $host_os in openbsd[[01]].* | openbsd2.[[0-7]] | openbsd2.[[0-7]].*) _LT_TAGVAR(archive_cmds, $1)='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags' _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir' ;; *) _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags' _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir' ;; esac fi else _LT_TAGVAR(ld_shlibs, $1)=no fi ;; os2*) _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' _LT_TAGVAR(hardcode_minus_L, $1)=yes _LT_TAGVAR(allow_undefined_flag, $1)=unsupported _LT_TAGVAR(archive_cmds, $1)='$ECHO "LIBRARY $libname INITINSTANCE" > $output_objdir/$libname.def~$ECHO "DESCRIPTION \"$libname\"" >> $output_objdir/$libname.def~echo DATA >> $output_objdir/$libname.def~echo " SINGLE NONSHARED" >> $output_objdir/$libname.def~echo EXPORTS >> $output_objdir/$libname.def~emxexp $libobjs >> $output_objdir/$libname.def~$CC -Zdll -Zcrtdll -o $lib $libobjs $deplibs $compiler_flags $output_objdir/$libname.def' _LT_TAGVAR(old_archive_from_new_cmds, $1)='emximp -o $output_objdir/$libname.a $output_objdir/$libname.def' ;; osf3*) if test "$GCC" = yes; then _LT_TAGVAR(allow_undefined_flag, $1)=' ${wl}-expect_unresolved ${wl}\*' _LT_TAGVAR(archive_cmds, $1)='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' else _LT_TAGVAR(allow_undefined_flag, $1)=' -expect_unresolved \*' _LT_TAGVAR(archive_cmds, $1)='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry ${output_objdir}/so_locations -o $lib' fi _LT_TAGVAR(archive_cmds_need_lc, $1)='no' _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir' _LT_TAGVAR(hardcode_libdir_separator, $1)=: ;; osf4* | osf5*) # as osf3* with the addition of -msym flag if test "$GCC" = yes; then _LT_TAGVAR(allow_undefined_flag, $1)=' ${wl}-expect_unresolved ${wl}\*' _LT_TAGVAR(archive_cmds, $1)='$CC -shared${allow_undefined_flag} $pic_flag $libobjs $deplibs $compiler_flags ${wl}-msym ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir' else _LT_TAGVAR(allow_undefined_flag, $1)=' -expect_unresolved \*' _LT_TAGVAR(archive_cmds, $1)='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags -msym -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry ${output_objdir}/so_locations -o $lib' _LT_TAGVAR(archive_expsym_cmds, $1)='for i in `cat $export_symbols`; do printf "%s %s\\n" -exported_symbol "\$i" >> $lib.exp; done; printf "%s\\n" "-hidden">> $lib.exp~ $CC -shared${allow_undefined_flag} ${wl}-input ${wl}$lib.exp $compiler_flags $libobjs $deplibs -soname $soname `test -n "$verstring" && $ECHO "-set_version $verstring"` -update_registry ${output_objdir}/so_locations -o $lib~$RM $lib.exp' # Both c and cxx compiler support -rpath directly _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-rpath $libdir' fi _LT_TAGVAR(archive_cmds_need_lc, $1)='no' _LT_TAGVAR(hardcode_libdir_separator, $1)=: ;; solaris*) _LT_TAGVAR(no_undefined_flag, $1)=' -z defs' if test "$GCC" = yes; then wlarc='${wl}' _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag ${wl}-z ${wl}text ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags' _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ $CC -shared $pic_flag ${wl}-z ${wl}text ${wl}-M ${wl}$lib.exp ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags~$RM $lib.exp' else case `$CC -V 2>&1` in *"Compilers 5.0"*) wlarc='' _LT_TAGVAR(archive_cmds, $1)='$LD -G${allow_undefined_flag} -h $soname -o $lib $libobjs $deplibs $linker_flags' _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ $LD -G${allow_undefined_flag} -M $lib.exp -h $soname -o $lib $libobjs $deplibs $linker_flags~$RM $lib.exp' ;; *) wlarc='${wl}' _LT_TAGVAR(archive_cmds, $1)='$CC -G${allow_undefined_flag} -h $soname -o $lib $libobjs $deplibs $compiler_flags' _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ $CC -G${allow_undefined_flag} -M $lib.exp -h $soname -o $lib $libobjs $deplibs $compiler_flags~$RM $lib.exp' ;; esac fi _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir' _LT_TAGVAR(hardcode_shlibpath_var, $1)=no case $host_os in solaris2.[[0-5]] | solaris2.[[0-5]].*) ;; *) # The compiler driver will combine and reorder linker options, # but understands `-z linker_flag'. GCC discards it without `$wl', # but is careful enough not to reorder. # Supported since Solaris 2.6 (maybe 2.5.1?) if test "$GCC" = yes; then _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}-z ${wl}allextract$convenience ${wl}-z ${wl}defaultextract' else _LT_TAGVAR(whole_archive_flag_spec, $1)='-z allextract$convenience -z defaultextract' fi ;; esac _LT_TAGVAR(link_all_deplibs, $1)=yes ;; sunos4*) if test "x$host_vendor" = xsequent; then # Use $CC to link under sequent, because it throws in some extra .o # files that make .init and .fini sections work. _LT_TAGVAR(archive_cmds, $1)='$CC -G ${wl}-h $soname -o $lib $libobjs $deplibs $compiler_flags' else _LT_TAGVAR(archive_cmds, $1)='$LD -assert pure-text -Bstatic -o $lib $libobjs $deplibs $linker_flags' fi _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' _LT_TAGVAR(hardcode_direct, $1)=yes _LT_TAGVAR(hardcode_minus_L, $1)=yes _LT_TAGVAR(hardcode_shlibpath_var, $1)=no ;; sysv4) case $host_vendor in sni) _LT_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' _LT_TAGVAR(hardcode_direct, $1)=yes # is this really true??? ;; siemens) ## LD is ld it makes a PLAMLIB ## CC just makes a GrossModule. _LT_TAGVAR(archive_cmds, $1)='$LD -G -o $lib $libobjs $deplibs $linker_flags' _LT_TAGVAR(reload_cmds, $1)='$CC -r -o $output$reload_objs' _LT_TAGVAR(hardcode_direct, $1)=no ;; motorola) _LT_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' _LT_TAGVAR(hardcode_direct, $1)=no #Motorola manual says yes, but my tests say they lie ;; esac runpath_var='LD_RUN_PATH' _LT_TAGVAR(hardcode_shlibpath_var, $1)=no ;; sysv4.3*) _LT_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' _LT_TAGVAR(hardcode_shlibpath_var, $1)=no _LT_TAGVAR(export_dynamic_flag_spec, $1)='-Bexport' ;; sysv4*MP*) if test -d /usr/nec; then _LT_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' _LT_TAGVAR(hardcode_shlibpath_var, $1)=no runpath_var=LD_RUN_PATH hardcode_runpath_var=yes _LT_TAGVAR(ld_shlibs, $1)=yes fi ;; sysv4*uw2* | sysv5OpenUNIX* | sysv5UnixWare7.[[01]].[[10]]* | unixware7* | sco3.2v5.0.[[024]]*) _LT_TAGVAR(no_undefined_flag, $1)='${wl}-z,text' _LT_TAGVAR(archive_cmds_need_lc, $1)=no _LT_TAGVAR(hardcode_shlibpath_var, $1)=no runpath_var='LD_RUN_PATH' if test "$GCC" = yes; then _LT_TAGVAR(archive_cmds, $1)='$CC -shared ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' else _LT_TAGVAR(archive_cmds, $1)='$CC -G ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -G ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' fi ;; sysv5* | sco3.2v5* | sco5v6*) # Note: We can NOT use -z defs as we might desire, because we do not # link with -lc, and that would cause any symbols used from libc to # always be unresolved, which means just about no library would # ever link correctly. If we're not using GNU ld we use -z text # though, which does catch some bad symbols but isn't as heavy-handed # as -z defs. _LT_TAGVAR(no_undefined_flag, $1)='${wl}-z,text' _LT_TAGVAR(allow_undefined_flag, $1)='${wl}-z,nodefs' _LT_TAGVAR(archive_cmds_need_lc, $1)=no _LT_TAGVAR(hardcode_shlibpath_var, $1)=no _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-R,$libdir' _LT_TAGVAR(hardcode_libdir_separator, $1)=':' _LT_TAGVAR(link_all_deplibs, $1)=yes _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-Bexport' runpath_var='LD_RUN_PATH' if test "$GCC" = yes; then _LT_TAGVAR(archive_cmds, $1)='$CC -shared ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' else _LT_TAGVAR(archive_cmds, $1)='$CC -G ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -G ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' fi ;; uts4*) _LT_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' _LT_TAGVAR(hardcode_shlibpath_var, $1)=no ;; *) _LT_TAGVAR(ld_shlibs, $1)=no ;; esac if test x$host_vendor = xsni; then case $host in sysv4 | sysv4.2uw2* | sysv4.3* | sysv5*) _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-Blargedynsym' ;; esac fi fi ]) AC_MSG_RESULT([$_LT_TAGVAR(ld_shlibs, $1)]) test "$_LT_TAGVAR(ld_shlibs, $1)" = no && can_build_shared=no _LT_TAGVAR(with_gnu_ld, $1)=$with_gnu_ld _LT_DECL([], [libext], [0], [Old archive suffix (normally "a")])dnl _LT_DECL([], [shrext_cmds], [1], [Shared library suffix (normally ".so")])dnl _LT_DECL([], [extract_expsyms_cmds], [2], [The commands to extract the exported symbol list from a shared archive]) # # Do we need to explicitly link libc? # case "x$_LT_TAGVAR(archive_cmds_need_lc, $1)" in x|xyes) # Assume -lc should be added _LT_TAGVAR(archive_cmds_need_lc, $1)=yes if test "$enable_shared" = yes && test "$GCC" = yes; then case $_LT_TAGVAR(archive_cmds, $1) in *'~'*) # FIXME: we may have to deal with multi-command sequences. ;; '$CC '*) # Test whether the compiler implicitly links with -lc since on some # systems, -lgcc has to come before -lc. If gcc already passes -lc # to ld, don't add -lc before -lgcc. AC_CACHE_CHECK([whether -lc should be explicitly linked in], [lt_cv_]_LT_TAGVAR(archive_cmds_need_lc, $1), [$RM conftest* echo "$lt_simple_compile_test_code" > conftest.$ac_ext if AC_TRY_EVAL(ac_compile) 2>conftest.err; then soname=conftest lib=conftest libobjs=conftest.$ac_objext deplibs= wl=$_LT_TAGVAR(lt_prog_compiler_wl, $1) pic_flag=$_LT_TAGVAR(lt_prog_compiler_pic, $1) compiler_flags=-v linker_flags=-v verstring= output_objdir=. libname=conftest lt_save_allow_undefined_flag=$_LT_TAGVAR(allow_undefined_flag, $1) _LT_TAGVAR(allow_undefined_flag, $1)= if AC_TRY_EVAL(_LT_TAGVAR(archive_cmds, $1) 2\>\&1 \| $GREP \" -lc \" \>/dev/null 2\>\&1) then lt_cv_[]_LT_TAGVAR(archive_cmds_need_lc, $1)=no else lt_cv_[]_LT_TAGVAR(archive_cmds_need_lc, $1)=yes fi _LT_TAGVAR(allow_undefined_flag, $1)=$lt_save_allow_undefined_flag else cat conftest.err 1>&5 fi $RM conftest* ]) _LT_TAGVAR(archive_cmds_need_lc, $1)=$lt_cv_[]_LT_TAGVAR(archive_cmds_need_lc, $1) ;; esac fi ;; esac _LT_TAGDECL([build_libtool_need_lc], [archive_cmds_need_lc], [0], [Whether or not to add -lc for building shared libraries]) _LT_TAGDECL([allow_libtool_libs_with_static_runtimes], [enable_shared_with_static_runtimes], [0], [Whether or not to disallow shared libs when runtime libs are static]) _LT_TAGDECL([], [export_dynamic_flag_spec], [1], [Compiler flag to allow reflexive dlopens]) _LT_TAGDECL([], [whole_archive_flag_spec], [1], [Compiler flag to generate shared objects directly from archives]) _LT_TAGDECL([], [compiler_needs_object], [1], [Whether the compiler copes with passing no objects directly]) _LT_TAGDECL([], [old_archive_from_new_cmds], [2], [Create an old-style archive from a shared archive]) _LT_TAGDECL([], [old_archive_from_expsyms_cmds], [2], [Create a temporary old-style archive to link instead of a shared archive]) _LT_TAGDECL([], [archive_cmds], [2], [Commands used to build a shared archive]) _LT_TAGDECL([], [archive_expsym_cmds], [2]) _LT_TAGDECL([], [module_cmds], [2], [Commands used to build a loadable module if different from building a shared archive.]) _LT_TAGDECL([], [module_expsym_cmds], [2]) _LT_TAGDECL([], [with_gnu_ld], [1], [Whether we are building with GNU ld or not]) _LT_TAGDECL([], [allow_undefined_flag], [1], [Flag that allows shared libraries with undefined symbols to be built]) _LT_TAGDECL([], [no_undefined_flag], [1], [Flag that enforces no undefined symbols]) _LT_TAGDECL([], [hardcode_libdir_flag_spec], [1], [Flag to hardcode $libdir into a binary during linking. This must work even if $libdir does not exist]) _LT_TAGDECL([], [hardcode_libdir_separator], [1], [Whether we need a single "-rpath" flag with a separated argument]) _LT_TAGDECL([], [hardcode_direct], [0], [Set to "yes" if using DIR/libNAME${shared_ext} during linking hardcodes DIR into the resulting binary]) _LT_TAGDECL([], [hardcode_direct_absolute], [0], [Set to "yes" if using DIR/libNAME${shared_ext} during linking hardcodes DIR into the resulting binary and the resulting library dependency is "absolute", i.e impossible to change by setting ${shlibpath_var} if the library is relocated]) _LT_TAGDECL([], [hardcode_minus_L], [0], [Set to "yes" if using the -LDIR flag during linking hardcodes DIR into the resulting binary]) _LT_TAGDECL([], [hardcode_shlibpath_var], [0], [Set to "yes" if using SHLIBPATH_VAR=DIR during linking hardcodes DIR into the resulting binary]) _LT_TAGDECL([], [hardcode_automatic], [0], [Set to "yes" if building a shared library automatically hardcodes DIR into the library and all subsequent libraries and executables linked against it]) _LT_TAGDECL([], [inherit_rpath], [0], [Set to yes if linker adds runtime paths of dependent libraries to runtime path list]) _LT_TAGDECL([], [link_all_deplibs], [0], [Whether libtool must link a program against all its dependency libraries]) _LT_TAGDECL([], [always_export_symbols], [0], [Set to "yes" if exported symbols are required]) _LT_TAGDECL([], [export_symbols_cmds], [2], [The commands to list exported symbols]) _LT_TAGDECL([], [exclude_expsyms], [1], [Symbols that should not be listed in the preloaded symbols]) _LT_TAGDECL([], [include_expsyms], [1], [Symbols that must always be exported]) _LT_TAGDECL([], [prelink_cmds], [2], [Commands necessary for linking programs (against libraries) with templates]) _LT_TAGDECL([], [postlink_cmds], [2], [Commands necessary for finishing linking programs]) _LT_TAGDECL([], [file_list_spec], [1], [Specify filename containing input files]) dnl FIXME: Not yet implemented dnl _LT_TAGDECL([], [thread_safe_flag_spec], [1], dnl [Compiler flag to generate thread safe objects]) ])# _LT_LINKER_SHLIBS # _LT_LANG_C_CONFIG([TAG]) # ------------------------ # Ensure that the configuration variables for a C compiler are suitably # defined. These variables are subsequently used by _LT_CONFIG to write # the compiler configuration to `libtool'. m4_defun([_LT_LANG_C_CONFIG], [m4_require([_LT_DECL_EGREP])dnl lt_save_CC="$CC" AC_LANG_PUSH(C) # Source file extension for C test sources. ac_ext=c # Object file extension for compiled C test sources. objext=o _LT_TAGVAR(objext, $1)=$objext # Code to be used in simple compile tests lt_simple_compile_test_code="int some_variable = 0;" # Code to be used in simple link tests lt_simple_link_test_code='int main(){return(0);}' _LT_TAG_COMPILER # Save the default compiler, since it gets overwritten when the other # tags are being tested, and _LT_TAGVAR(compiler, []) is a NOP. compiler_DEFAULT=$CC # save warnings/boilerplate of simple test code _LT_COMPILER_BOILERPLATE _LT_LINKER_BOILERPLATE ## CAVEAT EMPTOR: ## There is no encapsulation within the following macros, do not change ## the running order or otherwise move them around unless you know exactly ## what you are doing... if test -n "$compiler"; then _LT_COMPILER_NO_RTTI($1) _LT_COMPILER_PIC($1) _LT_COMPILER_C_O($1) _LT_COMPILER_FILE_LOCKS($1) _LT_LINKER_SHLIBS($1) _LT_SYS_DYNAMIC_LINKER($1) _LT_LINKER_HARDCODE_LIBPATH($1) LT_SYS_DLOPEN_SELF _LT_CMD_STRIPLIB # Report which library types will actually be built AC_MSG_CHECKING([if libtool supports shared libraries]) AC_MSG_RESULT([$can_build_shared]) AC_MSG_CHECKING([whether to build shared libraries]) test "$can_build_shared" = "no" && enable_shared=no # On AIX, shared libraries and static libraries use the same namespace, and # are all built from PIC. case $host_os in aix3*) test "$enable_shared" = yes && enable_static=no if test -n "$RANLIB"; then archive_cmds="$archive_cmds~\$RANLIB \$lib" postinstall_cmds='$RANLIB $lib' fi ;; aix[[4-9]]*) if test "$host_cpu" != ia64 && test "$aix_use_runtimelinking" = no ; then test "$enable_shared" = yes && enable_static=no fi ;; esac AC_MSG_RESULT([$enable_shared]) AC_MSG_CHECKING([whether to build static libraries]) # Make sure either enable_shared or enable_static is yes. test "$enable_shared" = yes || enable_static=yes AC_MSG_RESULT([$enable_static]) _LT_CONFIG($1) fi AC_LANG_POP CC="$lt_save_CC" ])# _LT_LANG_C_CONFIG # _LT_LANG_CXX_CONFIG([TAG]) # -------------------------- # Ensure that the configuration variables for a C++ compiler are suitably # defined. These variables are subsequently used by _LT_CONFIG to write # the compiler configuration to `libtool'. m4_defun([_LT_LANG_CXX_CONFIG], [m4_require([_LT_FILEUTILS_DEFAULTS])dnl m4_require([_LT_DECL_EGREP])dnl m4_require([_LT_PATH_MANIFEST_TOOL])dnl if test -n "$CXX" && ( test "X$CXX" != "Xno" && ( (test "X$CXX" = "Xg++" && `g++ -v >/dev/null 2>&1` ) || (test "X$CXX" != "Xg++"))) ; then AC_PROG_CXXCPP else _lt_caught_CXX_error=yes fi AC_LANG_PUSH(C++) _LT_TAGVAR(archive_cmds_need_lc, $1)=no _LT_TAGVAR(allow_undefined_flag, $1)= _LT_TAGVAR(always_export_symbols, $1)=no _LT_TAGVAR(archive_expsym_cmds, $1)= _LT_TAGVAR(compiler_needs_object, $1)=no _LT_TAGVAR(export_dynamic_flag_spec, $1)= _LT_TAGVAR(hardcode_direct, $1)=no _LT_TAGVAR(hardcode_direct_absolute, $1)=no _LT_TAGVAR(hardcode_libdir_flag_spec, $1)= _LT_TAGVAR(hardcode_libdir_separator, $1)= _LT_TAGVAR(hardcode_minus_L, $1)=no _LT_TAGVAR(hardcode_shlibpath_var, $1)=unsupported _LT_TAGVAR(hardcode_automatic, $1)=no _LT_TAGVAR(inherit_rpath, $1)=no _LT_TAGVAR(module_cmds, $1)= _LT_TAGVAR(module_expsym_cmds, $1)= _LT_TAGVAR(link_all_deplibs, $1)=unknown _LT_TAGVAR(old_archive_cmds, $1)=$old_archive_cmds _LT_TAGVAR(reload_flag, $1)=$reload_flag _LT_TAGVAR(reload_cmds, $1)=$reload_cmds _LT_TAGVAR(no_undefined_flag, $1)= _LT_TAGVAR(whole_archive_flag_spec, $1)= _LT_TAGVAR(enable_shared_with_static_runtimes, $1)=no # Source file extension for C++ test sources. ac_ext=cpp # Object file extension for compiled C++ test sources. objext=o _LT_TAGVAR(objext, $1)=$objext # No sense in running all these tests if we already determined that # the CXX compiler isn't working. Some variables (like enable_shared) # are currently assumed to apply to all compilers on this platform, # and will be corrupted by setting them based on a non-working compiler. if test "$_lt_caught_CXX_error" != yes; then # Code to be used in simple compile tests lt_simple_compile_test_code="int some_variable = 0;" # Code to be used in simple link tests lt_simple_link_test_code='int main(int, char *[[]]) { return(0); }' # ltmain only uses $CC for tagged configurations so make sure $CC is set. _LT_TAG_COMPILER # save warnings/boilerplate of simple test code _LT_COMPILER_BOILERPLATE _LT_LINKER_BOILERPLATE # Allow CC to be a program name with arguments. lt_save_CC=$CC lt_save_CFLAGS=$CFLAGS lt_save_LD=$LD lt_save_GCC=$GCC GCC=$GXX lt_save_with_gnu_ld=$with_gnu_ld lt_save_path_LD=$lt_cv_path_LD if test -n "${lt_cv_prog_gnu_ldcxx+set}"; then lt_cv_prog_gnu_ld=$lt_cv_prog_gnu_ldcxx else $as_unset lt_cv_prog_gnu_ld fi if test -n "${lt_cv_path_LDCXX+set}"; then lt_cv_path_LD=$lt_cv_path_LDCXX else $as_unset lt_cv_path_LD fi test -z "${LDCXX+set}" || LD=$LDCXX CC=${CXX-"c++"} CFLAGS=$CXXFLAGS compiler=$CC _LT_TAGVAR(compiler, $1)=$CC _LT_CC_BASENAME([$compiler]) if test -n "$compiler"; then # We don't want -fno-exception when compiling C++ code, so set the # no_builtin_flag separately if test "$GXX" = yes; then _LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)=' -fno-builtin' else _LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)= fi if test "$GXX" = yes; then # Set up default GNU C++ configuration LT_PATH_LD # Check if GNU C++ uses GNU ld as the underlying linker, since the # archiving commands below assume that GNU ld is being used. if test "$with_gnu_ld" = yes; then _LT_TAGVAR(archive_cmds, $1)='$CC $pic_flag -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname -o $lib' _LT_TAGVAR(archive_expsym_cmds, $1)='$CC $pic_flag -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir' _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}--export-dynamic' # If archive_cmds runs LD, not CC, wlarc should be empty # XXX I think wlarc can be eliminated in ltcf-cxx, but I need to # investigate it a little bit more. (MM) wlarc='${wl}' # ancient GNU ld didn't support --whole-archive et. al. if eval "`$CC -print-prog-name=ld` --help 2>&1" | $GREP 'no-whole-archive' > /dev/null; then _LT_TAGVAR(whole_archive_flag_spec, $1)="$wlarc"'--whole-archive$convenience '"$wlarc"'--no-whole-archive' else _LT_TAGVAR(whole_archive_flag_spec, $1)= fi else with_gnu_ld=no wlarc= # A generic and very simple default shared library creation # command for GNU C++ for the case where it uses the native # linker, instead of GNU ld. If possible, this setting should # overridden to take advantage of the native linker features on # the platform it is being used on. _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $lib' fi # Commands to make compiler produce verbose output that lists # what "hidden" libraries, object files and flags are used when # linking a shared library. output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP -v "^Configured with:" | $GREP "\-L"' else GXX=no with_gnu_ld=no wlarc= fi # PORTME: fill in a description of your system's C++ link characteristics AC_MSG_CHECKING([whether the $compiler linker ($LD) supports shared libraries]) _LT_TAGVAR(ld_shlibs, $1)=yes case $host_os in aix3*) # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no ;; aix[[4-9]]*) if test "$host_cpu" = ia64; then # On IA64, the linker does run time linking by default, so we don't # have to do anything special. aix_use_runtimelinking=no exp_sym_flag='-Bexport' no_entry_flag="" else aix_use_runtimelinking=no # Test if we are trying to use run time linking or normal # AIX style linking. If -brtl is somewhere in LDFLAGS, we # need to do runtime linking. case $host_os in aix4.[[23]]|aix4.[[23]].*|aix[[5-9]]*) for ld_flag in $LDFLAGS; do case $ld_flag in *-brtl*) aix_use_runtimelinking=yes break ;; esac done ;; esac exp_sym_flag='-bexport' no_entry_flag='-bnoentry' fi # When large executables or shared objects are built, AIX ld can # have problems creating the table of contents. If linking a library # or program results in "error TOC overflow" add -mminimal-toc to # CXXFLAGS/CFLAGS for g++/gcc. In the cases where that is not # enough to fix the problem, add -Wl,-bbigtoc to LDFLAGS. _LT_TAGVAR(archive_cmds, $1)='' _LT_TAGVAR(hardcode_direct, $1)=yes _LT_TAGVAR(hardcode_direct_absolute, $1)=yes _LT_TAGVAR(hardcode_libdir_separator, $1)=':' _LT_TAGVAR(link_all_deplibs, $1)=yes _LT_TAGVAR(file_list_spec, $1)='${wl}-f,' if test "$GXX" = yes; then case $host_os in aix4.[[012]]|aix4.[[012]].*) # We only want to do this on AIX 4.2 and lower, the check # below for broken collect2 doesn't work under 4.3+ collect2name=`${CC} -print-prog-name=collect2` if test -f "$collect2name" && strings "$collect2name" | $GREP resolve_lib_name >/dev/null then # We have reworked collect2 : else # We have old collect2 _LT_TAGVAR(hardcode_direct, $1)=unsupported # It fails to find uninstalled libraries when the uninstalled # path is not listed in the libpath. Setting hardcode_minus_L # to unsupported forces relinking _LT_TAGVAR(hardcode_minus_L, $1)=yes _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' _LT_TAGVAR(hardcode_libdir_separator, $1)= fi esac shared_flag='-shared' if test "$aix_use_runtimelinking" = yes; then shared_flag="$shared_flag "'${wl}-G' fi else # not using gcc if test "$host_cpu" = ia64; then # VisualAge C++, Version 5.5 for AIX 5L for IA-64, Beta 3 Release # chokes on -Wl,-G. The following line is correct: shared_flag='-G' else if test "$aix_use_runtimelinking" = yes; then shared_flag='${wl}-G' else shared_flag='${wl}-bM:SRE' fi fi fi _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-bexpall' # It seems that -bexpall does not export symbols beginning with # underscore (_), so it is better to generate a list of symbols to # export. _LT_TAGVAR(always_export_symbols, $1)=yes if test "$aix_use_runtimelinking" = yes; then # Warning - without using the other runtime loading flags (-brtl), # -berok will link without error, but may produce a broken library. _LT_TAGVAR(allow_undefined_flag, $1)='-berok' # Determine the default libpath from the value encoded in an empty # executable. _LT_SYS_MODULE_PATH_AIX([$1]) _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-blibpath:$libdir:'"$aix_libpath" _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -o $output_objdir/$soname $libobjs $deplibs '"\${wl}$no_entry_flag"' $compiler_flags `if test "x${allow_undefined_flag}" != "x"; then func_echo_all "${wl}${allow_undefined_flag}"; else :; fi` '"\${wl}$exp_sym_flag:\$export_symbols $shared_flag" else if test "$host_cpu" = ia64; then _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-R $libdir:/usr/lib:/lib' _LT_TAGVAR(allow_undefined_flag, $1)="-z nodefs" _LT_TAGVAR(archive_expsym_cmds, $1)="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs '"\${wl}$no_entry_flag"' $compiler_flags ${wl}${allow_undefined_flag} '"\${wl}$exp_sym_flag:\$export_symbols" else # Determine the default libpath from the value encoded in an # empty executable. _LT_SYS_MODULE_PATH_AIX([$1]) _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-blibpath:$libdir:'"$aix_libpath" # Warning - without using the other run time loading flags, # -berok will link without error, but may produce a broken library. _LT_TAGVAR(no_undefined_flag, $1)=' ${wl}-bernotok' _LT_TAGVAR(allow_undefined_flag, $1)=' ${wl}-berok' if test "$with_gnu_ld" = yes; then # We only use this code for GNU lds that support --whole-archive. _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}--whole-archive$convenience ${wl}--no-whole-archive' else # Exported symbols can be pulled into shared objects from archives _LT_TAGVAR(whole_archive_flag_spec, $1)='$convenience' fi _LT_TAGVAR(archive_cmds_need_lc, $1)=yes # This is similar to how AIX traditionally builds its shared # libraries. _LT_TAGVAR(archive_expsym_cmds, $1)="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs ${wl}-bnoentry $compiler_flags ${wl}-bE:$export_symbols${allow_undefined_flag}~$AR $AR_FLAGS $output_objdir/$libname$release.a $output_objdir/$soname' fi fi ;; beos*) if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then _LT_TAGVAR(allow_undefined_flag, $1)=unsupported # Joseph Beckenbach says some releases of gcc # support --undefined. This deserves some investigation. FIXME _LT_TAGVAR(archive_cmds, $1)='$CC -nostart $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' else _LT_TAGVAR(ld_shlibs, $1)=no fi ;; chorus*) case $cc_basename in *) # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no ;; esac ;; cygwin* | mingw* | pw32* | cegcc*) case $GXX,$cc_basename in ,cl* | no,cl*) # Native MSVC # hardcode_libdir_flag_spec is actually meaningless, as there is # no search path for DLLs. _LT_TAGVAR(hardcode_libdir_flag_spec, $1)=' ' _LT_TAGVAR(allow_undefined_flag, $1)=unsupported _LT_TAGVAR(always_export_symbols, $1)=yes _LT_TAGVAR(file_list_spec, $1)='@' # Tell ltmain to make .lib files, not .a files. libext=lib # Tell ltmain to make .dll files, not .so files. shrext_cmds=".dll" # FIXME: Setting linknames here is a bad hack. _LT_TAGVAR(archive_cmds, $1)='$CC -o $output_objdir/$soname $libobjs $compiler_flags $deplibs -Wl,-dll~linknames=' _LT_TAGVAR(archive_expsym_cmds, $1)='if test "x`$SED 1q $export_symbols`" = xEXPORTS; then $SED -n -e 's/\\\\\\\(.*\\\\\\\)/-link\\\ -EXPORT:\\\\\\\1/' -e '1\\\!p' < $export_symbols > $output_objdir/$soname.exp; else $SED -e 's/\\\\\\\(.*\\\\\\\)/-link\\\ -EXPORT:\\\\\\\1/' < $export_symbols > $output_objdir/$soname.exp; fi~ $CC -o $tool_output_objdir$soname $libobjs $compiler_flags $deplibs "@$tool_output_objdir$soname.exp" -Wl,-DLL,-IMPLIB:"$tool_output_objdir$libname.dll.lib"~ linknames=' # The linker will not automatically build a static lib if we build a DLL. # _LT_TAGVAR(old_archive_from_new_cmds, $1)='true' _LT_TAGVAR(enable_shared_with_static_runtimes, $1)=yes # Don't use ranlib _LT_TAGVAR(old_postinstall_cmds, $1)='chmod 644 $oldlib' _LT_TAGVAR(postlink_cmds, $1)='lt_outputfile="@OUTPUT@"~ lt_tool_outputfile="@TOOL_OUTPUT@"~ case $lt_outputfile in *.exe|*.EXE) ;; *) lt_outputfile="$lt_outputfile.exe" lt_tool_outputfile="$lt_tool_outputfile.exe" ;; esac~ func_to_tool_file "$lt_outputfile"~ if test "$MANIFEST_TOOL" != ":" && test -f "$lt_outputfile.manifest"; then $MANIFEST_TOOL -manifest "$lt_tool_outputfile.manifest" -outputresource:"$lt_tool_outputfile" || exit 1; $RM "$lt_outputfile.manifest"; fi' ;; *) # g++ # _LT_TAGVAR(hardcode_libdir_flag_spec, $1) is actually meaningless, # as there is no search path for DLLs. _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}--export-all-symbols' _LT_TAGVAR(allow_undefined_flag, $1)=unsupported _LT_TAGVAR(always_export_symbols, $1)=no _LT_TAGVAR(enable_shared_with_static_runtimes, $1)=yes if $LD --help 2>&1 | $GREP 'auto-import' > /dev/null; then _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib' # If the export-symbols file already is a .def file (1st line # is EXPORTS), use it as is; otherwise, prepend... _LT_TAGVAR(archive_expsym_cmds, $1)='if test "x`$SED 1q $export_symbols`" = xEXPORTS; then cp $export_symbols $output_objdir/$soname.def; else echo EXPORTS > $output_objdir/$soname.def; cat $export_symbols >> $output_objdir/$soname.def; fi~ $CC -shared -nostdlib $output_objdir/$soname.def $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib' else _LT_TAGVAR(ld_shlibs, $1)=no fi ;; esac ;; darwin* | rhapsody*) _LT_DARWIN_LINKER_FEATURES($1) ;; dgux*) case $cc_basename in ec++*) # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no ;; ghcx*) # Green Hills C++ Compiler # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no ;; *) # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no ;; esac ;; freebsd2.*) # C++ shared libraries reported to be fairly broken before # switch to ELF _LT_TAGVAR(ld_shlibs, $1)=no ;; freebsd-elf*) _LT_TAGVAR(archive_cmds_need_lc, $1)=no ;; freebsd* | dragonfly*) # FreeBSD 3 and later use GNU C++ and GNU ld with standard ELF # conventions _LT_TAGVAR(ld_shlibs, $1)=yes ;; gnu*) ;; haiku*) _LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' _LT_TAGVAR(link_all_deplibs, $1)=yes ;; hpux9*) _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}+b ${wl}$libdir' _LT_TAGVAR(hardcode_libdir_separator, $1)=: _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E' _LT_TAGVAR(hardcode_direct, $1)=yes _LT_TAGVAR(hardcode_minus_L, $1)=yes # Not in the search PATH, # but as the default # location of the library. case $cc_basename in CC*) # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no ;; aCC*) _LT_TAGVAR(archive_cmds, $1)='$RM $output_objdir/$soname~$CC -b ${wl}+b ${wl}$install_libdir -o $output_objdir/$soname $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib' # Commands to make compiler produce verbose output that lists # what "hidden" libraries, object files and flags are used when # linking a shared library. # # There doesn't appear to be a way to prevent this compiler from # explicitly linking system object files so we need to strip them # from the output so that they don't get included in the library # dependencies. output_verbose_link_cmd='templist=`($CC -b $CFLAGS -v conftest.$objext 2>&1) | $EGREP "\-L"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; func_echo_all "$list"' ;; *) if test "$GXX" = yes; then _LT_TAGVAR(archive_cmds, $1)='$RM $output_objdir/$soname~$CC -shared -nostdlib $pic_flag ${wl}+b ${wl}$install_libdir -o $output_objdir/$soname $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib' else # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no fi ;; esac ;; hpux10*|hpux11*) if test $with_gnu_ld = no; then _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}+b ${wl}$libdir' _LT_TAGVAR(hardcode_libdir_separator, $1)=: case $host_cpu in hppa*64*|ia64*) ;; *) _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E' ;; esac fi case $host_cpu in hppa*64*|ia64*) _LT_TAGVAR(hardcode_direct, $1)=no _LT_TAGVAR(hardcode_shlibpath_var, $1)=no ;; *) _LT_TAGVAR(hardcode_direct, $1)=yes _LT_TAGVAR(hardcode_direct_absolute, $1)=yes _LT_TAGVAR(hardcode_minus_L, $1)=yes # Not in the search PATH, # but as the default # location of the library. ;; esac case $cc_basename in CC*) # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no ;; aCC*) case $host_cpu in hppa*64*) _LT_TAGVAR(archive_cmds, $1)='$CC -b ${wl}+h ${wl}$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' ;; ia64*) _LT_TAGVAR(archive_cmds, $1)='$CC -b ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' ;; *) _LT_TAGVAR(archive_cmds, $1)='$CC -b ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' ;; esac # Commands to make compiler produce verbose output that lists # what "hidden" libraries, object files and flags are used when # linking a shared library. # # There doesn't appear to be a way to prevent this compiler from # explicitly linking system object files so we need to strip them # from the output so that they don't get included in the library # dependencies. output_verbose_link_cmd='templist=`($CC -b $CFLAGS -v conftest.$objext 2>&1) | $GREP "\-L"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; func_echo_all "$list"' ;; *) if test "$GXX" = yes; then if test $with_gnu_ld = no; then case $host_cpu in hppa*64*) _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib -fPIC ${wl}+h ${wl}$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' ;; ia64*) _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib $pic_flag ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' ;; *) _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib $pic_flag ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' ;; esac fi else # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no fi ;; esac ;; interix[[3-9]]*) _LT_TAGVAR(hardcode_direct, $1)=no _LT_TAGVAR(hardcode_shlibpath_var, $1)=no _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir' _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E' # Hack: On Interix 3.x, we cannot compile PIC because of a broken gcc. # Instead, shared libraries are loaded at an image base (0x10000000 by # default) and relocated if they conflict, which is a slow very memory # consuming and fragmenting process. To avoid this, we pick a random, # 256 KiB-aligned image base between 0x50000000 and 0x6FFC0000 at link # time. Moving up from 0x10000000 also allows more sbrk(2) space. _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-h,$soname ${wl}--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib' _LT_TAGVAR(archive_expsym_cmds, $1)='sed "s,^,_," $export_symbols >$output_objdir/$soname.expsym~$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-h,$soname ${wl}--retain-symbols-file,$output_objdir/$soname.expsym ${wl}--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib' ;; irix5* | irix6*) case $cc_basename in CC*) # SGI C++ _LT_TAGVAR(archive_cmds, $1)='$CC -shared -all -multigot $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry ${output_objdir}/so_locations -o $lib' # Archives containing C++ object files must be created using # "CC -ar", where "CC" is the IRIX C++ compiler. This is # necessary to make sure instantiated templates are included # in the archive. _LT_TAGVAR(old_archive_cmds, $1)='$CC -ar -WR,-u -o $oldlib $oldobjs' ;; *) if test "$GXX" = yes; then if test "$with_gnu_ld" = no; then _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' else _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` -o $lib' fi fi _LT_TAGVAR(link_all_deplibs, $1)=yes ;; esac _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir' _LT_TAGVAR(hardcode_libdir_separator, $1)=: _LT_TAGVAR(inherit_rpath, $1)=yes ;; linux* | k*bsd*-gnu | kopensolaris*-gnu) case $cc_basename in KCC*) # Kuck and Associates, Inc. (KAI) C++ Compiler # KCC will only create a shared library if the output file # ends with ".so" (or ".sl" for HP-UX), so rename the library # to its proper name (with version) after linking. _LT_TAGVAR(archive_cmds, $1)='tempext=`echo $shared_ext | $SED -e '\''s/\([[^()0-9A-Za-z{}]]\)/\\\\\1/g'\''`; templib=`echo $lib | $SED -e "s/\${tempext}\..*/.so/"`; $CC $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags --soname $soname -o \$templib; mv \$templib $lib' _LT_TAGVAR(archive_expsym_cmds, $1)='tempext=`echo $shared_ext | $SED -e '\''s/\([[^()0-9A-Za-z{}]]\)/\\\\\1/g'\''`; templib=`echo $lib | $SED -e "s/\${tempext}\..*/.so/"`; $CC $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags --soname $soname -o \$templib ${wl}-retain-symbols-file,$export_symbols; mv \$templib $lib' # Commands to make compiler produce verbose output that lists # what "hidden" libraries, object files and flags are used when # linking a shared library. # # There doesn't appear to be a way to prevent this compiler from # explicitly linking system object files so we need to strip them # from the output so that they don't get included in the library # dependencies. output_verbose_link_cmd='templist=`$CC $CFLAGS -v conftest.$objext -o libconftest$shared_ext 2>&1 | $GREP "ld"`; rm -f libconftest$shared_ext; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; func_echo_all "$list"' _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir' _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}--export-dynamic' # Archives containing C++ object files must be created using # "CC -Bstatic", where "CC" is the KAI C++ compiler. _LT_TAGVAR(old_archive_cmds, $1)='$CC -Bstatic -o $oldlib $oldobjs' ;; icpc* | ecpc* ) # Intel C++ with_gnu_ld=yes # version 8.0 and above of icpc choke on multiply defined symbols # if we add $predep_objects and $postdep_objects, however 7.1 and # earlier do not add the objects themselves. case `$CC -V 2>&1` in *"Version 7."*) _LT_TAGVAR(archive_cmds, $1)='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname -o $lib' _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' ;; *) # Version 8.0 or newer tmp_idyn= case $host_cpu in ia64*) tmp_idyn=' -i_dynamic';; esac _LT_TAGVAR(archive_cmds, $1)='$CC -shared'"$tmp_idyn"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared'"$tmp_idyn"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' ;; esac _LT_TAGVAR(archive_cmds_need_lc, $1)=no _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir' _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}--export-dynamic' _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}--whole-archive$convenience ${wl}--no-whole-archive' ;; pgCC* | pgcpp*) # Portland Group C++ compiler case `$CC -V` in *pgCC\ [[1-5]].* | *pgcpp\ [[1-5]].*) _LT_TAGVAR(prelink_cmds, $1)='tpldir=Template.dir~ rm -rf $tpldir~ $CC --prelink_objects --instantiation_dir $tpldir $objs $libobjs $compile_deplibs~ compile_command="$compile_command `find $tpldir -name \*.o | sort | $NL2SP`"' _LT_TAGVAR(old_archive_cmds, $1)='tpldir=Template.dir~ rm -rf $tpldir~ $CC --prelink_objects --instantiation_dir $tpldir $oldobjs$old_deplibs~ $AR $AR_FLAGS $oldlib$oldobjs$old_deplibs `find $tpldir -name \*.o | sort | $NL2SP`~ $RANLIB $oldlib' _LT_TAGVAR(archive_cmds, $1)='tpldir=Template.dir~ rm -rf $tpldir~ $CC --prelink_objects --instantiation_dir $tpldir $predep_objects $libobjs $deplibs $convenience $postdep_objects~ $CC -shared $pic_flag $predep_objects $libobjs $deplibs `find $tpldir -name \*.o | sort | $NL2SP` $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname -o $lib' _LT_TAGVAR(archive_expsym_cmds, $1)='tpldir=Template.dir~ rm -rf $tpldir~ $CC --prelink_objects --instantiation_dir $tpldir $predep_objects $libobjs $deplibs $convenience $postdep_objects~ $CC -shared $pic_flag $predep_objects $libobjs $deplibs `find $tpldir -name \*.o | sort | $NL2SP` $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname ${wl}-retain-symbols-file ${wl}$export_symbols -o $lib' ;; *) # Version 6 and above use weak symbols _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname -o $lib' _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname ${wl}-retain-symbols-file ${wl}$export_symbols -o $lib' ;; esac _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}--rpath ${wl}$libdir' _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}--export-dynamic' _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}--whole-archive`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` ${wl}--no-whole-archive' ;; cxx*) # Compaq C++ _LT_TAGVAR(archive_cmds, $1)='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname -o $lib' _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname -o $lib ${wl}-retain-symbols-file $wl$export_symbols' runpath_var=LD_RUN_PATH _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-rpath $libdir' _LT_TAGVAR(hardcode_libdir_separator, $1)=: # Commands to make compiler produce verbose output that lists # what "hidden" libraries, object files and flags are used when # linking a shared library. # # There doesn't appear to be a way to prevent this compiler from # explicitly linking system object files so we need to strip them # from the output so that they don't get included in the library # dependencies. output_verbose_link_cmd='templist=`$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP "ld"`; templist=`func_echo_all "$templist" | $SED "s/\(^.*ld.*\)\( .*ld .*$\)/\1/"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; func_echo_all "X$list" | $Xsed' ;; xl* | mpixl* | bgxl*) # IBM XL 8.0 on PPC, with GNU ld _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir' _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}--export-dynamic' _LT_TAGVAR(archive_cmds, $1)='$CC -qmkshrobj $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' if test "x$supports_anon_versioning" = xyes; then _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $output_objdir/$libname.ver~ cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~ echo "local: *; };" >> $output_objdir/$libname.ver~ $CC -qmkshrobj $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-version-script ${wl}$output_objdir/$libname.ver -o $lib' fi ;; *) case `$CC -V 2>&1 | sed 5q` in *Sun\ C*) # Sun C++ 5.9 _LT_TAGVAR(no_undefined_flag, $1)=' -zdefs' _LT_TAGVAR(archive_cmds, $1)='$CC -G${allow_undefined_flag} -h$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -G${allow_undefined_flag} -h$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-retain-symbols-file ${wl}$export_symbols' _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir' _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}--whole-archive`new_convenience=; for conv in $convenience\"\"; do test -z \"$conv\" || new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` ${wl}--no-whole-archive' _LT_TAGVAR(compiler_needs_object, $1)=yes # Not sure whether something based on # $CC $CFLAGS -v conftest.$objext -o libconftest$shared_ext 2>&1 # would be better. output_verbose_link_cmd='func_echo_all' # Archives containing C++ object files must be created using # "CC -xar", where "CC" is the Sun C++ compiler. This is # necessary to make sure instantiated templates are included # in the archive. _LT_TAGVAR(old_archive_cmds, $1)='$CC -xar -o $oldlib $oldobjs' ;; esac ;; esac ;; lynxos*) # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no ;; m88k*) # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no ;; mvs*) case $cc_basename in cxx*) # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no ;; *) # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no ;; esac ;; netbsd*) if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then _LT_TAGVAR(archive_cmds, $1)='$LD -Bshareable -o $lib $predep_objects $libobjs $deplibs $postdep_objects $linker_flags' wlarc= _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir' _LT_TAGVAR(hardcode_direct, $1)=yes _LT_TAGVAR(hardcode_shlibpath_var, $1)=no fi # Workaround some broken pre-1.5 toolchains output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP conftest.$objext | $SED -e "s:-lgcc -lc -lgcc::"' ;; *nto* | *qnx*) _LT_TAGVAR(ld_shlibs, $1)=yes ;; openbsd2*) # C++ shared libraries are fairly broken _LT_TAGVAR(ld_shlibs, $1)=no ;; openbsd*) if test -f /usr/libexec/ld.so; then _LT_TAGVAR(hardcode_direct, $1)=yes _LT_TAGVAR(hardcode_shlibpath_var, $1)=no _LT_TAGVAR(hardcode_direct_absolute, $1)=yes _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $lib' _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir' if test -z "`echo __ELF__ | $CC -E - | grep __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-retain-symbols-file,$export_symbols -o $lib' _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E' _LT_TAGVAR(whole_archive_flag_spec, $1)="$wlarc"'--whole-archive$convenience '"$wlarc"'--no-whole-archive' fi output_verbose_link_cmd=func_echo_all else _LT_TAGVAR(ld_shlibs, $1)=no fi ;; osf3* | osf4* | osf5*) case $cc_basename in KCC*) # Kuck and Associates, Inc. (KAI) C++ Compiler # KCC will only create a shared library if the output file # ends with ".so" (or ".sl" for HP-UX), so rename the library # to its proper name (with version) after linking. _LT_TAGVAR(archive_cmds, $1)='tempext=`echo $shared_ext | $SED -e '\''s/\([[^()0-9A-Za-z{}]]\)/\\\\\1/g'\''`; templib=`echo "$lib" | $SED -e "s/\${tempext}\..*/.so/"`; $CC $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags --soname $soname -o \$templib; mv \$templib $lib' _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir' _LT_TAGVAR(hardcode_libdir_separator, $1)=: # Archives containing C++ object files must be created using # the KAI C++ compiler. case $host in osf3*) _LT_TAGVAR(old_archive_cmds, $1)='$CC -Bstatic -o $oldlib $oldobjs' ;; *) _LT_TAGVAR(old_archive_cmds, $1)='$CC -o $oldlib $oldobjs' ;; esac ;; RCC*) # Rational C++ 2.4.1 # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no ;; cxx*) case $host in osf3*) _LT_TAGVAR(allow_undefined_flag, $1)=' ${wl}-expect_unresolved ${wl}\*' _LT_TAGVAR(archive_cmds, $1)='$CC -shared${allow_undefined_flag} $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $soname `test -n "$verstring" && func_echo_all "${wl}-set_version $verstring"` -update_registry ${output_objdir}/so_locations -o $lib' _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir' ;; *) _LT_TAGVAR(allow_undefined_flag, $1)=' -expect_unresolved \*' _LT_TAGVAR(archive_cmds, $1)='$CC -shared${allow_undefined_flag} $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -msym -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry ${output_objdir}/so_locations -o $lib' _LT_TAGVAR(archive_expsym_cmds, $1)='for i in `cat $export_symbols`; do printf "%s %s\\n" -exported_symbol "\$i" >> $lib.exp; done~ echo "-hidden">> $lib.exp~ $CC -shared$allow_undefined_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -msym -soname $soname ${wl}-input ${wl}$lib.exp `test -n "$verstring" && $ECHO "-set_version $verstring"` -update_registry ${output_objdir}/so_locations -o $lib~ $RM $lib.exp' _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-rpath $libdir' ;; esac _LT_TAGVAR(hardcode_libdir_separator, $1)=: # Commands to make compiler produce verbose output that lists # what "hidden" libraries, object files and flags are used when # linking a shared library. # # There doesn't appear to be a way to prevent this compiler from # explicitly linking system object files so we need to strip them # from the output so that they don't get included in the library # dependencies. output_verbose_link_cmd='templist=`$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP "ld" | $GREP -v "ld:"`; templist=`func_echo_all "$templist" | $SED "s/\(^.*ld.*\)\( .*ld.*$\)/\1/"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; func_echo_all "$list"' ;; *) if test "$GXX" = yes && test "$with_gnu_ld" = no; then _LT_TAGVAR(allow_undefined_flag, $1)=' ${wl}-expect_unresolved ${wl}\*' case $host in osf3*) _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib ${allow_undefined_flag} $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' ;; *) _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag -nostdlib ${allow_undefined_flag} $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-msym ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' ;; esac _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir' _LT_TAGVAR(hardcode_libdir_separator, $1)=: # Commands to make compiler produce verbose output that lists # what "hidden" libraries, object files and flags are used when # linking a shared library. output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP -v "^Configured with:" | $GREP "\-L"' else # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no fi ;; esac ;; psos*) # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no ;; sunos4*) case $cc_basename in CC*) # Sun C++ 4.x # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no ;; lcc*) # Lucid # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no ;; *) # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no ;; esac ;; solaris*) case $cc_basename in CC* | sunCC*) # Sun C++ 4.2, 5.x and Centerline C++ _LT_TAGVAR(archive_cmds_need_lc,$1)=yes _LT_TAGVAR(no_undefined_flag, $1)=' -zdefs' _LT_TAGVAR(archive_cmds, $1)='$CC -G${allow_undefined_flag} -h$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ $CC -G${allow_undefined_flag} ${wl}-M ${wl}$lib.exp -h$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~$RM $lib.exp' _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir' _LT_TAGVAR(hardcode_shlibpath_var, $1)=no case $host_os in solaris2.[[0-5]] | solaris2.[[0-5]].*) ;; *) # The compiler driver will combine and reorder linker options, # but understands `-z linker_flag'. # Supported since Solaris 2.6 (maybe 2.5.1?) _LT_TAGVAR(whole_archive_flag_spec, $1)='-z allextract$convenience -z defaultextract' ;; esac _LT_TAGVAR(link_all_deplibs, $1)=yes output_verbose_link_cmd='func_echo_all' # Archives containing C++ object files must be created using # "CC -xar", where "CC" is the Sun C++ compiler. This is # necessary to make sure instantiated templates are included # in the archive. _LT_TAGVAR(old_archive_cmds, $1)='$CC -xar -o $oldlib $oldobjs' ;; gcx*) # Green Hills C++ Compiler _LT_TAGVAR(archive_cmds, $1)='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-h $wl$soname -o $lib' # The C++ compiler must be used to create the archive. _LT_TAGVAR(old_archive_cmds, $1)='$CC $LDFLAGS -archive -o $oldlib $oldobjs' ;; *) # GNU C++ compiler with Solaris linker if test "$GXX" = yes && test "$with_gnu_ld" = no; then _LT_TAGVAR(no_undefined_flag, $1)=' ${wl}-z ${wl}defs' if $CC --version | $GREP -v '^2\.7' > /dev/null; then _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag -nostdlib $LDFLAGS $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-h $wl$soname -o $lib' _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ $CC -shared $pic_flag -nostdlib ${wl}-M $wl$lib.exp -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~$RM $lib.exp' # Commands to make compiler produce verbose output that lists # what "hidden" libraries, object files and flags are used when # linking a shared library. output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP -v "^Configured with:" | $GREP "\-L"' else # g++ 2.7 appears to require `-G' NOT `-shared' on this # platform. _LT_TAGVAR(archive_cmds, $1)='$CC -G -nostdlib $LDFLAGS $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-h $wl$soname -o $lib' _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ $CC -G -nostdlib ${wl}-M $wl$lib.exp -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~$RM $lib.exp' # Commands to make compiler produce verbose output that lists # what "hidden" libraries, object files and flags are used when # linking a shared library. output_verbose_link_cmd='$CC -G $CFLAGS -v conftest.$objext 2>&1 | $GREP -v "^Configured with:" | $GREP "\-L"' fi _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-R $wl$libdir' case $host_os in solaris2.[[0-5]] | solaris2.[[0-5]].*) ;; *) _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}-z ${wl}allextract$convenience ${wl}-z ${wl}defaultextract' ;; esac fi ;; esac ;; sysv4*uw2* | sysv5OpenUNIX* | sysv5UnixWare7.[[01]].[[10]]* | unixware7* | sco3.2v5.0.[[024]]*) _LT_TAGVAR(no_undefined_flag, $1)='${wl}-z,text' _LT_TAGVAR(archive_cmds_need_lc, $1)=no _LT_TAGVAR(hardcode_shlibpath_var, $1)=no runpath_var='LD_RUN_PATH' case $cc_basename in CC*) _LT_TAGVAR(archive_cmds, $1)='$CC -G ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -G ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' ;; *) _LT_TAGVAR(archive_cmds, $1)='$CC -shared ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' ;; esac ;; sysv5* | sco3.2v5* | sco5v6*) # Note: We can NOT use -z defs as we might desire, because we do not # link with -lc, and that would cause any symbols used from libc to # always be unresolved, which means just about no library would # ever link correctly. If we're not using GNU ld we use -z text # though, which does catch some bad symbols but isn't as heavy-handed # as -z defs. _LT_TAGVAR(no_undefined_flag, $1)='${wl}-z,text' _LT_TAGVAR(allow_undefined_flag, $1)='${wl}-z,nodefs' _LT_TAGVAR(archive_cmds_need_lc, $1)=no _LT_TAGVAR(hardcode_shlibpath_var, $1)=no _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-R,$libdir' _LT_TAGVAR(hardcode_libdir_separator, $1)=':' _LT_TAGVAR(link_all_deplibs, $1)=yes _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-Bexport' runpath_var='LD_RUN_PATH' case $cc_basename in CC*) _LT_TAGVAR(archive_cmds, $1)='$CC -G ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -G ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' _LT_TAGVAR(old_archive_cmds, $1)='$CC -Tprelink_objects $oldobjs~ '"$_LT_TAGVAR(old_archive_cmds, $1)" _LT_TAGVAR(reload_cmds, $1)='$CC -Tprelink_objects $reload_objs~ '"$_LT_TAGVAR(reload_cmds, $1)" ;; *) _LT_TAGVAR(archive_cmds, $1)='$CC -shared ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' ;; esac ;; tandem*) case $cc_basename in NCC*) # NonStop-UX NCC 3.20 # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no ;; *) # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no ;; esac ;; vxworks*) # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no ;; *) # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no ;; esac AC_MSG_RESULT([$_LT_TAGVAR(ld_shlibs, $1)]) test "$_LT_TAGVAR(ld_shlibs, $1)" = no && can_build_shared=no _LT_TAGVAR(GCC, $1)="$GXX" _LT_TAGVAR(LD, $1)="$LD" ## CAVEAT EMPTOR: ## There is no encapsulation within the following macros, do not change ## the running order or otherwise move them around unless you know exactly ## what you are doing... _LT_SYS_HIDDEN_LIBDEPS($1) _LT_COMPILER_PIC($1) _LT_COMPILER_C_O($1) _LT_COMPILER_FILE_LOCKS($1) _LT_LINKER_SHLIBS($1) _LT_SYS_DYNAMIC_LINKER($1) _LT_LINKER_HARDCODE_LIBPATH($1) _LT_CONFIG($1) fi # test -n "$compiler" CC=$lt_save_CC CFLAGS=$lt_save_CFLAGS LDCXX=$LD LD=$lt_save_LD GCC=$lt_save_GCC with_gnu_ld=$lt_save_with_gnu_ld lt_cv_path_LDCXX=$lt_cv_path_LD lt_cv_path_LD=$lt_save_path_LD lt_cv_prog_gnu_ldcxx=$lt_cv_prog_gnu_ld lt_cv_prog_gnu_ld=$lt_save_with_gnu_ld fi # test "$_lt_caught_CXX_error" != yes AC_LANG_POP ])# _LT_LANG_CXX_CONFIG # _LT_FUNC_STRIPNAME_CNF # ---------------------- # func_stripname_cnf prefix suffix name # strip PREFIX and SUFFIX off of NAME. # PREFIX and SUFFIX must not contain globbing or regex special # characters, hashes, percent signs, but SUFFIX may contain a leading # dot (in which case that matches only a dot). # # This function is identical to the (non-XSI) version of func_stripname, # except this one can be used by m4 code that may be executed by configure, # rather than the libtool script. m4_defun([_LT_FUNC_STRIPNAME_CNF],[dnl AC_REQUIRE([_LT_DECL_SED]) AC_REQUIRE([_LT_PROG_ECHO_BACKSLASH]) func_stripname_cnf () { case ${2} in .*) func_stripname_result=`$ECHO "${3}" | $SED "s%^${1}%%; s%\\\\${2}\$%%"`;; *) func_stripname_result=`$ECHO "${3}" | $SED "s%^${1}%%; s%${2}\$%%"`;; esac } # func_stripname_cnf ])# _LT_FUNC_STRIPNAME_CNF # _LT_SYS_HIDDEN_LIBDEPS([TAGNAME]) # --------------------------------- # Figure out "hidden" library dependencies from verbose # compiler output when linking a shared library. # Parse the compiler output and extract the necessary # objects, libraries and library flags. m4_defun([_LT_SYS_HIDDEN_LIBDEPS], [m4_require([_LT_FILEUTILS_DEFAULTS])dnl AC_REQUIRE([_LT_FUNC_STRIPNAME_CNF])dnl # Dependencies to place before and after the object being linked: _LT_TAGVAR(predep_objects, $1)= _LT_TAGVAR(postdep_objects, $1)= _LT_TAGVAR(predeps, $1)= _LT_TAGVAR(postdeps, $1)= _LT_TAGVAR(compiler_lib_search_path, $1)= dnl we can't use the lt_simple_compile_test_code here, dnl because it contains code intended for an executable, dnl not a library. It's possible we should let each dnl tag define a new lt_????_link_test_code variable, dnl but it's only used here... m4_if([$1], [], [cat > conftest.$ac_ext <<_LT_EOF int a; void foo (void) { a = 0; } _LT_EOF ], [$1], [CXX], [cat > conftest.$ac_ext <<_LT_EOF class Foo { public: Foo (void) { a = 0; } private: int a; }; _LT_EOF ], [$1], [F77], [cat > conftest.$ac_ext <<_LT_EOF subroutine foo implicit none integer*4 a a=0 return end _LT_EOF ], [$1], [FC], [cat > conftest.$ac_ext <<_LT_EOF subroutine foo implicit none integer a a=0 return end _LT_EOF ], [$1], [GCJ], [cat > conftest.$ac_ext <<_LT_EOF public class foo { private int a; public void bar (void) { a = 0; } }; _LT_EOF ], [$1], [GO], [cat > conftest.$ac_ext <<_LT_EOF package foo func foo() { } _LT_EOF ]) _lt_libdeps_save_CFLAGS=$CFLAGS case "$CC $CFLAGS " in #( *\ -flto*\ *) CFLAGS="$CFLAGS -fno-lto" ;; *\ -fwhopr*\ *) CFLAGS="$CFLAGS -fno-whopr" ;; *\ -fuse-linker-plugin*\ *) CFLAGS="$CFLAGS -fno-use-linker-plugin" ;; esac dnl Parse the compiler output and extract the necessary dnl objects, libraries and library flags. if AC_TRY_EVAL(ac_compile); then # Parse the compiler output and extract the necessary # objects, libraries and library flags. # Sentinel used to keep track of whether or not we are before # the conftest object file. pre_test_object_deps_done=no for p in `eval "$output_verbose_link_cmd"`; do case ${prev}${p} in -L* | -R* | -l*) # Some compilers place space between "-{L,R}" and the path. # Remove the space. if test $p = "-L" || test $p = "-R"; then prev=$p continue fi # Expand the sysroot to ease extracting the directories later. if test -z "$prev"; then case $p in -L*) func_stripname_cnf '-L' '' "$p"; prev=-L; p=$func_stripname_result ;; -R*) func_stripname_cnf '-R' '' "$p"; prev=-R; p=$func_stripname_result ;; -l*) func_stripname_cnf '-l' '' "$p"; prev=-l; p=$func_stripname_result ;; esac fi case $p in =*) func_stripname_cnf '=' '' "$p"; p=$lt_sysroot$func_stripname_result ;; esac if test "$pre_test_object_deps_done" = no; then case ${prev} in -L | -R) # Internal compiler library paths should come after those # provided the user. The postdeps already come after the # user supplied libs so there is no need to process them. if test -z "$_LT_TAGVAR(compiler_lib_search_path, $1)"; then _LT_TAGVAR(compiler_lib_search_path, $1)="${prev}${p}" else _LT_TAGVAR(compiler_lib_search_path, $1)="${_LT_TAGVAR(compiler_lib_search_path, $1)} ${prev}${p}" fi ;; # The "-l" case would never come before the object being # linked, so don't bother handling this case. esac else if test -z "$_LT_TAGVAR(postdeps, $1)"; then _LT_TAGVAR(postdeps, $1)="${prev}${p}" else _LT_TAGVAR(postdeps, $1)="${_LT_TAGVAR(postdeps, $1)} ${prev}${p}" fi fi prev= ;; *.lto.$objext) ;; # Ignore GCC LTO objects *.$objext) # This assumes that the test object file only shows up # once in the compiler output. if test "$p" = "conftest.$objext"; then pre_test_object_deps_done=yes continue fi if test "$pre_test_object_deps_done" = no; then if test -z "$_LT_TAGVAR(predep_objects, $1)"; then _LT_TAGVAR(predep_objects, $1)="$p" else _LT_TAGVAR(predep_objects, $1)="$_LT_TAGVAR(predep_objects, $1) $p" fi else if test -z "$_LT_TAGVAR(postdep_objects, $1)"; then _LT_TAGVAR(postdep_objects, $1)="$p" else _LT_TAGVAR(postdep_objects, $1)="$_LT_TAGVAR(postdep_objects, $1) $p" fi fi ;; *) ;; # Ignore the rest. esac done # Clean up. rm -f a.out a.exe else echo "libtool.m4: error: problem compiling $1 test program" fi $RM -f confest.$objext CFLAGS=$_lt_libdeps_save_CFLAGS # PORTME: override above test on systems where it is broken m4_if([$1], [CXX], [case $host_os in interix[[3-9]]*) # Interix 3.5 installs completely hosed .la files for C++, so rather than # hack all around it, let's just trust "g++" to DTRT. _LT_TAGVAR(predep_objects,$1)= _LT_TAGVAR(postdep_objects,$1)= _LT_TAGVAR(postdeps,$1)= ;; linux*) case `$CC -V 2>&1 | sed 5q` in *Sun\ C*) # Sun C++ 5.9 # The more standards-conforming stlport4 library is # incompatible with the Cstd library. Avoid specifying # it if it's in CXXFLAGS. Ignore libCrun as # -library=stlport4 depends on it. case " $CXX $CXXFLAGS " in *" -library=stlport4 "*) solaris_use_stlport4=yes ;; esac if test "$solaris_use_stlport4" != yes; then _LT_TAGVAR(postdeps,$1)='-library=Cstd -library=Crun' fi ;; esac ;; solaris*) case $cc_basename in CC* | sunCC*) # The more standards-conforming stlport4 library is # incompatible with the Cstd library. Avoid specifying # it if it's in CXXFLAGS. Ignore libCrun as # -library=stlport4 depends on it. case " $CXX $CXXFLAGS " in *" -library=stlport4 "*) solaris_use_stlport4=yes ;; esac # Adding this requires a known-good setup of shared libraries for # Sun compiler versions before 5.6, else PIC objects from an old # archive will be linked into the output, leading to subtle bugs. if test "$solaris_use_stlport4" != yes; then _LT_TAGVAR(postdeps,$1)='-library=Cstd -library=Crun' fi ;; esac ;; esac ]) case " $_LT_TAGVAR(postdeps, $1) " in *" -lc "*) _LT_TAGVAR(archive_cmds_need_lc, $1)=no ;; esac _LT_TAGVAR(compiler_lib_search_dirs, $1)= if test -n "${_LT_TAGVAR(compiler_lib_search_path, $1)}"; then _LT_TAGVAR(compiler_lib_search_dirs, $1)=`echo " ${_LT_TAGVAR(compiler_lib_search_path, $1)}" | ${SED} -e 's! -L! !g' -e 's!^ !!'` fi _LT_TAGDECL([], [compiler_lib_search_dirs], [1], [The directories searched by this compiler when creating a shared library]) _LT_TAGDECL([], [predep_objects], [1], [Dependencies to place before and after the objects being linked to create a shared library]) _LT_TAGDECL([], [postdep_objects], [1]) _LT_TAGDECL([], [predeps], [1]) _LT_TAGDECL([], [postdeps], [1]) _LT_TAGDECL([], [compiler_lib_search_path], [1], [The library search path used internally by the compiler when linking a shared library]) ])# _LT_SYS_HIDDEN_LIBDEPS # _LT_LANG_F77_CONFIG([TAG]) # -------------------------- # Ensure that the configuration variables for a Fortran 77 compiler are # suitably defined. These variables are subsequently used by _LT_CONFIG # to write the compiler configuration to `libtool'. m4_defun([_LT_LANG_F77_CONFIG], [AC_LANG_PUSH(Fortran 77) if test -z "$F77" || test "X$F77" = "Xno"; then _lt_disable_F77=yes fi _LT_TAGVAR(archive_cmds_need_lc, $1)=no _LT_TAGVAR(allow_undefined_flag, $1)= _LT_TAGVAR(always_export_symbols, $1)=no _LT_TAGVAR(archive_expsym_cmds, $1)= _LT_TAGVAR(export_dynamic_flag_spec, $1)= _LT_TAGVAR(hardcode_direct, $1)=no _LT_TAGVAR(hardcode_direct_absolute, $1)=no _LT_TAGVAR(hardcode_libdir_flag_spec, $1)= _LT_TAGVAR(hardcode_libdir_separator, $1)= _LT_TAGVAR(hardcode_minus_L, $1)=no _LT_TAGVAR(hardcode_automatic, $1)=no _LT_TAGVAR(inherit_rpath, $1)=no _LT_TAGVAR(module_cmds, $1)= _LT_TAGVAR(module_expsym_cmds, $1)= _LT_TAGVAR(link_all_deplibs, $1)=unknown _LT_TAGVAR(old_archive_cmds, $1)=$old_archive_cmds _LT_TAGVAR(reload_flag, $1)=$reload_flag _LT_TAGVAR(reload_cmds, $1)=$reload_cmds _LT_TAGVAR(no_undefined_flag, $1)= _LT_TAGVAR(whole_archive_flag_spec, $1)= _LT_TAGVAR(enable_shared_with_static_runtimes, $1)=no # Source file extension for f77 test sources. ac_ext=f # Object file extension for compiled f77 test sources. objext=o _LT_TAGVAR(objext, $1)=$objext # No sense in running all these tests if we already determined that # the F77 compiler isn't working. Some variables (like enable_shared) # are currently assumed to apply to all compilers on this platform, # and will be corrupted by setting them based on a non-working compiler. if test "$_lt_disable_F77" != yes; then # Code to be used in simple compile tests lt_simple_compile_test_code="\ subroutine t return end " # Code to be used in simple link tests lt_simple_link_test_code="\ program t end " # ltmain only uses $CC for tagged configurations so make sure $CC is set. _LT_TAG_COMPILER # save warnings/boilerplate of simple test code _LT_COMPILER_BOILERPLATE _LT_LINKER_BOILERPLATE # Allow CC to be a program name with arguments. lt_save_CC="$CC" lt_save_GCC=$GCC lt_save_CFLAGS=$CFLAGS CC=${F77-"f77"} CFLAGS=$FFLAGS compiler=$CC _LT_TAGVAR(compiler, $1)=$CC _LT_CC_BASENAME([$compiler]) GCC=$G77 if test -n "$compiler"; then AC_MSG_CHECKING([if libtool supports shared libraries]) AC_MSG_RESULT([$can_build_shared]) AC_MSG_CHECKING([whether to build shared libraries]) test "$can_build_shared" = "no" && enable_shared=no # On AIX, shared libraries and static libraries use the same namespace, and # are all built from PIC. case $host_os in aix3*) test "$enable_shared" = yes && enable_static=no if test -n "$RANLIB"; then archive_cmds="$archive_cmds~\$RANLIB \$lib" postinstall_cmds='$RANLIB $lib' fi ;; aix[[4-9]]*) if test "$host_cpu" != ia64 && test "$aix_use_runtimelinking" = no ; then test "$enable_shared" = yes && enable_static=no fi ;; esac AC_MSG_RESULT([$enable_shared]) AC_MSG_CHECKING([whether to build static libraries]) # Make sure either enable_shared or enable_static is yes. test "$enable_shared" = yes || enable_static=yes AC_MSG_RESULT([$enable_static]) _LT_TAGVAR(GCC, $1)="$G77" _LT_TAGVAR(LD, $1)="$LD" ## CAVEAT EMPTOR: ## There is no encapsulation within the following macros, do not change ## the running order or otherwise move them around unless you know exactly ## what you are doing... _LT_COMPILER_PIC($1) _LT_COMPILER_C_O($1) _LT_COMPILER_FILE_LOCKS($1) _LT_LINKER_SHLIBS($1) _LT_SYS_DYNAMIC_LINKER($1) _LT_LINKER_HARDCODE_LIBPATH($1) _LT_CONFIG($1) fi # test -n "$compiler" GCC=$lt_save_GCC CC="$lt_save_CC" CFLAGS="$lt_save_CFLAGS" fi # test "$_lt_disable_F77" != yes AC_LANG_POP ])# _LT_LANG_F77_CONFIG # _LT_LANG_FC_CONFIG([TAG]) # ------------------------- # Ensure that the configuration variables for a Fortran compiler are # suitably defined. These variables are subsequently used by _LT_CONFIG # to write the compiler configuration to `libtool'. m4_defun([_LT_LANG_FC_CONFIG], [AC_LANG_PUSH(Fortran) if test -z "$FC" || test "X$FC" = "Xno"; then _lt_disable_FC=yes fi _LT_TAGVAR(archive_cmds_need_lc, $1)=no _LT_TAGVAR(allow_undefined_flag, $1)= _LT_TAGVAR(always_export_symbols, $1)=no _LT_TAGVAR(archive_expsym_cmds, $1)= _LT_TAGVAR(export_dynamic_flag_spec, $1)= _LT_TAGVAR(hardcode_direct, $1)=no _LT_TAGVAR(hardcode_direct_absolute, $1)=no _LT_TAGVAR(hardcode_libdir_flag_spec, $1)= _LT_TAGVAR(hardcode_libdir_separator, $1)= _LT_TAGVAR(hardcode_minus_L, $1)=no _LT_TAGVAR(hardcode_automatic, $1)=no _LT_TAGVAR(inherit_rpath, $1)=no _LT_TAGVAR(module_cmds, $1)= _LT_TAGVAR(module_expsym_cmds, $1)= _LT_TAGVAR(link_all_deplibs, $1)=unknown _LT_TAGVAR(old_archive_cmds, $1)=$old_archive_cmds _LT_TAGVAR(reload_flag, $1)=$reload_flag _LT_TAGVAR(reload_cmds, $1)=$reload_cmds _LT_TAGVAR(no_undefined_flag, $1)= _LT_TAGVAR(whole_archive_flag_spec, $1)= _LT_TAGVAR(enable_shared_with_static_runtimes, $1)=no # Source file extension for fc test sources. ac_ext=${ac_fc_srcext-f} # Object file extension for compiled fc test sources. objext=o _LT_TAGVAR(objext, $1)=$objext # No sense in running all these tests if we already determined that # the FC compiler isn't working. Some variables (like enable_shared) # are currently assumed to apply to all compilers on this platform, # and will be corrupted by setting them based on a non-working compiler. if test "$_lt_disable_FC" != yes; then # Code to be used in simple compile tests lt_simple_compile_test_code="\ subroutine t return end " # Code to be used in simple link tests lt_simple_link_test_code="\ program t end " # ltmain only uses $CC for tagged configurations so make sure $CC is set. _LT_TAG_COMPILER # save warnings/boilerplate of simple test code _LT_COMPILER_BOILERPLATE _LT_LINKER_BOILERPLATE # Allow CC to be a program name with arguments. lt_save_CC="$CC" lt_save_GCC=$GCC lt_save_CFLAGS=$CFLAGS CC=${FC-"f95"} CFLAGS=$FCFLAGS compiler=$CC GCC=$ac_cv_fc_compiler_gnu _LT_TAGVAR(compiler, $1)=$CC _LT_CC_BASENAME([$compiler]) if test -n "$compiler"; then AC_MSG_CHECKING([if libtool supports shared libraries]) AC_MSG_RESULT([$can_build_shared]) AC_MSG_CHECKING([whether to build shared libraries]) test "$can_build_shared" = "no" && enable_shared=no # On AIX, shared libraries and static libraries use the same namespace, and # are all built from PIC. case $host_os in aix3*) test "$enable_shared" = yes && enable_static=no if test -n "$RANLIB"; then archive_cmds="$archive_cmds~\$RANLIB \$lib" postinstall_cmds='$RANLIB $lib' fi ;; aix[[4-9]]*) if test "$host_cpu" != ia64 && test "$aix_use_runtimelinking" = no ; then test "$enable_shared" = yes && enable_static=no fi ;; esac AC_MSG_RESULT([$enable_shared]) AC_MSG_CHECKING([whether to build static libraries]) # Make sure either enable_shared or enable_static is yes. test "$enable_shared" = yes || enable_static=yes AC_MSG_RESULT([$enable_static]) _LT_TAGVAR(GCC, $1)="$ac_cv_fc_compiler_gnu" _LT_TAGVAR(LD, $1)="$LD" ## CAVEAT EMPTOR: ## There is no encapsulation within the following macros, do not change ## the running order or otherwise move them around unless you know exactly ## what you are doing... _LT_SYS_HIDDEN_LIBDEPS($1) _LT_COMPILER_PIC($1) _LT_COMPILER_C_O($1) _LT_COMPILER_FILE_LOCKS($1) _LT_LINKER_SHLIBS($1) _LT_SYS_DYNAMIC_LINKER($1) _LT_LINKER_HARDCODE_LIBPATH($1) _LT_CONFIG($1) fi # test -n "$compiler" GCC=$lt_save_GCC CC=$lt_save_CC CFLAGS=$lt_save_CFLAGS fi # test "$_lt_disable_FC" != yes AC_LANG_POP ])# _LT_LANG_FC_CONFIG # _LT_LANG_GCJ_CONFIG([TAG]) # -------------------------- # Ensure that the configuration variables for the GNU Java Compiler compiler # are suitably defined. These variables are subsequently used by _LT_CONFIG # to write the compiler configuration to `libtool'. m4_defun([_LT_LANG_GCJ_CONFIG], [AC_REQUIRE([LT_PROG_GCJ])dnl AC_LANG_SAVE # Source file extension for Java test sources. ac_ext=java # Object file extension for compiled Java test sources. objext=o _LT_TAGVAR(objext, $1)=$objext # Code to be used in simple compile tests lt_simple_compile_test_code="class foo {}" # Code to be used in simple link tests lt_simple_link_test_code='public class conftest { public static void main(String[[]] argv) {}; }' # ltmain only uses $CC for tagged configurations so make sure $CC is set. _LT_TAG_COMPILER # save warnings/boilerplate of simple test code _LT_COMPILER_BOILERPLATE _LT_LINKER_BOILERPLATE # Allow CC to be a program name with arguments. lt_save_CC=$CC lt_save_CFLAGS=$CFLAGS lt_save_GCC=$GCC GCC=yes CC=${GCJ-"gcj"} CFLAGS=$GCJFLAGS compiler=$CC _LT_TAGVAR(compiler, $1)=$CC _LT_TAGVAR(LD, $1)="$LD" _LT_CC_BASENAME([$compiler]) # GCJ did not exist at the time GCC didn't implicitly link libc in. _LT_TAGVAR(archive_cmds_need_lc, $1)=no _LT_TAGVAR(old_archive_cmds, $1)=$old_archive_cmds _LT_TAGVAR(reload_flag, $1)=$reload_flag _LT_TAGVAR(reload_cmds, $1)=$reload_cmds ## CAVEAT EMPTOR: ## There is no encapsulation within the following macros, do not change ## the running order or otherwise move them around unless you know exactly ## what you are doing... if test -n "$compiler"; then _LT_COMPILER_NO_RTTI($1) _LT_COMPILER_PIC($1) _LT_COMPILER_C_O($1) _LT_COMPILER_FILE_LOCKS($1) _LT_LINKER_SHLIBS($1) _LT_LINKER_HARDCODE_LIBPATH($1) _LT_CONFIG($1) fi AC_LANG_RESTORE GCC=$lt_save_GCC CC=$lt_save_CC CFLAGS=$lt_save_CFLAGS ])# _LT_LANG_GCJ_CONFIG # _LT_LANG_GO_CONFIG([TAG]) # -------------------------- # Ensure that the configuration variables for the GNU Go compiler # are suitably defined. These variables are subsequently used by _LT_CONFIG # to write the compiler configuration to `libtool'. m4_defun([_LT_LANG_GO_CONFIG], [AC_REQUIRE([LT_PROG_GO])dnl AC_LANG_SAVE # Source file extension for Go test sources. ac_ext=go # Object file extension for compiled Go test sources. objext=o _LT_TAGVAR(objext, $1)=$objext # Code to be used in simple compile tests lt_simple_compile_test_code="package main; func main() { }" # Code to be used in simple link tests lt_simple_link_test_code='package main; func main() { }' # ltmain only uses $CC for tagged configurations so make sure $CC is set. _LT_TAG_COMPILER # save warnings/boilerplate of simple test code _LT_COMPILER_BOILERPLATE _LT_LINKER_BOILERPLATE # Allow CC to be a program name with arguments. lt_save_CC=$CC lt_save_CFLAGS=$CFLAGS lt_save_GCC=$GCC GCC=yes CC=${GOC-"gccgo"} CFLAGS=$GOFLAGS compiler=$CC _LT_TAGVAR(compiler, $1)=$CC _LT_TAGVAR(LD, $1)="$LD" _LT_CC_BASENAME([$compiler]) # Go did not exist at the time GCC didn't implicitly link libc in. _LT_TAGVAR(archive_cmds_need_lc, $1)=no _LT_TAGVAR(old_archive_cmds, $1)=$old_archive_cmds _LT_TAGVAR(reload_flag, $1)=$reload_flag _LT_TAGVAR(reload_cmds, $1)=$reload_cmds ## CAVEAT EMPTOR: ## There is no encapsulation within the following macros, do not change ## the running order or otherwise move them around unless you know exactly ## what you are doing... if test -n "$compiler"; then _LT_COMPILER_NO_RTTI($1) _LT_COMPILER_PIC($1) _LT_COMPILER_C_O($1) _LT_COMPILER_FILE_LOCKS($1) _LT_LINKER_SHLIBS($1) _LT_LINKER_HARDCODE_LIBPATH($1) _LT_CONFIG($1) fi AC_LANG_RESTORE GCC=$lt_save_GCC CC=$lt_save_CC CFLAGS=$lt_save_CFLAGS ])# _LT_LANG_GO_CONFIG # _LT_LANG_RC_CONFIG([TAG]) # ------------------------- # Ensure that the configuration variables for the Windows resource compiler # are suitably defined. These variables are subsequently used by _LT_CONFIG # to write the compiler configuration to `libtool'. m4_defun([_LT_LANG_RC_CONFIG], [AC_REQUIRE([LT_PROG_RC])dnl AC_LANG_SAVE # Source file extension for RC test sources. ac_ext=rc # Object file extension for compiled RC test sources. objext=o _LT_TAGVAR(objext, $1)=$objext # Code to be used in simple compile tests lt_simple_compile_test_code='sample MENU { MENUITEM "&Soup", 100, CHECKED }' # Code to be used in simple link tests lt_simple_link_test_code="$lt_simple_compile_test_code" # ltmain only uses $CC for tagged configurations so make sure $CC is set. _LT_TAG_COMPILER # save warnings/boilerplate of simple test code _LT_COMPILER_BOILERPLATE _LT_LINKER_BOILERPLATE # Allow CC to be a program name with arguments. lt_save_CC="$CC" lt_save_CFLAGS=$CFLAGS lt_save_GCC=$GCC GCC= CC=${RC-"windres"} CFLAGS= compiler=$CC _LT_TAGVAR(compiler, $1)=$CC _LT_CC_BASENAME([$compiler]) _LT_TAGVAR(lt_cv_prog_compiler_c_o, $1)=yes if test -n "$compiler"; then : _LT_CONFIG($1) fi GCC=$lt_save_GCC AC_LANG_RESTORE CC=$lt_save_CC CFLAGS=$lt_save_CFLAGS ])# _LT_LANG_RC_CONFIG # LT_PROG_GCJ # ----------- AC_DEFUN([LT_PROG_GCJ], [m4_ifdef([AC_PROG_GCJ], [AC_PROG_GCJ], [m4_ifdef([A][M_PROG_GCJ], [A][M_PROG_GCJ], [AC_CHECK_TOOL(GCJ, gcj,) test "x${GCJFLAGS+set}" = xset || GCJFLAGS="-g -O2" AC_SUBST(GCJFLAGS)])])[]dnl ]) # Old name: AU_ALIAS([LT_AC_PROG_GCJ], [LT_PROG_GCJ]) dnl aclocal-1.4 backwards compatibility: dnl AC_DEFUN([LT_AC_PROG_GCJ], []) # LT_PROG_GO # ---------- AC_DEFUN([LT_PROG_GO], [AC_CHECK_TOOL(GOC, gccgo,) ]) # LT_PROG_RC # ---------- AC_DEFUN([LT_PROG_RC], [AC_CHECK_TOOL(RC, windres,) ]) # Old name: AU_ALIAS([LT_AC_PROG_RC], [LT_PROG_RC]) dnl aclocal-1.4 backwards compatibility: dnl AC_DEFUN([LT_AC_PROG_RC], []) # _LT_DECL_EGREP # -------------- # If we don't have a new enough Autoconf to choose the best grep # available, choose the one first in the user's PATH. m4_defun([_LT_DECL_EGREP], [AC_REQUIRE([AC_PROG_EGREP])dnl AC_REQUIRE([AC_PROG_FGREP])dnl test -z "$GREP" && GREP=grep _LT_DECL([], [GREP], [1], [A grep program that handles long lines]) _LT_DECL([], [EGREP], [1], [An ERE matcher]) _LT_DECL([], [FGREP], [1], [A literal string matcher]) dnl Non-bleeding-edge autoconf doesn't subst GREP, so do it here too AC_SUBST([GREP]) ]) # _LT_DECL_OBJDUMP # -------------- # If we don't have a new enough Autoconf to choose the best objdump # available, choose the one first in the user's PATH. m4_defun([_LT_DECL_OBJDUMP], [AC_CHECK_TOOL(OBJDUMP, objdump, false) test -z "$OBJDUMP" && OBJDUMP=objdump _LT_DECL([], [OBJDUMP], [1], [An object symbol dumper]) AC_SUBST([OBJDUMP]) ]) # _LT_DECL_DLLTOOL # ---------------- # Ensure DLLTOOL variable is set. m4_defun([_LT_DECL_DLLTOOL], [AC_CHECK_TOOL(DLLTOOL, dlltool, false) test -z "$DLLTOOL" && DLLTOOL=dlltool _LT_DECL([], [DLLTOOL], [1], [DLL creation program]) AC_SUBST([DLLTOOL]) ]) # _LT_DECL_SED # ------------ # Check for a fully-functional sed program, that truncates # as few characters as possible. Prefer GNU sed if found. m4_defun([_LT_DECL_SED], [AC_PROG_SED test -z "$SED" && SED=sed Xsed="$SED -e 1s/^X//" _LT_DECL([], [SED], [1], [A sed program that does not truncate output]) _LT_DECL([], [Xsed], ["\$SED -e 1s/^X//"], [Sed that helps us avoid accidentally triggering echo(1) options like -n]) ])# _LT_DECL_SED m4_ifndef([AC_PROG_SED], [ ############################################################ # NOTE: This macro has been submitted for inclusion into # # GNU Autoconf as AC_PROG_SED. When it is available in # # a released version of Autoconf we should remove this # # macro and use it instead. # ############################################################ m4_defun([AC_PROG_SED], [AC_MSG_CHECKING([for a sed that does not truncate output]) AC_CACHE_VAL(lt_cv_path_SED, [# Loop through the user's path and test for sed and gsed. # Then use that list of sed's as ones to test for truncation. as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for lt_ac_prog in sed gsed; do for ac_exec_ext in '' $ac_executable_extensions; do if $as_executable_p "$as_dir/$lt_ac_prog$ac_exec_ext"; then lt_ac_sed_list="$lt_ac_sed_list $as_dir/$lt_ac_prog$ac_exec_ext" fi done done done IFS=$as_save_IFS lt_ac_max=0 lt_ac_count=0 # Add /usr/xpg4/bin/sed as it is typically found on Solaris # along with /bin/sed that truncates output. for lt_ac_sed in $lt_ac_sed_list /usr/xpg4/bin/sed; do test ! -f $lt_ac_sed && continue cat /dev/null > conftest.in lt_ac_count=0 echo $ECHO_N "0123456789$ECHO_C" >conftest.in # Check for GNU sed and select it if it is found. if "$lt_ac_sed" --version 2>&1 < /dev/null | grep 'GNU' > /dev/null; then lt_cv_path_SED=$lt_ac_sed break fi while true; do cat conftest.in conftest.in >conftest.tmp mv conftest.tmp conftest.in cp conftest.in conftest.nl echo >>conftest.nl $lt_ac_sed -e 's/a$//' < conftest.nl >conftest.out || break cmp -s conftest.out conftest.nl || break # 10000 chars as input seems more than enough test $lt_ac_count -gt 10 && break lt_ac_count=`expr $lt_ac_count + 1` if test $lt_ac_count -gt $lt_ac_max; then lt_ac_max=$lt_ac_count lt_cv_path_SED=$lt_ac_sed fi done done ]) SED=$lt_cv_path_SED AC_SUBST([SED]) AC_MSG_RESULT([$SED]) ])#AC_PROG_SED ])#m4_ifndef # Old name: AU_ALIAS([LT_AC_PROG_SED], [AC_PROG_SED]) dnl aclocal-1.4 backwards compatibility: dnl AC_DEFUN([LT_AC_PROG_SED], []) # _LT_CHECK_SHELL_FEATURES # ------------------------ # Find out whether the shell is Bourne or XSI compatible, # or has some other useful features. m4_defun([_LT_CHECK_SHELL_FEATURES], [AC_MSG_CHECKING([whether the shell understands some XSI constructs]) # Try some XSI features xsi_shell=no ( _lt_dummy="a/b/c" test "${_lt_dummy##*/},${_lt_dummy%/*},${_lt_dummy#??}"${_lt_dummy%"$_lt_dummy"}, \ = c,a/b,b/c, \ && eval 'test $(( 1 + 1 )) -eq 2 \ && test "${#_lt_dummy}" -eq 5' ) >/dev/null 2>&1 \ && xsi_shell=yes AC_MSG_RESULT([$xsi_shell]) _LT_CONFIG_LIBTOOL_INIT([xsi_shell='$xsi_shell']) AC_MSG_CHECKING([whether the shell understands "+="]) lt_shell_append=no ( foo=bar; set foo baz; eval "$[1]+=\$[2]" && test "$foo" = barbaz ) \ >/dev/null 2>&1 \ && lt_shell_append=yes AC_MSG_RESULT([$lt_shell_append]) _LT_CONFIG_LIBTOOL_INIT([lt_shell_append='$lt_shell_append']) if ( (MAIL=60; unset MAIL) || exit) >/dev/null 2>&1; then lt_unset=unset else lt_unset=false fi _LT_DECL([], [lt_unset], [0], [whether the shell understands "unset"])dnl # test EBCDIC or ASCII case `echo X|tr X '\101'` in A) # ASCII based system # \n is not interpreted correctly by Solaris 8 /usr/ucb/tr lt_SP2NL='tr \040 \012' lt_NL2SP='tr \015\012 \040\040' ;; *) # EBCDIC based system lt_SP2NL='tr \100 \n' lt_NL2SP='tr \r\n \100\100' ;; esac _LT_DECL([SP2NL], [lt_SP2NL], [1], [turn spaces into newlines])dnl _LT_DECL([NL2SP], [lt_NL2SP], [1], [turn newlines into spaces])dnl ])# _LT_CHECK_SHELL_FEATURES # _LT_PROG_FUNCTION_REPLACE (FUNCNAME, REPLACEMENT-BODY) # ------------------------------------------------------ # In `$cfgfile', look for function FUNCNAME delimited by `^FUNCNAME ()$' and # '^} FUNCNAME ', and replace its body with REPLACEMENT-BODY. m4_defun([_LT_PROG_FUNCTION_REPLACE], [dnl { sed -e '/^$1 ()$/,/^} # $1 /c\ $1 ()\ {\ m4_bpatsubsts([$2], [$], [\\], [^\([ ]\)], [\\\1]) } # Extended-shell $1 implementation' "$cfgfile" > $cfgfile.tmp \ && mv -f "$cfgfile.tmp" "$cfgfile" \ || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp") test 0 -eq $? || _lt_function_replace_fail=: ]) # _LT_PROG_REPLACE_SHELLFNS # ------------------------- # Replace existing portable implementations of several shell functions with # equivalent extended shell implementations where those features are available.. m4_defun([_LT_PROG_REPLACE_SHELLFNS], [if test x"$xsi_shell" = xyes; then _LT_PROG_FUNCTION_REPLACE([func_dirname], [dnl case ${1} in */*) func_dirname_result="${1%/*}${2}" ;; * ) func_dirname_result="${3}" ;; esac]) _LT_PROG_FUNCTION_REPLACE([func_basename], [dnl func_basename_result="${1##*/}"]) _LT_PROG_FUNCTION_REPLACE([func_dirname_and_basename], [dnl case ${1} in */*) func_dirname_result="${1%/*}${2}" ;; * ) func_dirname_result="${3}" ;; esac func_basename_result="${1##*/}"]) _LT_PROG_FUNCTION_REPLACE([func_stripname], [dnl # pdksh 5.2.14 does not do ${X%$Y} correctly if both X and Y are # positional parameters, so assign one to ordinary parameter first. func_stripname_result=${3} func_stripname_result=${func_stripname_result#"${1}"} func_stripname_result=${func_stripname_result%"${2}"}]) _LT_PROG_FUNCTION_REPLACE([func_split_long_opt], [dnl func_split_long_opt_name=${1%%=*} func_split_long_opt_arg=${1#*=}]) _LT_PROG_FUNCTION_REPLACE([func_split_short_opt], [dnl func_split_short_opt_arg=${1#??} func_split_short_opt_name=${1%"$func_split_short_opt_arg"}]) _LT_PROG_FUNCTION_REPLACE([func_lo2o], [dnl case ${1} in *.lo) func_lo2o_result=${1%.lo}.${objext} ;; *) func_lo2o_result=${1} ;; esac]) _LT_PROG_FUNCTION_REPLACE([func_xform], [ func_xform_result=${1%.*}.lo]) _LT_PROG_FUNCTION_REPLACE([func_arith], [ func_arith_result=$(( $[*] ))]) _LT_PROG_FUNCTION_REPLACE([func_len], [ func_len_result=${#1}]) fi if test x"$lt_shell_append" = xyes; then _LT_PROG_FUNCTION_REPLACE([func_append], [ eval "${1}+=\\${2}"]) _LT_PROG_FUNCTION_REPLACE([func_append_quoted], [dnl func_quote_for_eval "${2}" dnl m4 expansion turns \\\\ into \\, and then the shell eval turns that into \ eval "${1}+=\\\\ \\$func_quote_for_eval_result"]) # Save a `func_append' function call where possible by direct use of '+=' sed -e 's%func_append \([[a-zA-Z_]]\{1,\}\) "%\1+="%g' $cfgfile > $cfgfile.tmp \ && mv -f "$cfgfile.tmp" "$cfgfile" \ || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp") test 0 -eq $? || _lt_function_replace_fail=: else # Save a `func_append' function call even when '+=' is not available sed -e 's%func_append \([[a-zA-Z_]]\{1,\}\) "%\1="$\1%g' $cfgfile > $cfgfile.tmp \ && mv -f "$cfgfile.tmp" "$cfgfile" \ || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp") test 0 -eq $? || _lt_function_replace_fail=: fi if test x"$_lt_function_replace_fail" = x":"; then AC_MSG_WARN([Unable to substitute extended shell functions in $ofile]) fi ]) # _LT_PATH_CONVERSION_FUNCTIONS # ----------------------------- # Determine which file name conversion functions should be used by # func_to_host_file (and, implicitly, by func_to_host_path). These are needed # for certain cross-compile configurations and native mingw. m4_defun([_LT_PATH_CONVERSION_FUNCTIONS], [AC_REQUIRE([AC_CANONICAL_HOST])dnl AC_REQUIRE([AC_CANONICAL_BUILD])dnl AC_MSG_CHECKING([how to convert $build file names to $host format]) AC_CACHE_VAL(lt_cv_to_host_file_cmd, [case $host in *-*-mingw* ) case $build in *-*-mingw* ) # actually msys lt_cv_to_host_file_cmd=func_convert_file_msys_to_w32 ;; *-*-cygwin* ) lt_cv_to_host_file_cmd=func_convert_file_cygwin_to_w32 ;; * ) # otherwise, assume *nix lt_cv_to_host_file_cmd=func_convert_file_nix_to_w32 ;; esac ;; *-*-cygwin* ) case $build in *-*-mingw* ) # actually msys lt_cv_to_host_file_cmd=func_convert_file_msys_to_cygwin ;; *-*-cygwin* ) lt_cv_to_host_file_cmd=func_convert_file_noop ;; * ) # otherwise, assume *nix lt_cv_to_host_file_cmd=func_convert_file_nix_to_cygwin ;; esac ;; * ) # unhandled hosts (and "normal" native builds) lt_cv_to_host_file_cmd=func_convert_file_noop ;; esac ]) to_host_file_cmd=$lt_cv_to_host_file_cmd AC_MSG_RESULT([$lt_cv_to_host_file_cmd]) _LT_DECL([to_host_file_cmd], [lt_cv_to_host_file_cmd], [0], [convert $build file names to $host format])dnl AC_MSG_CHECKING([how to convert $build file names to toolchain format]) AC_CACHE_VAL(lt_cv_to_tool_file_cmd, [#assume ordinary cross tools, or native build. lt_cv_to_tool_file_cmd=func_convert_file_noop case $host in *-*-mingw* ) case $build in *-*-mingw* ) # actually msys lt_cv_to_tool_file_cmd=func_convert_file_msys_to_w32 ;; esac ;; esac ]) to_tool_file_cmd=$lt_cv_to_tool_file_cmd AC_MSG_RESULT([$lt_cv_to_tool_file_cmd]) _LT_DECL([to_tool_file_cmd], [lt_cv_to_tool_file_cmd], [0], [convert $build files to toolchain format])dnl ])# _LT_PATH_CONVERSION_FUNCTIONS yaz-4.2.30/m4/ltversion.m40000644000175000017500000000126211653051561012137 00000000000000# ltversion.m4 -- version numbers -*- Autoconf -*- # # Copyright (C) 2004 Free Software Foundation, Inc. # Written by Scott James Remnant, 2004 # # This file is free software; the Free Software Foundation gives # unlimited permission to copy and/or distribute it, with or without # modifications, as long as this notice is preserved. # @configure_input@ # serial 3337 ltversion.m4 # This file is part of GNU Libtool m4_define([LT_PACKAGE_VERSION], [2.4.2]) m4_define([LT_PACKAGE_REVISION], [1.3337]) AC_DEFUN([LTVERSION_VERSION], [macro_version='2.4.2' macro_revision='1.3337' _LT_DECL(, macro_version, 0, [Which release of libtool.m4 was used?]) _LT_DECL(, macro_revision, 0) ]) yaz-4.2.30/m4/yaz_libxml2.m40000644000175000017500000001072611654451762012363 00000000000000AC_DEFUN([YAZ_LIBXML2],[ AC_PATH_PROG(pkgconfigpath, pkg-config, NONE) pkgmodule="" xml2dir=default XML2_VER="" AC_ARG_WITH(xml2,[[ --with-xml2[=PREFIX] use libxml2 in PREFIX]],xml2dir=$withval) dnl -- if no PREFIX or not specified we just search in default locations dnl -- try pkg-config. If not found, use xml2-config if test "$xml2dir" = "yes" -o "$xml2dir" = "default"; then if test "$pkgconfigpath" != "NONE"; then if $pkgconfigpath --exists libxml-2.0; then pkgmodule="libxml-2.0" fi fi if test -z "$pkgmodule"; then for d in /usr /usr/local; do if test -x $d/bin/xml2-config; then xml2dir=$d fi done fi fi dnl --- do the real check (pkg-config, xml2-config, not-found) if test "$xml2dir" != "no"; then AC_MSG_CHECKING(for libXML2) if test "$pkgmodule"; then XML2_LIBS=`$pkgconfigpath --libs $pkgmodule` XML2_CFLAGS=`$pkgconfigpath --cflags $pkgmodule` XML2_VER=`$pkgconfigpath --modversion $pkgmodule` AC_MSG_RESULT($XML2_VER) m4_default([$1],[AC_DEFINE(HAVE_XML2)]) elif test -x $xml2dir/bin/xml2-config; then XML2_LIBS=`$xml2dir/bin/xml2-config --libs` XML2_CFLAGS=`$xml2dir/bin/xml2-config --cflags` XML2_VER=`$xml2dir/bin/xml2-config --version` AC_MSG_RESULT($XML2_VER) m4_default([$1],[AC_DEFINE(HAVE_XML2)]) else AC_MSG_RESULT(Not found) if test "$xml2dir" = "default"; then AC_MSG_WARN([libxml2 development libraries not found.]) AC_MSG_WARN([There will be no support for SRU.]) else AC_MSG_ERROR([libxml2 development libraries not found.]) fi fi fi ]) AC_DEFUN([YAZ_LIBXSLT],[ pkgmodule="" xsltdir=default yaz_xslt_pkgconfig=no XSLT_VER="" AC_ARG_WITH(xslt,[[ --with-xslt[=PREFIX] use libXSLT in PREFIX]],xsltdir=$withval) dnl -- if no PREFIX or not specified we just search in default locations dnl -- try pkg-config. If not found, use xslt-config if test "$xsltdir" = "yes" -o "$xsltdir" = "default"; then if test "$pkgconfigpath" != "NONE"; then # pkg-config on woody reports bad CFLAGS which does # not include libxml2 CFLAGS, so avoid it.. if $pkgconfigpath --atleast-version 1.1.0 libxslt; then pkgmodule="libxslt" fi fi if test -z "$pkgmodule"; then for d in /usr /usr/local; do if test -x $d/bin/xslt-config; then xsltdir=$d fi done fi fi dnl --- do the real check (pkg-config, xslt-config, not-found) if test "$xsltdir" != "no"; then AC_MSG_CHECKING(for libXSLT) if test "$pkgmodule"; then XML2_LIBS=`$pkgconfigpath --libs $pkgmodule` XML2_CFLAGS=`$pkgconfigpath --cflags $pkgmodule` XSLT_VER=`$pkgconfigpath --modversion $pkgmodule` AC_MSG_RESULT($XSLT_VER) m4_default([$1],[AC_DEFINE(HAVE_XSLT)]) yaz_xslt_pkgconfig=yes elif test -x $xsltdir/bin/xslt-config; then XML2_LIBS=`$xsltdir/bin/xslt-config --libs` XML2_CFLAGS=`$xsltdir/bin/xslt-config --cflags` XSLT_VER=`$xsltdir/bin/xslt-config --version` AC_MSG_RESULT($XSLT_VER) m4_default([$1],[AC_DEFINE(HAVE_XSLT)]) else AC_MSG_RESULT(Not found) if test "$xsltdir" = "default"; then AC_MSG_WARN([libXSLT development libraries not found.]) else AC_MSG_ERROR([libXSLT development libraries not found.]) fi fi fi ]) dnl -- get libEXSLT. xslt-config is no good. So use pkg-config only AC_DEFUN([YAZ_LIBEXSLT],[ exsltdir=default pkgmodule="" EXSLT_VER="" AC_ARG_WITH(exslt,[[ --with-exslt[=PREFIX] use libEXSLT in PREFIX]],exsltdir=$withval) if test "$exsltdir" = "yes" -o "$exsltdir" = "default"; then if test "$pkgconfigpath" != "NONE"; then if $pkgconfigpath --exists libexslt; then pkgmodule="libexslt" fi fi fi if test "$exsltdir" != "no"; then AC_MSG_CHECKING(for libEXSLT) if test "$pkgmodule"; then if test "$yaz_xslt_pkgconfig" != "yes"; then AC_MSG_RESULT([Disabled. Libxslt is not pkg-config configured]) else XML2_LIBS=`$pkgconfigpath --libs $pkgmodule` XML2_CFLAGS=`$pkgconfigpath --cflags $pkgmodule` EXSLT_VER=`$pkgconfigpath --modversion $pkgmodule` AC_MSG_RESULT($EXSLT_VER) m4_default([$1],[AC_DEFINE(HAVE_EXSLT)]) fi else AC_MSG_RESULT(Not found) if test "$pkgconfigpath" = "NONE"; then extra="libEXSLT not enabled. pkg-config not found." else extra="libEXSLT development libraries not found." fi if test "$exsltdir" = "default"; then AC_MSG_WARN([$extra]) else AC_MSG_ERROR([$extra]) fi fi fi OLIBS=$LIBS LIBS="$LIBS $XML2_LIBS" AC_CHECK_FUNCS([xsltSaveResultToString]) LIBS=$OLIBS ]) dnl Local Variables: dnl mode:shell-script dnl sh-indentation: 2 dnl sh-basic-offset: 4 dnl End: yaz-4.2.30/m4/ltoptions.m40000644000175000017500000003007311653051561012147 00000000000000# Helper functions for option handling. -*- Autoconf -*- # # Copyright (C) 2004, 2005, 2007, 2008, 2009 Free Software Foundation, # Inc. # Written by Gary V. Vaughan, 2004 # # This file is free software; the Free Software Foundation gives # unlimited permission to copy and/or distribute it, with or without # modifications, as long as this notice is preserved. # serial 7 ltoptions.m4 # This is to help aclocal find these macros, as it can't see m4_define. AC_DEFUN([LTOPTIONS_VERSION], [m4_if([1])]) # _LT_MANGLE_OPTION(MACRO-NAME, OPTION-NAME) # ------------------------------------------ m4_define([_LT_MANGLE_OPTION], [[_LT_OPTION_]m4_bpatsubst($1__$2, [[^a-zA-Z0-9_]], [_])]) # _LT_SET_OPTION(MACRO-NAME, OPTION-NAME) # --------------------------------------- # Set option OPTION-NAME for macro MACRO-NAME, and if there is a # matching handler defined, dispatch to it. Other OPTION-NAMEs are # saved as a flag. m4_define([_LT_SET_OPTION], [m4_define(_LT_MANGLE_OPTION([$1], [$2]))dnl m4_ifdef(_LT_MANGLE_DEFUN([$1], [$2]), _LT_MANGLE_DEFUN([$1], [$2]), [m4_warning([Unknown $1 option `$2'])])[]dnl ]) # _LT_IF_OPTION(MACRO-NAME, OPTION-NAME, IF-SET, [IF-NOT-SET]) # ------------------------------------------------------------ # Execute IF-SET if OPTION is set, IF-NOT-SET otherwise. m4_define([_LT_IF_OPTION], [m4_ifdef(_LT_MANGLE_OPTION([$1], [$2]), [$3], [$4])]) # _LT_UNLESS_OPTIONS(MACRO-NAME, OPTION-LIST, IF-NOT-SET) # ------------------------------------------------------- # Execute IF-NOT-SET unless all options in OPTION-LIST for MACRO-NAME # are set. m4_define([_LT_UNLESS_OPTIONS], [m4_foreach([_LT_Option], m4_split(m4_normalize([$2])), [m4_ifdef(_LT_MANGLE_OPTION([$1], _LT_Option), [m4_define([$0_found])])])[]dnl m4_ifdef([$0_found], [m4_undefine([$0_found])], [$3 ])[]dnl ]) # _LT_SET_OPTIONS(MACRO-NAME, OPTION-LIST) # ---------------------------------------- # OPTION-LIST is a space-separated list of Libtool options associated # with MACRO-NAME. If any OPTION has a matching handler declared with # LT_OPTION_DEFINE, dispatch to that macro; otherwise complain about # the unknown option and exit. m4_defun([_LT_SET_OPTIONS], [# Set options m4_foreach([_LT_Option], m4_split(m4_normalize([$2])), [_LT_SET_OPTION([$1], _LT_Option)]) m4_if([$1],[LT_INIT],[ dnl dnl Simply set some default values (i.e off) if boolean options were not dnl specified: _LT_UNLESS_OPTIONS([LT_INIT], [dlopen], [enable_dlopen=no ]) _LT_UNLESS_OPTIONS([LT_INIT], [win32-dll], [enable_win32_dll=no ]) dnl dnl If no reference was made to various pairs of opposing options, then dnl we run the default mode handler for the pair. For example, if neither dnl `shared' nor `disable-shared' was passed, we enable building of shared dnl archives by default: _LT_UNLESS_OPTIONS([LT_INIT], [shared disable-shared], [_LT_ENABLE_SHARED]) _LT_UNLESS_OPTIONS([LT_INIT], [static disable-static], [_LT_ENABLE_STATIC]) _LT_UNLESS_OPTIONS([LT_INIT], [pic-only no-pic], [_LT_WITH_PIC]) _LT_UNLESS_OPTIONS([LT_INIT], [fast-install disable-fast-install], [_LT_ENABLE_FAST_INSTALL]) ]) ])# _LT_SET_OPTIONS ## --------------------------------- ## ## Macros to handle LT_INIT options. ## ## --------------------------------- ## # _LT_MANGLE_DEFUN(MACRO-NAME, OPTION-NAME) # ----------------------------------------- m4_define([_LT_MANGLE_DEFUN], [[_LT_OPTION_DEFUN_]m4_bpatsubst(m4_toupper([$1__$2]), [[^A-Z0-9_]], [_])]) # LT_OPTION_DEFINE(MACRO-NAME, OPTION-NAME, CODE) # ----------------------------------------------- m4_define([LT_OPTION_DEFINE], [m4_define(_LT_MANGLE_DEFUN([$1], [$2]), [$3])[]dnl ])# LT_OPTION_DEFINE # dlopen # ------ LT_OPTION_DEFINE([LT_INIT], [dlopen], [enable_dlopen=yes ]) AU_DEFUN([AC_LIBTOOL_DLOPEN], [_LT_SET_OPTION([LT_INIT], [dlopen]) AC_DIAGNOSE([obsolete], [$0: Remove this warning and the call to _LT_SET_OPTION when you put the `dlopen' option into LT_INIT's first parameter.]) ]) dnl aclocal-1.4 backwards compatibility: dnl AC_DEFUN([AC_LIBTOOL_DLOPEN], []) # win32-dll # --------- # Declare package support for building win32 dll's. LT_OPTION_DEFINE([LT_INIT], [win32-dll], [enable_win32_dll=yes case $host in *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-cegcc*) AC_CHECK_TOOL(AS, as, false) AC_CHECK_TOOL(DLLTOOL, dlltool, false) AC_CHECK_TOOL(OBJDUMP, objdump, false) ;; esac test -z "$AS" && AS=as _LT_DECL([], [AS], [1], [Assembler program])dnl test -z "$DLLTOOL" && DLLTOOL=dlltool _LT_DECL([], [DLLTOOL], [1], [DLL creation program])dnl test -z "$OBJDUMP" && OBJDUMP=objdump _LT_DECL([], [OBJDUMP], [1], [Object dumper program])dnl ])# win32-dll AU_DEFUN([AC_LIBTOOL_WIN32_DLL], [AC_REQUIRE([AC_CANONICAL_HOST])dnl _LT_SET_OPTION([LT_INIT], [win32-dll]) AC_DIAGNOSE([obsolete], [$0: Remove this warning and the call to _LT_SET_OPTION when you put the `win32-dll' option into LT_INIT's first parameter.]) ]) dnl aclocal-1.4 backwards compatibility: dnl AC_DEFUN([AC_LIBTOOL_WIN32_DLL], []) # _LT_ENABLE_SHARED([DEFAULT]) # ---------------------------- # implement the --enable-shared flag, and supports the `shared' and # `disable-shared' LT_INIT options. # DEFAULT is either `yes' or `no'. If omitted, it defaults to `yes'. m4_define([_LT_ENABLE_SHARED], [m4_define([_LT_ENABLE_SHARED_DEFAULT], [m4_if($1, no, no, yes)])dnl AC_ARG_ENABLE([shared], [AS_HELP_STRING([--enable-shared@<:@=PKGS@:>@], [build shared libraries @<:@default=]_LT_ENABLE_SHARED_DEFAULT[@:>@])], [p=${PACKAGE-default} case $enableval in yes) enable_shared=yes ;; no) enable_shared=no ;; *) enable_shared=no # Look at the argument we got. We use all the common list separators. lt_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR," for pkg in $enableval; do IFS="$lt_save_ifs" if test "X$pkg" = "X$p"; then enable_shared=yes fi done IFS="$lt_save_ifs" ;; esac], [enable_shared=]_LT_ENABLE_SHARED_DEFAULT) _LT_DECL([build_libtool_libs], [enable_shared], [0], [Whether or not to build shared libraries]) ])# _LT_ENABLE_SHARED LT_OPTION_DEFINE([LT_INIT], [shared], [_LT_ENABLE_SHARED([yes])]) LT_OPTION_DEFINE([LT_INIT], [disable-shared], [_LT_ENABLE_SHARED([no])]) # Old names: AC_DEFUN([AC_ENABLE_SHARED], [_LT_SET_OPTION([LT_INIT], m4_if([$1], [no], [disable-])[shared]) ]) AC_DEFUN([AC_DISABLE_SHARED], [_LT_SET_OPTION([LT_INIT], [disable-shared]) ]) AU_DEFUN([AM_ENABLE_SHARED], [AC_ENABLE_SHARED($@)]) AU_DEFUN([AM_DISABLE_SHARED], [AC_DISABLE_SHARED($@)]) dnl aclocal-1.4 backwards compatibility: dnl AC_DEFUN([AM_ENABLE_SHARED], []) dnl AC_DEFUN([AM_DISABLE_SHARED], []) # _LT_ENABLE_STATIC([DEFAULT]) # ---------------------------- # implement the --enable-static flag, and support the `static' and # `disable-static' LT_INIT options. # DEFAULT is either `yes' or `no'. If omitted, it defaults to `yes'. m4_define([_LT_ENABLE_STATIC], [m4_define([_LT_ENABLE_STATIC_DEFAULT], [m4_if($1, no, no, yes)])dnl AC_ARG_ENABLE([static], [AS_HELP_STRING([--enable-static@<:@=PKGS@:>@], [build static libraries @<:@default=]_LT_ENABLE_STATIC_DEFAULT[@:>@])], [p=${PACKAGE-default} case $enableval in yes) enable_static=yes ;; no) enable_static=no ;; *) enable_static=no # Look at the argument we got. We use all the common list separators. lt_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR," for pkg in $enableval; do IFS="$lt_save_ifs" if test "X$pkg" = "X$p"; then enable_static=yes fi done IFS="$lt_save_ifs" ;; esac], [enable_static=]_LT_ENABLE_STATIC_DEFAULT) _LT_DECL([build_old_libs], [enable_static], [0], [Whether or not to build static libraries]) ])# _LT_ENABLE_STATIC LT_OPTION_DEFINE([LT_INIT], [static], [_LT_ENABLE_STATIC([yes])]) LT_OPTION_DEFINE([LT_INIT], [disable-static], [_LT_ENABLE_STATIC([no])]) # Old names: AC_DEFUN([AC_ENABLE_STATIC], [_LT_SET_OPTION([LT_INIT], m4_if([$1], [no], [disable-])[static]) ]) AC_DEFUN([AC_DISABLE_STATIC], [_LT_SET_OPTION([LT_INIT], [disable-static]) ]) AU_DEFUN([AM_ENABLE_STATIC], [AC_ENABLE_STATIC($@)]) AU_DEFUN([AM_DISABLE_STATIC], [AC_DISABLE_STATIC($@)]) dnl aclocal-1.4 backwards compatibility: dnl AC_DEFUN([AM_ENABLE_STATIC], []) dnl AC_DEFUN([AM_DISABLE_STATIC], []) # _LT_ENABLE_FAST_INSTALL([DEFAULT]) # ---------------------------------- # implement the --enable-fast-install flag, and support the `fast-install' # and `disable-fast-install' LT_INIT options. # DEFAULT is either `yes' or `no'. If omitted, it defaults to `yes'. m4_define([_LT_ENABLE_FAST_INSTALL], [m4_define([_LT_ENABLE_FAST_INSTALL_DEFAULT], [m4_if($1, no, no, yes)])dnl AC_ARG_ENABLE([fast-install], [AS_HELP_STRING([--enable-fast-install@<:@=PKGS@:>@], [optimize for fast installation @<:@default=]_LT_ENABLE_FAST_INSTALL_DEFAULT[@:>@])], [p=${PACKAGE-default} case $enableval in yes) enable_fast_install=yes ;; no) enable_fast_install=no ;; *) enable_fast_install=no # Look at the argument we got. We use all the common list separators. lt_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR," for pkg in $enableval; do IFS="$lt_save_ifs" if test "X$pkg" = "X$p"; then enable_fast_install=yes fi done IFS="$lt_save_ifs" ;; esac], [enable_fast_install=]_LT_ENABLE_FAST_INSTALL_DEFAULT) _LT_DECL([fast_install], [enable_fast_install], [0], [Whether or not to optimize for fast installation])dnl ])# _LT_ENABLE_FAST_INSTALL LT_OPTION_DEFINE([LT_INIT], [fast-install], [_LT_ENABLE_FAST_INSTALL([yes])]) LT_OPTION_DEFINE([LT_INIT], [disable-fast-install], [_LT_ENABLE_FAST_INSTALL([no])]) # Old names: AU_DEFUN([AC_ENABLE_FAST_INSTALL], [_LT_SET_OPTION([LT_INIT], m4_if([$1], [no], [disable-])[fast-install]) AC_DIAGNOSE([obsolete], [$0: Remove this warning and the call to _LT_SET_OPTION when you put the `fast-install' option into LT_INIT's first parameter.]) ]) AU_DEFUN([AC_DISABLE_FAST_INSTALL], [_LT_SET_OPTION([LT_INIT], [disable-fast-install]) AC_DIAGNOSE([obsolete], [$0: Remove this warning and the call to _LT_SET_OPTION when you put the `disable-fast-install' option into LT_INIT's first parameter.]) ]) dnl aclocal-1.4 backwards compatibility: dnl AC_DEFUN([AC_ENABLE_FAST_INSTALL], []) dnl AC_DEFUN([AM_DISABLE_FAST_INSTALL], []) # _LT_WITH_PIC([MODE]) # -------------------- # implement the --with-pic flag, and support the `pic-only' and `no-pic' # LT_INIT options. # MODE is either `yes' or `no'. If omitted, it defaults to `both'. m4_define([_LT_WITH_PIC], [AC_ARG_WITH([pic], [AS_HELP_STRING([--with-pic@<:@=PKGS@:>@], [try to use only PIC/non-PIC objects @<:@default=use both@:>@])], [lt_p=${PACKAGE-default} case $withval in yes|no) pic_mode=$withval ;; *) pic_mode=default # Look at the argument we got. We use all the common list separators. lt_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR," for lt_pkg in $withval; do IFS="$lt_save_ifs" if test "X$lt_pkg" = "X$lt_p"; then pic_mode=yes fi done IFS="$lt_save_ifs" ;; esac], [pic_mode=default]) test -z "$pic_mode" && pic_mode=m4_default([$1], [default]) _LT_DECL([], [pic_mode], [0], [What type of objects to build])dnl ])# _LT_WITH_PIC LT_OPTION_DEFINE([LT_INIT], [pic-only], [_LT_WITH_PIC([yes])]) LT_OPTION_DEFINE([LT_INIT], [no-pic], [_LT_WITH_PIC([no])]) # Old name: AU_DEFUN([AC_LIBTOOL_PICMODE], [_LT_SET_OPTION([LT_INIT], [pic-only]) AC_DIAGNOSE([obsolete], [$0: Remove this warning and the call to _LT_SET_OPTION when you put the `pic-only' option into LT_INIT's first parameter.]) ]) dnl aclocal-1.4 backwards compatibility: dnl AC_DEFUN([AC_LIBTOOL_PICMODE], []) ## ----------------- ## ## LTDL_INIT Options ## ## ----------------- ## m4_define([_LTDL_MODE], []) LT_OPTION_DEFINE([LTDL_INIT], [nonrecursive], [m4_define([_LTDL_MODE], [nonrecursive])]) LT_OPTION_DEFINE([LTDL_INIT], [recursive], [m4_define([_LTDL_MODE], [recursive])]) LT_OPTION_DEFINE([LTDL_INIT], [subproject], [m4_define([_LTDL_MODE], [subproject])]) m4_define([_LTDL_TYPE], []) LT_OPTION_DEFINE([LTDL_INIT], [installable], [m4_define([_LTDL_TYPE], [installable])]) LT_OPTION_DEFINE([LTDL_INIT], [convenience], [m4_define([_LTDL_TYPE], [convenience])]) yaz-4.2.30/m4/acx_pthread.m40000644000175000017500000002536611654451762012417 00000000000000##### http://autoconf-archive.cryp.to/acx_pthread.html # # SYNOPSIS # # ACX_PTHREAD([ACTION-IF-FOUND[, ACTION-IF-NOT-FOUND]]) # # DESCRIPTION # # This macro figures out how to build C programs using POSIX threads. # It sets the PTHREAD_LIBS output variable to the threads library and # linker flags, and the PTHREAD_CFLAGS output variable to any special # C compiler flags that are needed. (The user can also force certain # compiler flags/libs to be tested by setting these environment # variables.) # # Also sets PTHREAD_CC to any special C compiler that is needed for # multi-threaded programs (defaults to the value of CC otherwise). # (This is necessary on AIX to use the special cc_r compiler alias.) # # NOTE: You are assumed to not only compile your program with these # flags, but also link it with them as well. e.g. you should link # with $PTHREAD_CC $CFLAGS $PTHREAD_CFLAGS $LDFLAGS ... $PTHREAD_LIBS # $LIBS # # If you are only building threads programs, you may wish to use # these variables in your default LIBS, CFLAGS, and CC: # # LIBS="$PTHREAD_LIBS $LIBS" # CFLAGS="$CFLAGS $PTHREAD_CFLAGS" # CC="$PTHREAD_CC" # # In addition, if the PTHREAD_CREATE_JOINABLE thread-attribute # constant has a nonstandard name, defines PTHREAD_CREATE_JOINABLE to # that name (e.g. PTHREAD_CREATE_UNDETACHED on AIX). # # ACTION-IF-FOUND is a list of shell commands to run if a threads # library is found, and ACTION-IF-NOT-FOUND is a list of commands to # run it if it is not found. If ACTION-IF-FOUND is not specified, the # default action will define HAVE_PTHREAD. # # Please let the authors know if this macro fails on any platform, or # if you have any other suggestions or comments. This macro was based # on work by SGJ on autoconf scripts for FFTW (http://www.fftw.org/) # (with help from M. Frigo), as well as ac_pthread and hb_pthread # macros posted by Alejandro Forero Cuervo to the autoconf macro # repository. We are also grateful for the helpful feedback of # numerous users. # # LAST MODIFICATION # # 2006-05-29 # # COPYLEFT # # Copyright (c) 2006 Steven G. Johnson # # This program is free software; you can redistribute it and/or # modify it under the terms of the GNU General Public License as # published by the Free Software Foundation; either version 2 of the # License, or (at your option) any later version. # # This program is distributed in the hope that it will be useful, but # WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU # General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program; if not, write to the Free Software # Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA # 02111-1307, USA. # # As a special exception, the respective Autoconf Macro's copyright # owner gives unlimited permission to copy, distribute and modify the # configure scripts that are the output of Autoconf when processing # the Macro. You need not follow the terms of the GNU General Public # License when using or distributing such scripts, even though # portions of the text of the Macro appear in them. The GNU General # Public License (GPL) does govern all other use of the material that # constitutes the Autoconf Macro. # # This special exception to the GPL applies to versions of the # Autoconf Macro released by the Autoconf Macro Archive. When you # make and distribute a modified version of the Autoconf Macro, you # may extend this special exception to the GPL to apply to your # modified version as well. AC_DEFUN([ACX_PTHREAD], [ AC_REQUIRE([AC_CANONICAL_HOST]) AC_LANG_SAVE AC_LANG_C acx_pthread_ok=no # We used to check for pthread.h first, but this fails if pthread.h # requires special compiler flags (e.g. on True64 or Sequent). # It gets checked for in the link test anyway. # First of all, check if the user has set any of the PTHREAD_LIBS, # etcetera environment variables, and if threads linking works using # them: if test x"$PTHREAD_LIBS$PTHREAD_CFLAGS" != x; then save_CFLAGS="$CFLAGS" CFLAGS="$CFLAGS $PTHREAD_CFLAGS" save_LIBS="$LIBS" LIBS="$PTHREAD_LIBS $LIBS" AC_MSG_CHECKING([for pthread_join in LIBS=$PTHREAD_LIBS with CFLAGS=$PTHREAD_CFLAGS]) AC_TRY_LINK_FUNC(pthread_join, acx_pthread_ok=yes) AC_MSG_RESULT($acx_pthread_ok) if test x"$acx_pthread_ok" = xno; then PTHREAD_LIBS="" PTHREAD_CFLAGS="" fi LIBS="$save_LIBS" CFLAGS="$save_CFLAGS" fi # We must check for the threads library under a number of different # names; the ordering is very important because some systems # (e.g. DEC) have both -lpthread and -lpthreads, where one of the # libraries is broken (non-POSIX). # Create a list of thread flags to try. Items starting with a "-" are # C compiler flags, and other items are library names, except for "none" # which indicates that we try without any flags at all, and "pthread-config" # which is a program returning the flags for the Pth emulation library. acx_pthread_flags="pthreads none -Kthread -kthread lthread -pthread -pthreads -mthreads pthread --thread-safe -mt pthread-config" # The ordering *is* (sometimes) important. Some notes on the # individual items follow: # pthreads: AIX (must check this before -lpthread) # none: in case threads are in libc; should be tried before -Kthread and # other compiler flags to prevent continual compiler warnings # -Kthread: Sequent (threads in libc, but -Kthread needed for pthread.h) # -kthread: FreeBSD kernel threads (preferred to -pthread since SMP-able) # lthread: LinuxThreads port on FreeBSD (also preferred to -pthread) # -pthread: Linux/gcc (kernel threads), BSD/gcc (userland threads) # -pthreads: Solaris/gcc # -mthreads: Mingw32/gcc, Lynx/gcc # -mt: Sun Workshop C (may only link SunOS threads [-lthread], but it # doesn't hurt to check since this sometimes defines pthreads too; # also defines -D_REENTRANT) # ... -mt is also the pthreads flag for HP/aCC # pthread: Linux, etcetera # --thread-safe: KAI C++ # pthread-config: use pthread-config program (for GNU Pth library) case "${host_cpu}-${host_os}" in *solaris*) # On Solaris (at least, for some versions), libc contains stubbed # (non-functional) versions of the pthreads routines, so link-based # tests will erroneously succeed. (We need to link with -pthreads/-mt/ # -lpthread.) (The stubs are missing pthread_cleanup_push, or rather # a function called by this macro, so we could check for that, but # who knows whether they'll stub that too in a future libc.) So, # we'll just look for -pthreads and -lpthread first: acx_pthread_flags="-pthreads pthread -mt -pthread $acx_pthread_flags" ;; esac if test x"$acx_pthread_ok" = xno; then for flag in $acx_pthread_flags; do case $flag in none) AC_MSG_CHECKING([whether pthreads work without any flags]) ;; -*) AC_MSG_CHECKING([whether pthreads work with $flag]) PTHREAD_CFLAGS="$flag" ;; pthread-config) AC_CHECK_PROG(acx_pthread_config, pthread-config, yes, no) if test x"$acx_pthread_config" = xno; then continue; fi PTHREAD_CFLAGS="`pthread-config --cflags`" PTHREAD_LIBS="`pthread-config --ldflags` `pthread-config --libs`" ;; *) AC_MSG_CHECKING([for the pthreads library -l$flag]) PTHREAD_LIBS="-l$flag" ;; esac save_LIBS="$LIBS" save_CFLAGS="$CFLAGS" LIBS="$PTHREAD_LIBS $LIBS" CFLAGS="$CFLAGS $PTHREAD_CFLAGS" # Check for various functions. We must include pthread.h, # since some functions may be macros. (On the Sequent, we # need a special flag -Kthread to make this header compile.) # We check for pthread_join because it is in -lpthread on IRIX # while pthread_create is in libc. We check for pthread_attr_init # due to DEC craziness with -lpthreads. We check for # pthread_cleanup_push because it is one of the few pthread # functions on Solaris that doesn't have a non-functional libc stub. # We try pthread_create on general principles. AC_TRY_LINK([#include ], [pthread_t th; pthread_join(th, 0); pthread_attr_init(0); pthread_cleanup_push(0, 0); pthread_create(0,0,0,0); pthread_cleanup_pop(0); ], [acx_pthread_ok=yes]) LIBS="$save_LIBS" CFLAGS="$save_CFLAGS" AC_MSG_RESULT($acx_pthread_ok) if test "x$acx_pthread_ok" = xyes; then break; fi PTHREAD_LIBS="" PTHREAD_CFLAGS="" done fi # Various other checks: if test "x$acx_pthread_ok" = xyes; then save_LIBS="$LIBS" LIBS="$PTHREAD_LIBS $LIBS" save_CFLAGS="$CFLAGS" CFLAGS="$CFLAGS $PTHREAD_CFLAGS" # Detect AIX lossage: JOINABLE attribute is called UNDETACHED. AC_MSG_CHECKING([for joinable pthread attribute]) attr_name=unknown for attr in PTHREAD_CREATE_JOINABLE PTHREAD_CREATE_UNDETACHED; do AC_TRY_LINK([#include ], [int attr=$attr; return attr;], [attr_name=$attr; break]) done AC_MSG_RESULT($attr_name) if test "$attr_name" != PTHREAD_CREATE_JOINABLE; then AC_DEFINE_UNQUOTED(PTHREAD_CREATE_JOINABLE, $attr_name, [Define to necessary symbol if this constant uses a non-standard name on your system.]) fi AC_MSG_CHECKING([if more special flags are required for pthreads]) flag=no case "${host_cpu}-${host_os}" in *-aix* | *-freebsd* | *-darwin*) flag="-D_THREAD_SAFE";; *solaris* | *-osf* | *-hpux*) flag="-D_REENTRANT";; esac AC_MSG_RESULT(${flag}) if test "x$flag" != xno; then PTHREAD_CFLAGS="$flag $PTHREAD_CFLAGS" fi LIBS="$save_LIBS" CFLAGS="$save_CFLAGS" # More AIX lossage: must compile with xlc_r or cc_r if test x"$GCC" != xyes; then AC_CHECK_PROGS(PTHREAD_CC, xlc_r cc_r, ${CC}) else PTHREAD_CC=$CC fi else PTHREAD_CC="$CC" fi AC_SUBST(PTHREAD_LIBS) AC_SUBST(PTHREAD_CFLAGS) AC_SUBST(PTHREAD_CC) # Finally, execute ACTION-IF-FOUND/ACTION-IF-NOT-FOUND: if test x"$acx_pthread_ok" = xyes; then ifelse([$1],,AC_DEFINE(HAVE_PTHREAD,1,[Define if you have POSIX threads libraries and header files.]),[$1]) : else acx_pthread_ok=no $2 fi AC_LANG_RESTORE ])dnl ACX_PTHREAD yaz-4.2.30/m4/ltsugar.m40000644000175000017500000001042411653051561011573 00000000000000# ltsugar.m4 -- libtool m4 base layer. -*-Autoconf-*- # # Copyright (C) 2004, 2005, 2007, 2008 Free Software Foundation, Inc. # Written by Gary V. Vaughan, 2004 # # This file is free software; the Free Software Foundation gives # unlimited permission to copy and/or distribute it, with or without # modifications, as long as this notice is preserved. # serial 6 ltsugar.m4 # This is to help aclocal find these macros, as it can't see m4_define. AC_DEFUN([LTSUGAR_VERSION], [m4_if([0.1])]) # lt_join(SEP, ARG1, [ARG2...]) # ----------------------------- # Produce ARG1SEPARG2...SEPARGn, omitting [] arguments and their # associated separator. # Needed until we can rely on m4_join from Autoconf 2.62, since all earlier # versions in m4sugar had bugs. m4_define([lt_join], [m4_if([$#], [1], [], [$#], [2], [[$2]], [m4_if([$2], [], [], [[$2]_])$0([$1], m4_shift(m4_shift($@)))])]) m4_define([_lt_join], [m4_if([$#$2], [2], [], [m4_if([$2], [], [], [[$1$2]])$0([$1], m4_shift(m4_shift($@)))])]) # lt_car(LIST) # lt_cdr(LIST) # ------------ # Manipulate m4 lists. # These macros are necessary as long as will still need to support # Autoconf-2.59 which quotes differently. m4_define([lt_car], [[$1]]) m4_define([lt_cdr], [m4_if([$#], 0, [m4_fatal([$0: cannot be called without arguments])], [$#], 1, [], [m4_dquote(m4_shift($@))])]) m4_define([lt_unquote], $1) # lt_append(MACRO-NAME, STRING, [SEPARATOR]) # ------------------------------------------ # Redefine MACRO-NAME to hold its former content plus `SEPARATOR'`STRING'. # Note that neither SEPARATOR nor STRING are expanded; they are appended # to MACRO-NAME as is (leaving the expansion for when MACRO-NAME is invoked). # No SEPARATOR is output if MACRO-NAME was previously undefined (different # than defined and empty). # # This macro is needed until we can rely on Autoconf 2.62, since earlier # versions of m4sugar mistakenly expanded SEPARATOR but not STRING. m4_define([lt_append], [m4_define([$1], m4_ifdef([$1], [m4_defn([$1])[$3]])[$2])]) # lt_combine(SEP, PREFIX-LIST, INFIX, SUFFIX1, [SUFFIX2...]) # ---------------------------------------------------------- # Produce a SEP delimited list of all paired combinations of elements of # PREFIX-LIST with SUFFIX1 through SUFFIXn. Each element of the list # has the form PREFIXmINFIXSUFFIXn. # Needed until we can rely on m4_combine added in Autoconf 2.62. m4_define([lt_combine], [m4_if(m4_eval([$# > 3]), [1], [m4_pushdef([_Lt_sep], [m4_define([_Lt_sep], m4_defn([lt_car]))])]]dnl [[m4_foreach([_Lt_prefix], [$2], [m4_foreach([_Lt_suffix], ]m4_dquote(m4_dquote(m4_shift(m4_shift(m4_shift($@)))))[, [_Lt_sep([$1])[]m4_defn([_Lt_prefix])[$3]m4_defn([_Lt_suffix])])])])]) # lt_if_append_uniq(MACRO-NAME, VARNAME, [SEPARATOR], [UNIQ], [NOT-UNIQ]) # ----------------------------------------------------------------------- # Iff MACRO-NAME does not yet contain VARNAME, then append it (delimited # by SEPARATOR if supplied) and expand UNIQ, else NOT-UNIQ. m4_define([lt_if_append_uniq], [m4_ifdef([$1], [m4_if(m4_index([$3]m4_defn([$1])[$3], [$3$2$3]), [-1], [lt_append([$1], [$2], [$3])$4], [$5])], [lt_append([$1], [$2], [$3])$4])]) # lt_dict_add(DICT, KEY, VALUE) # ----------------------------- m4_define([lt_dict_add], [m4_define([$1($2)], [$3])]) # lt_dict_add_subkey(DICT, KEY, SUBKEY, VALUE) # -------------------------------------------- m4_define([lt_dict_add_subkey], [m4_define([$1($2:$3)], [$4])]) # lt_dict_fetch(DICT, KEY, [SUBKEY]) # ---------------------------------- m4_define([lt_dict_fetch], [m4_ifval([$3], m4_ifdef([$1($2:$3)], [m4_defn([$1($2:$3)])]), m4_ifdef([$1($2)], [m4_defn([$1($2)])]))]) # lt_if_dict_fetch(DICT, KEY, [SUBKEY], VALUE, IF-TRUE, [IF-FALSE]) # ----------------------------------------------------------------- m4_define([lt_if_dict_fetch], [m4_if(lt_dict_fetch([$1], [$2], [$3]), [$4], [$5], [$6])]) # lt_dict_filter(DICT, [SUBKEY], VALUE, [SEPARATOR], KEY, [...]) # -------------------------------------------------------------- m4_define([lt_dict_filter], [m4_if([$5], [], [], [lt_join(m4_quote(m4_default([$4], [[, ]])), lt_unquote(m4_split(m4_normalize(m4_foreach(_Lt_key, lt_car([m4_shiftn(4, $@)]), [lt_if_dict_fetch([$1], _Lt_key, [$2], [$3], [_Lt_key ])])))))])[]dnl ]) yaz-4.2.30/util/0000755000175000017500000000000011741237740010367 500000000000000yaz-4.2.30/util/srwtst.c0000644000175000017500000000630011733047144012016 00000000000000/* This file is part of the YAZ toolkit. * Copyright (C) 1995-2012 Index Data * See the file LICENSE for details. */ #if HAVE_CONFIG_H #include #endif #include #include #if YAZ_HAVE_XML2 Z_SOAP_Handler h[2] = { {"http://www.loc.gov/zing/srw/v1.0/", 0, (Z_SOAP_fun) yaz_srw_codec}, {0, 0, 0} }; int main(int argc, char **argv) { char buf[163840]; char *content_buf = buf; int content_len; size_t no; Z_SOAP *soap_package = 0; ODR decode, encode; int debug = 0; if (argc == 2 && !strcmp(argv[1], "debug")) debug = 1; no = fread(buf, 1, sizeof(buf), stdin); if (no < 1 || no == sizeof(buf)) { fprintf(stderr, "Bad file or too big\n"); exit (1); } decode = odr_createmem(ODR_DECODE); encode = odr_createmem(ODR_ENCODE); content_len = no; z_soap_codec(decode, &soap_package, &content_buf, &content_len, h); if (!soap_package) { fprintf(stderr, "Decoding seriously failed\n"); exit(1); } if (debug) { fprintf(stderr, "got NS = %s\n", soap_package->ns); if (soap_package->which == Z_SOAP_generic && soap_package->u.generic->no == 0) { Z_SRW_PDU *sr = (Z_SRW_PDU *) soap_package->u.generic->p; if (sr->which == Z_SRW_searchRetrieve_request) { Z_SRW_searchRetrieveRequest *req = sr->u.request; switch(req->query_type) { case Z_SRW_query_type_cql: fprintf(stderr, "CQL: %s\n", req->query.cql); break; case Z_SRW_query_type_xcql: fprintf(stderr, "XCQL\n"); break; case Z_SRW_query_type_pqf: fprintf(stderr, "PQF: %s\n", req->query.pqf); break; } } else if (sr->which == Z_SRW_searchRetrieve_response) { Z_SRW_searchRetrieveResponse *res = sr->u.response; if (res->records && res->num_records) { int i; for (i = 0; inum_records; i++) { fprintf (stderr, "%d\n", i); if (res->records[i].recordData_buf) { fprintf(stderr, "%.*s", res->records[i].recordData_len, res->records[i].recordData_buf); } } } } } } z_soap_codec(encode, &soap_package, &content_buf, &content_len, h); if (content_buf && content_len) { printf("%.*s", content_len, content_buf); } else { fprintf(stderr, "No output!\n"); exit(1); } odr_destroy(decode); odr_destroy(encode); exit(0); } #else int main(int argc, char **argv) { fprintf(stderr, "SOAP disabled\n"); exit(1); } #endif /* * Local variables: * c-basic-offset: 4 * c-file-style: "Stroustrup" * indent-tabs-mode: nil * End: * vim: shiftwidth=4 tabstop=8 expandtab */ yaz-4.2.30/util/yaz-illclient.c0000644000175000017500000005447111733047144013244 00000000000000/* This file is part of the YAZ toolkit. * Copyright (C) 1995-2012 Index Data * See the file LICENSE for details. */ /* WARNING - This is work in progress - not at all ready */ /** \file yaz-illclient.c * \brief client for ILL requests (ISO 10161-1) * * This is a test client for handling ISO 10161-1 ILL requests. * Those are not directly Z39.50, but the protocol is quite similar * and yaz already provides the APDUS for it. * * This is not an interactive client like yaz-client, but driven by command- * line arguments. Its output is a return code, and possibly some text on * stdout. * * Exit codes (note, the program exits as soon as it finds a good reason) * 0 ok * 1 errors in arguments * 2 Internal errors in creating objects (comstack, odr...) * mostly programming errors. * 3 could not connect * 4 could not send request * 5 No reponse received * 6 Error decoding response packet * 7 Server returned an error (see log or stdout) * * * * */ #if HAVE_CONFIG_H #include #endif #include #include #if HAVE_UNISTD_H #include #endif #if HAVE_SYS_STAT_H #include #endif #if HAVE_SYS_TIME_H #include #endif #include #include #include #include #include #include #include #include #include /* A structure for holding name-value pairs in a linked list */ struct nameval { char *name; char *val; struct nameval *next; }; /* A structure for storing all the arguments */ struct prog_args { char *host; char *auth_userid; char *auth_passwd; char *oclc_recno; /* record number in oclc-mode */ int oclc_auth; /* 1=use oclc-type auth */ struct nameval* namevals; /* circular list, points to last */ } ; /* Call-back to be called for every field in the ill-request */ /* It can set values to any field, perhaps from the prog_args */ const char *get_ill_element(void *clientData, const char *element) { struct prog_args *args = (struct prog_args *) clientData; struct nameval *nv=args->namevals; char *ret=0; if (!nv) return ""; do { nv=nv->next; /* printf("comparing '%s' with '%s' \n",element, nv->name ); */ if ( strcmp(element, nv->name) == 0 ) ret = nv->val; } while ( ( !ret) && ( nv != args->namevals) ); yaz_log(YLOG_DEBUG,"get_ill_element:'%s'->'%s'", element, ret ); return ret; } /* * * * * * * * * * * * * * * * * */ /** \brief parse a parameter string */ /* string is like 'name=value' */ struct nameval *parse_nameval( char *arg ) { struct nameval *nv = (struct nameval *) xmalloc(sizeof(*nv)); char *p=arg; int len; if (!p || !*p) return 0; /* yeah, leaks a bit of memory. so what */ while ( *p && ( *p != '=' ) ) p++; len = p - arg; if (!len) return 0; nv->name = (char *) xmalloc(len+1); strncpy(nv->name, arg, len); nv->name[len]='\0'; if (*p == '=' ) p++; /* skip the '=' */ else return 0; /* oops, no '=' */ if (!*p) return 0; /* no value */ nv->val=xstrdup(p); nv->next=0; yaz_log(YLOG_DEBUG,"parse_nameval: n='%s' v='%s'", nv->name, nv->val ); return nv; } /** \brief append nv to the list of namevals */ void append_nameval (struct prog_args *args, struct nameval *nv) { if (!nv) return; if (args->namevals) { nv->next=args->namevals->next; /* first */ args->namevals->next=nv; args->namevals=nv; } else { nv->next=nv; args->namevals=nv; } } /* append_nameval */ /** \brief parse a parameter file */ void parse_paramfile(char *arg, struct prog_args *args) { FILE *f=fopen(arg,"r"); #define BUFSIZE 4096 char buf[BUFSIZE]; int len; struct nameval *nv; if (!f) { yaz_log(YLOG_FATAL,"Could not open param file '%s' ", arg); printf("Could not open file '%s' \n",arg); exit(1); } yaz_log(YLOG_DEBUG,"Opened input file '%s' ",arg ); while (fgets(buf,BUFSIZE,f)) { if (buf[0] != '#' ) { len=strlen(buf)-1; if (buf[len] == '\n') buf[len] = '\0' ; nv=parse_nameval(buf); append_nameval(args, nv); } /* not a comment */ } (void) fclose(f); if (0) { nv=args->namevals; printf("nv chain: ================ \n"); printf("(last:) %p: '%s' = '%s' (%p) \n",nv, nv->name, nv->val, nv->next ); do { nv=nv->next; printf("%p: '%s' = '%s' (%p)\n",nv, nv->name, nv->val, nv->next ); } while (nv != args->namevals ); exit(1); } } /* parse_paramfile */ /** \brief Parse program arguments */ void parseargs( int argc, char * argv[], struct prog_args *args) { int ret; char *arg; char *prog=*argv; char version[60]; struct nameval *nv; /* default values */ args->host = 0; /* not known (yet) */ args->namevals=0; /* none set up */ args->oclc_auth=0; args->oclc_recno=0; args->auth_userid = 0; args->auth_passwd = 0; #if 0 /* Example 3 - directly from OCLC, supposed to work on their test server*/ args->auth_userid = "100-310-658" ; /* FIXME - get from cmd line */ args->auth_passwd = "apii2test" ; /* FIXME - get from cmd line */ #endif while ((ret = options("Vov:p:u:D:f:r:l:", argv, argc, &arg)) != -2) { yaz_log(YLOG_DEBUG,"parsing option '%c' '%s'",ret, arg); switch (ret) { case 0: if (!args->host) { args->host = xstrdup (arg); } else { fprintf(stderr, "%s: Specify at most one server address\n", prog); exit(1); } break; case 'v': yaz_log_init(yaz_log_mask_str(arg), "", 0); break; case 'l': yaz_log_init_file(arg); break; case 'V': yaz_version(version, 0); printf("%s %s\n",prog, version); break; case 'D': nv=parse_nameval(arg); append_nameval(args,nv); break; case 'f': parse_paramfile(arg,args); break; case 'o': args->oclc_auth=1; break; case 'u': args->auth_userid=xstrdup(arg); break; case 'p': args->auth_passwd=xstrdup(arg); break; case 'r': args->oclc_recno=xstrdup(arg); break; default: fprintf (stderr, "Usage: %s " " [-f filename]" " [-v loglevel...]" " [-D name=value ]" " [-o -u user -p passwd]" " [-V]" " \n", prog); exit (1); } } } /* parseargs */ /* * * * * * * * * * * */ /** \brief Validate the arguments make sense */ void validateargs( struct prog_args *args) { if (!args->host) { fprintf(stderr, "Specify a connection address, " "as in 'bagel.indexdata.dk:210' \n"); exit(1); } if (args->oclc_auth && ((!args->auth_userid) || (!args->auth_passwd))){ fprintf(stderr, "-o option requires -u and -p \n"); exit(1); } } /* validateargs */ /* * * * * * * * * * * * * * * */ /** \brief Connect to the target */ COMSTACK connect_to( char *hostaddr ){ COMSTACK stack; void *server_address_ip; int status; yaz_log(YLOG_DEBUG,"Connecting to '%s'", hostaddr); stack = cs_create_host(hostaddr, 1, &server_address_ip ); if (!stack) { yaz_log(YLOG_FATAL,"Error in creating the comstack '%s' ", hostaddr ); exit(2); } yaz_log(YLOG_DEBUG,"Created stack ok "); status = cs_connect(stack, server_address_ip); if (status != 0) { yaz_log(YLOG_FATAL|YLOG_ERRNO,"Can not connect '%s' ", hostaddr ); exit(3); } yaz_log(YLOG_DEBUG,"Connected OK to '%s'", hostaddr); return stack; } /* * * * * * * * * * * * * * * */ /* Makes a Z39.50-like prompt package with username and password */ Z_PromptObject1 *makeprompt(struct prog_args *args, ODR odr) { Z_PromptObject1 *p = (Z_PromptObject1 *) odr_malloc(odr, sizeof(*p) ); Z_ResponseUnit1 *ru = (Z_ResponseUnit1 *) odr_malloc(odr, sizeof(*ru) ); p->which=Z_PromptObject1_response; p->u.response = (Z_Response1*) odr_malloc(odr, sizeof(*(p->u.response)) ); p->u.response->num=2; p->u.response->elements= (Z_ResponseUnit1 **) odr_malloc(odr, p->u.response->num*sizeof(*(p->u.response->elements)) ); /* user id, aka "oclc authorization number" */ p->u.response->elements[0] = ru; ru->promptId = (Z_PromptId *) odr_malloc(odr, sizeof(*(ru->promptId) )); ru->promptId->which = Z_PromptId_enumeratedPrompt; ru->promptId->u.enumeratedPrompt = (Z_PromptIdEnumeratedPrompt *) odr_malloc(odr, sizeof(*(ru->promptId->u.enumeratedPrompt) )); ru->promptId->u.enumeratedPrompt->type = odr_intdup(odr,Z_PromptIdEnumeratedPrompt_userId); ru->promptId->u.enumeratedPrompt->suggestedString = 0 ; ru->which = Z_ResponseUnit1_string ; ru->u.string = odr_strdup(odr, args->auth_userid); /* password */ ru = (Z_ResponseUnit1 *) odr_malloc(odr, sizeof(*ru) ); p->u.response->elements[1] = ru; ru->promptId = (Z_PromptId *) odr_malloc(odr, sizeof(*(ru->promptId) )); ru->promptId->which = Z_PromptId_enumeratedPrompt; ru->promptId->u.enumeratedPrompt = (Z_PromptIdEnumeratedPrompt *) odr_malloc(odr, sizeof(*(ru->promptId->u.enumeratedPrompt) )); ru->promptId->u.enumeratedPrompt->type = odr_intdup(odr,Z_PromptIdEnumeratedPrompt_password); ru->promptId->u.enumeratedPrompt->suggestedString = 0 ; ru->which = Z_ResponseUnit1_string ; ru->u.string = odr_strdup(odr, args->auth_passwd); return p; } /* makeprompt */ ILL_Extension *makepromptextension(struct prog_args *args, ODR odr) { ODR odr_ext = odr_createmem(ODR_ENCODE); ODR odr_prt = odr_createmem(ODR_PRINT); ILL_Extension *e = (ILL_Extension *) odr_malloc(odr, sizeof(*e)); Z_PromptObject1 *p = makeprompt(args,odr_ext); char * buf; int siz; Z_External *ext = (Z_External *) odr_malloc(odr, sizeof(*ext)); ext->direct_reference = odr_getoidbystr(odr,"1.2.840.10003.8.1"); ext->indirect_reference=0; ext->descriptor=0; ext->which=Z_External_single; if ( ! z_PromptObject1(odr_ext, &p, 0,0 ) ) { yaz_log(YLOG_FATAL,"Encoding of z_PromptObject1 failed "); exit (6); } printf ("Prompt: \n"); /*!*/ z_PromptObject1(odr_prt, &p, 0,0 ); /*!*/ buf= odr_getbuf(odr_ext,&siz,0); ext->u.single_ASN1_type=(Odr_any *) odr_malloc(odr,sizeof(*ext->u.single_ASN1_type)); ext->u.single_ASN1_type->buf= (unsigned char *) odr_malloc(odr, siz); memcpy(ext->u.single_ASN1_type->buf,buf, siz ); ext->u.single_ASN1_type->len = ext->u.single_ASN1_type->size = siz; odr_reset(odr_ext); odr_reset(odr_prt); /*!*/ e->identifier = odr_intdup(odr,1); e->critical = odr_booldup(odr,0); e->item = (Odr_any *) odr_malloc(odr,sizeof(*e->item)); if ( ! z_External(odr_ext, &ext,0,0) ) { yaz_log(YLOG_FATAL,"Encoding of z_External failed "); exit (6); } printf("External: \n"); z_External(odr_prt, &ext,0,0); /*!*/ buf= odr_getbuf(odr_ext,&siz,0); e->item->buf= (unsigned char *) odr_malloc(odr, siz); memcpy(e->item->buf,buf, siz ); e->item->len = e->item->size = siz; odr_destroy(odr_prt); odr_destroy(odr_ext); return e; } /* makepromptextension */ ILL_Extension *makeoclcextension(struct prog_args *args, ODR odr) { /* The oclc extension is required, but only contains optional */ /* fields. Here we just null them all out */ ODR odr_ext = odr_createmem(ODR_ENCODE); ODR odr_prt = odr_createmem(ODR_PRINT); ILL_Extension *e = (ILL_Extension *) odr_malloc(odr, sizeof(*e)); ILL_OCLCILLRequestExtension *oc = (ILL_OCLCILLRequestExtension *) odr_malloc(odr_ext, sizeof(*oc)); char * buf; int siz; Z_External *ext = (Z_External *) odr_malloc(odr, sizeof(*ext)); oc->clientDepartment = 0; oc->paymentMethod = 0; oc->uniformTitle = 0; oc->dissertation = 0; oc->issueNumber = 0; oc->volume = 0; oc->affiliations = 0; oc->source = 0; ext->direct_reference = odr_getoidbystr(odr,"1.0.10161.13.2"); ext->indirect_reference=0; ext->descriptor=0; ext->which=Z_External_single; if ( ! ill_OCLCILLRequestExtension(odr_ext, &oc, 0,0 ) ) { yaz_log(YLOG_FATAL,"Encoding of ill_OCLCILLRequestExtension failed "); exit (6); } printf ("OCLC: \n"); /*!*/ ill_OCLCILLRequestExtension(odr_prt, &oc, 0,0 ); /*!*/ buf= odr_getbuf(odr_ext,&siz,0); ext->u.single_ASN1_type = (Odr_any*) odr_malloc(odr,sizeof(*ext->u.single_ASN1_type)); ext->u.single_ASN1_type->buf = (unsigned char *) odr_malloc(odr, siz); memcpy(ext->u.single_ASN1_type->buf,buf, siz ); ext->u.single_ASN1_type->len = ext->u.single_ASN1_type->size = siz; odr_reset(odr_ext); odr_reset(odr_prt); /*!*/ e->identifier = odr_intdup(odr,1); e->critical = odr_booldup(odr,0); e->item = (Odr_any *) odr_malloc(odr,sizeof(*e->item)); if ( ! z_External(odr_ext, &ext,0,0) ) { yaz_log(YLOG_FATAL,"Encoding of z_External failed "); exit (6); } printf("External: \n"); z_External(odr_prt, &ext,0,0); /*!*/ buf= odr_getbuf(odr_ext,&siz,0); e->item->buf= (unsigned char *) odr_malloc(odr, siz); memcpy(e->item->buf, buf, siz); e->item->len = e->item->size = siz; odr_destroy(odr_prt); odr_destroy(odr_ext); return e; } /* makeoclcextension */ ILL_APDU *createrequest( struct prog_args *args, ODR odr) { struct ill_get_ctl ctl; ILL_APDU *apdu; ILL_Request *req; ctl.odr = odr; ctl.clientData = args; ctl.f = get_ill_element; apdu = (ILL_APDU *) odr_malloc( odr, sizeof(*apdu) ); apdu->which=ILL_APDU_ILL_Request; req = ill_get_ILLRequest(&ctl, "ill", 0); apdu->u.illRequest=req; if (args->oclc_auth) { req->num_iLL_request_extensions=2; req->iLL_request_extensions= (ILL_Extension **) odr_malloc(odr, req->num_iLL_request_extensions* sizeof(*req->iLL_request_extensions)); req->iLL_request_extensions[0]=makepromptextension(args,odr); req->iLL_request_extensions[1]=makeoclcextension(args,odr); } if (!req) { yaz_log(YLOG_FATAL,"Could not create ill request"); exit(2); } return apdu; } /* createrequest */ /* * * * * * * * * * * * * * * */ /** \brief Send the request */ void sendrequest(ILL_APDU *apdu, ODR odr, COMSTACK stack ) { char *buf_out; int len_out; int res; if (!ill_APDU (odr, &apdu, 0, 0)) { yaz_log(YLOG_FATAL,"ill_Apdu failed"); exit(2); } buf_out = odr_getbuf(odr, &len_out, 0); if (0) { yaz_log(YLOG_DEBUG,"Request PDU Dump"); odr_dumpBER(yaz_log_file(), buf_out, len_out); } if (!buf_out) { yaz_log(YLOG_FATAL,"Encoding failed. Len=%d", len_out); odr_perror(odr, "encoding failed"); exit(2); } yaz_log(YLOG_DEBUG,"About to send the request. Len=%d", len_out); res = cs_put(stack, buf_out, len_out); if ( res<0 ) { yaz_log(YLOG_FATAL,"Could not send packet. code %d",res ); exit (4); } if (1) { FILE *F = fopen("req.apdu","w"); if (!F) { yaz_log(YLOG_FATAL|YLOG_ERRNO, "open req.apdu failed"); } else { if (fwrite ( buf_out, 1, len_out, F) != len_out) yaz_log(YLOG_FATAL|YLOG_ERRNO, "write req.apdu failed"); if (fclose(F)) yaz_log(YLOG_FATAL|YLOG_ERRNO, "write req.apdu failed"); } } } /* sendrequest */ /* * * * * * * * * * * * * * * */ /** \brief Get a response */ ILL_APDU *getresponse( COMSTACK stack, ODR in_odr ){ ILL_APDU *resp; int res; char *buf_in=0; int len_in=0; yaz_log(YLOG_DEBUG,"About to wait for a response"); res = cs_get(stack, &buf_in, &len_in); yaz_log(YLOG_DEBUG,"Got a response of %d bytes at %p. res=%d", len_in,buf_in, res); if (res<0) { yaz_log(YLOG_FATAL,"Could not receive packet. code %d",res ); yaz_log(YLOG_DEBUG,"%02x %02x %02x %02x %02x %02x %02x %02x ...", buf_in[0], buf_in[1], buf_in[2], buf_in[3], buf_in[4], buf_in[5], buf_in[6], buf_in[7] ); yaz_log(YLOG_DEBUG,"PDU Dump:"); odr_dumpBER(yaz_log_file(), buf_in, len_in); exit (5); } odr_setbuf(in_odr, buf_in, res, 0); if (!ill_APDU (in_odr, &resp, 0, 0)) { int x; int err = odr_geterrorx(in_odr, &x); char msg[60]; const char *element = odr_getelement(in_odr); sprintf(msg, "ODR code %d:%d element=%-20s", err, x, element ? element : ""); yaz_log(YLOG_FATAL,"Error decoding incoming packet: %s",msg); yaz_log(YLOG_DEBUG,"%02x %02x %02x %02x %02x %02x %02x %02x ...", buf_in[0], buf_in[1], buf_in[2], buf_in[3], buf_in[4], buf_in[5], buf_in[6], buf_in[7] ); yaz_log(YLOG_DEBUG,"PDU Dump:"); odr_dumpBER(yaz_log_file(), buf_in, len_in); yaz_log(YLOG_FATAL,"Error decoding incoming packet: %s",msg); exit(6); } return resp; } /* getresponse */ /** \brief Dump a apdu */ void dumpapdu( ILL_APDU *apdu) { ODR print_odr = odr_createmem(ODR_PRINT); ill_APDU (print_odr, &apdu, 0, 0); odr_destroy(print_odr); } /* dumpapdu */ /** \brief Check apdu type and extract the status_or_error */ ILL_Status_Or_Error_Report *getstaterr( ILL_APDU *resp, ODR in_odr ) { if (resp->which != ILL_APDU_Status_Or_Error_Report ) { const char *element = odr_getelement(in_odr); if (!element) element="unknown"; printf("Server returned wrong packet type: %d\n", resp->which); yaz_log(YLOG_FATAL,"Server returned a (%d) and " "not a 'Status_Or_Error_Report' (%d) ", resp->which, ILL_APDU_Status_Or_Error_Report); exit(6); } return resp->u.Status_Or_Error_Report; } /* getstaterr */ /** \brief Return a printable string from an ILL_String */ char *getillstring( ILL_String *s) { if (s->which == ILL_String_GeneralString ) return s->u.GeneralString; else if (s->which == ILL_String_EDIFACTString ) return s->u.EDIFACTString; else { yaz_log(YLOG_FATAL,"Invalid ILL_String "); exit (6); } } /* getillstring */ /** \brief Check if the status was an error packet */ /* The presence of an error_report indicates it was an error */ /* Then the problem is to find the right message. We dig around */ /* until we find the first message, print that, and exit the program */ void checkerr( ILL_Status_Or_Error_Report *staterr ) { yaz_log(YLOG_DEBUG, "err= %p ",staterr->error_report ); if (staterr->error_report) { ILL_Error_Report *err= staterr->error_report; if ( err->user_error_report) { ILL_User_Error_Report *uerr= err->user_error_report; switch( uerr->which ) { case ILL_User_Error_Report_already_forwarded: printf("Already forwarded: \n"); break; case ILL_User_Error_Report_intermediary_problem: printf("Intermediary problem: " ODR_INT_PRINTF "\n", *uerr->u.intermediary_problem); break; case ILL_User_Error_Report_security_problem: printf("Security problem: %s\n", getillstring(uerr->u.security_problem)); break; case ILL_User_Error_Report_unable_to_perform: printf("Unable to perform: " ODR_INT_PRINTF "\n", *uerr->u.unable_to_perform); break; default: printf("Unknown problem"); } exit(7); } if ( err->provider_error_report) { ILL_Provider_Error_Report *perr= err->provider_error_report; switch( perr->which ) { case ILL_Provider_Error_Report_general_problem: printf("General Problem: " ODR_INT_PRINTF ":", *perr->u.general_problem); break; case ILL_Provider_Error_Report_transaction_id_problem: printf("Transaction Id Problem: " ODR_INT_PRINTF ":", *perr->u.general_problem); break; case ILL_Provider_Error_Report_state_transition_prohibited: printf("State Transition prohibited:"); break; } /*exit(7);*/ } /* fallbacks */ if ( staterr->note ) printf("%s", getillstring(staterr->note)); else printf("Unknown error type"); printf("\n"); exit(7); } } /* checkerr */ /* * * * * * * * * * * * * * * */ /** \brief Main program * * Parse arguments * Validate arguments * Establish connection * Build a request * Send a request * Get a reply * Parse reply * Produce output */ int main (int argc, char * argv[]) { struct prog_args args; COMSTACK stack; ODR out_odr = odr_createmem(ODR_ENCODE); ODR in_odr = odr_createmem(ODR_DECODE); ILL_APDU *apdu; ILL_APDU *resp; ILL_Status_Or_Error_Report *staterr; parseargs( argc, argv, &args); validateargs(&args); stack = connect_to(args.host); apdu = createrequest(&args, out_odr); if (1) dumpapdu(apdu); sendrequest(apdu, out_odr, stack ); resp = getresponse(stack, in_odr ); if (1) dumpapdu(resp); staterr=getstaterr(resp, in_odr); checkerr(staterr); printf ("Ok\n"); /* while debugging */ exit (0); } /* * Local variables: * c-basic-offset: 4 * c-file-style: "Stroustrup" * indent-tabs-mode: nil * End: * vim: shiftwidth=4 tabstop=8 expandtab */ yaz-4.2.30/util/yaz-url.c0000644000175000017500000001075011733047144012057 00000000000000/* This file is part of the YAZ toolkit. * Copyright (C) 1995-2012 Index Data * See the file LICENSE for details. */ #if HAVE_CONFIG_H #include "config.h" #endif #include #include #include #include #include #include static void usage(void) { printf("yaz-icu [options] url ..\n"); printf(" -H name:value Sets HTTP header (repeat if necessary)\n"); printf(" -m method Sets HTTP method\n"); printf(" -O fname Writes HTTP content to file\n"); printf(" -p fname POSTs file at following url\n"); printf(" -u user/password Sets Basic HTTP auth\n"); printf(" -x proxy Sets HTTP proxy\n"); exit(1); } static char *get_file(const char *fname, size_t *len) { char *buf = 0; FILE *inf = fopen(fname, "rb"); if (!inf) { yaz_log(YLOG_FATAL|YLOG_ERRNO, "Could not open %s", fname); exit(1); } if (fseek(inf, 0L, SEEK_END)) { yaz_log(YLOG_FATAL|YLOG_ERRNO, "fseek of %s failed", fname); exit(1); } *len = ftell(inf); if (*len) /* zero length not considered an error */ { buf = xmalloc(*len); fseek(inf, 0L, SEEK_SET); (void) fread(buf, 1, *len, inf); } fclose(inf); return buf; } int main(int argc, char **argv) { int ret; char *arg; yaz_url_t p = yaz_url_create(); char *post_buf = 0; size_t post_len = 0; const char *method = "GET"; Z_HTTP_Response *http_response; Z_HTTP_Header *http_headers = 0; ODR odr = odr_createmem(ODR_ENCODE); int exit_code = 0; int no_urls = 0; const char *outfname = 0; while ((ret = options("hH:m:O:p:u:x:", argv, argc, &arg)) != YAZ_OPTIONS_EOF) { switch (ret) { case 'h': usage(); break; case 'H': if (!strchr(arg, ':')) { yaz_log(YLOG_FATAL, "bad header option (missing :) %s\n", arg); exit_code = 1; } else { char *cp = strchr(arg, ':'); char *name = odr_malloc(odr, 1 + cp - arg); char *value = cp + 1; memcpy(name, arg, cp - arg); name[cp - arg] = '\0'; while (*value == ' ') /* skip space after = */ value++; z_HTTP_header_add(odr, &http_headers, name, value); } break; case 'm': method = arg; break; case 'O': outfname = arg; break; case 'p': xfree(post_buf); post_buf = get_file(arg, &post_len); method = "POST"; break; case 'u': if (strchr(arg, '/')) { char *cp = strchr(arg, '/'); char *user = odr_malloc(odr, 1 + cp - arg); char *password = cp + 1; memcpy(user, arg, cp - arg); user[cp - arg] = '\0'; z_HTTP_header_add_basic_auth(odr, &http_headers, user, password); } else z_HTTP_header_add_basic_auth(odr, &http_headers, arg, 0); break; case 'x': yaz_url_set_proxy(p, arg); break; case 0: http_response = yaz_url_exec(p, arg, method, http_headers, post_buf, post_len); if (!http_response) exit_code = 1; else { FILE *outf = stdout; if (outfname) { outf = fopen(outfname, "w"); if (!outf) { yaz_log(YLOG_FATAL|YLOG_ERRNO, "open %s", outfname); exit(1); } } fwrite(http_response->content_buf, 1, http_response->content_len, outf); if (outfname) fclose(outf); } no_urls++; break; default: usage(); } } xfree(post_buf); yaz_url_destroy(p); odr_destroy(odr); if (no_urls == 0) usage(); exit(exit_code); } /* * Local variables: * c-basic-offset: 4 * c-file-style: "Stroustrup" * indent-tabs-mode: nil * End: * vim: shiftwidth=4 tabstop=8 expandtab */ yaz-4.2.30/util/Makefile.am0000644000175000017500000000263211733047144012344 00000000000000## This file is part of the YAZ toolkit. ## Copyright (C) 1995-2012 Index Data bin_SCRIPTS = yaz-asncomp yaz-config EXTRA_DIST = yaz-asncomp yaz-icu-example.xml DISTCLEANFILES = yaz-config AM_CPPFLAGS=-I$(top_srcdir)/include $(XML2_CFLAGS) $(ICU_CPPFLAGS) bin_PROGRAMS = yaz-marcdump yaz-iconv yaz-illclient yaz-icu yaz-json-parse \ yaz-url noinst_PROGRAMS = cclsh cql2pqf cql2xcql srwtst yaz-benchmark \ yaz-xmlquery yaz-record-conv # MARC dumper utility yaz_marcdump_SOURCES = marcdump.c yaz_marcdump_LDADD = ../src/libyaz.la # YAZ Iconv utility yaz_iconv_SOURCES = yaziconv.c yaz_iconv_LDADD = ../src/libyaz.la srwtst_SOURCES=srwtst.c srwtst_LDADD = ../src/libyaz.la cclsh_SOURCES=cclsh.c cclsh_LDADD = ../src/libyaz.la $(READLINE_LIBS) cql2pqf_SOURCES = cql2pqf.c cql2pqf_LDADD = ../src/libyaz.la cql2xcql_SOURCES = cql2xcql.c cql2xcql_LDADD = ../src/libyaz.la yaz_benchmark_SOURCES = benchmark.c yaz_benchmark_LDADD = ../src/libyaz.la yaz_xmlquery_SOURCES = yaz-xmlquery.c yaz_xmlquery_LDADD = ../src/libyaz.la yaz_illclient_SOURCES = yaz-illclient.c yaz_illclient_LDADD = ../src/libyaz.la yaz_icu_SOURCES = yaz-icu.c yaz_icu_LDADD =../src/libyaz_icu.la ../src/libyaz.la $(ICU_LIBS) yaz_json_parse_SOURCES = json-parse.c yaz_json_parse_LDADD = ../src/libyaz.la yaz_record_conv_SOURCES = yaz-record-conv.c yaz_record_conv_LDADD = ../src/libyaz.la yaz_url_SOURCES = yaz-url.c yaz_url_LDADD =../src/libyaz.la yaz-4.2.30/util/yaz-icu.c0000644000175000017500000004317111733047144012040 00000000000000/* This file is part of the YAZ toolkit. * Copyright (C) 1995-2012 Index Data * See the file LICENSE for details. */ #if HAVE_CONFIG_H #include "config.h" #endif #include #include #include #include #include #if YAZ_HAVE_ICU #include #include #include #include #include #include #include #include /* commando line and config parameters */ struct config_t { char conffile[1024]; char print[1024]; int xmloutput; int sortoutput; yaz_icu_chain_t chain; FILE * infile; FILE * outfile; }; void print_option_error(const struct config_t *p_config) { fprintf(stderr, "yaz-icu [options] [infile]\n" "Options:\n" " -c file XML configuration\n" " -p a|c|l|t Print ICU info \n" " -s Show sort normalization key\n" " -x XML output instread of text\n" "\n" "Examples:\n" "cat hugetextfile.txt | ./yaz-icu -c config.xml \n" "./yaz-icu -p c\n" "./yaz-icu -p l -x\n" "./yaz-icu -p t -x\n" "\n" "Example ICU chain XML configuration file:\n" "\n" " \n" " \n" " \n" " \n" "\n" ); exit(1); } void read_params(int argc, char **argv, struct config_t *p_config) { char *arg; int ret; /* set default parameters */ p_config->conffile[0] = 0; p_config->print[0] = 0; p_config->xmloutput = 0; p_config->sortoutput = 0; p_config->chain = 0; p_config->infile = 0; p_config->outfile = stdout; /* set up command line parameters */ while ((ret = options("c:p:xs", argv, argc, &arg)) != -2) { switch (ret) { case 'c': strcpy(p_config->conffile, arg); break; case 'p': strcpy(p_config->print, arg); break; case 's': p_config->sortoutput = 1; break; case 'x': p_config->xmloutput = 1; break; case 0: if (p_config->infile) { fprintf(stderr, "yaz-icu: only one input file may be given\n"); print_option_error(p_config); } p_config->infile = fopen(arg, "r"); if (!p_config->infile) { fprintf(stderr, "yaz-icu: cannot open %s : %s\n", arg, strerror(errno)); exit(1); } break; default: fprintf(stderr, "yaz_icu: invalid option: %s\n", arg); print_option_error(p_config); } } if (p_config->infile == 0) p_config->infile = stdin; if (!strlen(p_config->conffile) && !strlen(p_config->print)) print_option_error(p_config); } static void print_icu_converters(const struct config_t *p_config) { int32_t count; int32_t i; count = ucnv_countAvailable(); if (p_config->xmloutput) fprintf(p_config->outfile, "\n", count, ucnv_getDefaultName()); else { fprintf(p_config->outfile, "Available ICU converters: %d\n", count); fprintf(p_config->outfile, "Default ICU Converter is: '%s'\n", ucnv_getDefaultName()); } for (i = 0; i < count; i++) { if (p_config->xmloutput) fprintf(p_config->outfile, "\n", ucnv_getAvailableName(i)); else fprintf(p_config->outfile, "%s\n", ucnv_getAvailableName(i)); } if (p_config->xmloutput) fprintf(p_config->outfile, "\n"); else fprintf(p_config->outfile, "\n"); } static void print_icu_transliterators(const struct config_t *p_config) { UErrorCode status; UEnumeration *en = utrans_openIDs(&status); int32_t count = uenum_count(en, &status); const char *name; int32_t length; if (p_config->xmloutput) fprintf(p_config->outfile, "\n", count); else fprintf(p_config->outfile, "Available ICU transliterators: %d\n", count); while ((name = uenum_next(en, &length, &status))) { if (p_config->xmloutput) fprintf(p_config->outfile, "\n", name); else fprintf(p_config->outfile, "%s\n", name); } uenum_close(en); if (p_config->xmloutput) fprintf(p_config->outfile, "\n"); else { fprintf(p_config->outfile, "\n\nUnicode Set Patterns:\n" " Pattern Description\n" " Ranges [a-z] The lower case letters a through z\n" " Named Chars [abc123] The six characters a,b,c,1,2 and 3\n" " String [abc{def}] chars a, b and c, and string 'def'\n" " Categories [\\p{Letter}] Perl General Category 'Letter'.\n" " Categories [:Letter:] Posix General Category 'Letter'.\n" "\n" " Combination Example\n" " Union [[:Greek:] [:letter:]]\n" " Intersection [[:Greek:] & [:letter:]]\n" " Set Complement [[:Greek:] - [:letter:]]\n" " Complement [^[:Greek:] [:letter:]]\n" "\n" "see: http://icu.sourceforge.net/userguide/unicodeSet.html\n" "\n" "Examples:\n" " [:Punctuation:] Any-Remove\n" " [:Cased-Letter:] Any-Upper\n" " [:Control:] Any-Remove\n" " [:Decimal_Number:] Any-Remove\n" " [:Final_Punctuation:] Any-Remove\n" " [:Georgian:] Any-Upper\n" " [:Katakana:] Any-Remove\n" " [:Arabic:] Any-Remove\n" " [:Punctuation:] Remove\n" " [[:Punctuation:]-[.,]] Remove\n" " [:Line_Separator:] Any-Remove\n" " [:Math_Symbol:] Any-Remove\n" " Lower; [:^Letter:] Remove (word tokenization)\n" " [:^Number:] Remove (numeric tokenization)\n" " [:^Katagana:] Remove (remove everything except Katagana)\n" " Lower;[[:WhiteSpace:][:Punctuation:]] Remove (word tokenization)\n" " NFD; [:Nonspacing Mark:] Remove; NFC (removes accents from characters)\n" " [A-Za-z]; Lower(); Latin-Katakana; Katakana-Hiragana (transforms latin and katagana to hiragana)\n" " [[:separator:][:start punctuation:][:initial punctuation:]] Remove \n" "\n" "see http://userguide.icu-project.org/transforms/general\n" " http://www.unicode.org/reports/tr44/\n" ); fprintf(p_config->outfile, "\n\n"); } } static void print_icu_xml_locales(const struct config_t *p_config) { int32_t count; int32_t i; UErrorCode status = U_ZERO_ERROR; UChar keyword[64]; int32_t keyword_len = 0; char keyword_str[128]; int32_t keyword_str_len = 0; UChar language[64]; int32_t language_len = 0; char lang_str[128]; int32_t lang_str_len = 0; UChar script[64]; int32_t script_len = 0; char script_str[128]; int32_t script_str_len = 0; UChar location[64]; int32_t location_len = 0; char location_str[128]; int32_t location_str_len = 0; UChar variant[64]; int32_t variant_len = 0; char variant_str[128]; int32_t variant_str_len = 0; UChar name[64]; int32_t name_len = 0; char name_str[128]; int32_t name_str_len = 0; UChar localname[64]; int32_t localname_len = 0; char localname_str[128]; int32_t localname_str_len = 0; count = uloc_countAvailable() ; if (p_config->xmloutput) { fprintf(p_config->outfile, "\n", count, uloc_getDefault(), ucol_countAvailable()); } else { fprintf(p_config->outfile, "Available ICU locales: %d\n", count); fprintf(p_config->outfile, "Default locale is: %s\n", uloc_getDefault()); } for (i = 0; i < count; i++) { keyword_len = uloc_getDisplayKeyword(uloc_getAvailable(i), "en", keyword, 64, &status); u_strToUTF8(keyword_str, 128, &keyword_str_len, keyword, keyword_len, &status); language_len = uloc_getDisplayLanguage(uloc_getAvailable(i), "en", language, 64, &status); u_strToUTF8(lang_str, 128, &lang_str_len, language, language_len, &status); script_len = uloc_getDisplayScript(uloc_getAvailable(i), "en", script, 64, &status); u_strToUTF8(script_str, 128, &script_str_len, script, script_len, &status); location_len = uloc_getDisplayCountry(uloc_getAvailable(i), "en", location, 64, &status); u_strToUTF8(location_str, 128, &location_str_len, location, location_len, &status); variant_len = uloc_getDisplayVariant(uloc_getAvailable(i), "en", variant, 64, &status); u_strToUTF8(variant_str, 128, &variant_str_len, variant, variant_len, &status); name_len = uloc_getDisplayName(uloc_getAvailable(i), "en", name, 64, &status); u_strToUTF8(name_str, 128, &name_str_len, name, name_len, &status); localname_len = uloc_getDisplayName(uloc_getAvailable(i), uloc_getAvailable(i), localname, 64, &status); u_strToUTF8(localname_str, 128, &localname_str_len, localname, localname_len, &status); if (p_config->xmloutput) { fprintf(p_config->outfile, "outfile, " language=\"%s\"", lang_str); if (strlen(script_str)) fprintf(p_config->outfile, " script=\"%s\"", script_str); if (strlen(location_str)) fprintf(p_config->outfile, " location=\"%s\"", location_str); if (strlen(variant_str)) fprintf(p_config->outfile, " variant=\"%s\"", variant_str); if (strlen(name_str)) fprintf(p_config->outfile, " name=\"%s\"", name_str); if (strlen(localname_str)) fprintf(p_config->outfile, " localname=\"%s\"", localname_str); fprintf(p_config->outfile, ">"); if (strlen(localname_str)) fprintf(p_config->outfile, "%s", localname_str); fprintf(p_config->outfile, "\n"); } else if (1 == p_config->xmloutput) { fprintf(p_config->outfile, "%s", uloc_getAvailable(i)); fprintf(p_config->outfile, " | "); if (strlen(name_str)) fprintf(p_config->outfile, "%s", name_str); fprintf(p_config->outfile, " | "); if (strlen(localname_str)) fprintf(p_config->outfile, "%s", localname_str); fprintf(p_config->outfile, "\n"); } else fprintf(p_config->outfile, "%s\n", uloc_getAvailable(i)); } if (p_config->xmloutput) fprintf(p_config->outfile, "\n"); else fprintf(p_config->outfile, "\n"); if (U_FAILURE(status)) { fprintf(stderr, "ICU Error: %d %s\n", status, u_errorName(status)); exit(2); } } static void print_info(const struct config_t *p_config) { if (p_config->xmloutput) fprintf(p_config->outfile, "\n" "\n"); if ('c' == p_config->print[0]) print_icu_converters(p_config); else if ('l' == p_config->print[0]) print_icu_xml_locales(p_config); else if ('t' == p_config->print[0]) print_icu_transliterators(p_config); else { print_icu_converters(p_config); print_icu_xml_locales(p_config); print_icu_transliterators(p_config); } if (p_config->xmloutput) fprintf(p_config->outfile, "\n"); exit(0); } static void process_text_file(struct config_t *p_config) { char *line = 0; char linebuf[1024]; xmlDoc *doc = xmlParseFile(p_config->conffile); xmlNode *xml_node = xmlDocGetRootElement(doc); long unsigned int token_count = 0; long unsigned int line_count = 0; UErrorCode status = U_ZERO_ERROR; if (!xml_node) { printf("Could not parse XML config file '%s' \n", p_config->conffile); exit(1); } p_config->chain = icu_chain_xml_config(xml_node, 1, &status); if (!p_config->chain || !U_SUCCESS(status)) { printf("Could not set up ICU chain from config file '%s' \n", p_config->conffile); if (!U_SUCCESS(status)) printf("ICU Error: %d %s\n", status, u_errorName(status)); exit(1); } if (p_config->xmloutput) fprintf(p_config->outfile, "\n" "\n" "\n"); /* read input lines for processing */ while ((line=fgets(linebuf, sizeof(linebuf)-1, p_config->infile))) { WRBUF sw = wrbuf_alloc(); WRBUF cdata = wrbuf_alloc(); int success = icu_chain_assign_cstr(p_config->chain, line, &status); line_count++; while (success && icu_chain_next_token(p_config->chain, &status)) { if (U_FAILURE(status)) success = 0; else { const char *sortkey = icu_chain_token_sortkey(p_config->chain); wrbuf_rewind(sw); wrbuf_puts_escaped(sw, sortkey); token_count++; if (p_config->xmloutput) { fprintf(p_config->outfile, "chain)); fprintf(p_config->outfile, " norm=\"%s\"", wrbuf_cstr(cdata)); wrbuf_rewind(cdata); wrbuf_xmlputs(cdata, icu_chain_token_display(p_config->chain)); fprintf(p_config->outfile, " display=\"%s\"", wrbuf_cstr(cdata)); if (p_config->sortoutput) { wrbuf_rewind(cdata); wrbuf_xmlputs(cdata, wrbuf_cstr(sw)); fprintf(p_config->outfile, " sortkey=\"%s\"", wrbuf_cstr(cdata)); } fprintf(p_config->outfile, "/>\n"); } else { fprintf(p_config->outfile, "%lu %lu '%s' '%s'", token_count, line_count, icu_chain_token_norm(p_config->chain), icu_chain_token_display(p_config->chain)); if (p_config->sortoutput) { fprintf(p_config->outfile, " '%s'", wrbuf_cstr(sw)); } fprintf(p_config->outfile, "\n"); } } } wrbuf_destroy(sw); wrbuf_destroy(cdata); } if (p_config->xmloutput) fprintf(p_config->outfile, "\n" "\n"); icu_chain_destroy(p_config->chain); xmlFreeDoc(doc); if (line) free(line); } #endif /* YAZ_HAVE_ICU */ int main(int argc, char **argv) { #if YAZ_HAVE_ICU struct config_t config; read_params(argc, argv, &config); if (config.conffile && strlen(config.conffile)) process_text_file(&config); if (config.print && strlen(config.print)) print_info(&config); u_cleanup(); #else /* YAZ_HAVE_ICU */ printf("ICU not available on your system.\n" "Please install libicu-dev and icu-doc or similar, " "re-configure and re-compile\n"); exit(3); #endif /* YAZ_HAVE_ICU */ return 0; } /* * Local variables: * c-basic-offset: 4 * c-file-style: "Stroustrup" * indent-tabs-mode: nil * End: * vim: shiftwidth=4 tabstop=8 expandtab */ yaz-4.2.30/util/json-parse.c0000644000175000017500000000324311733047144012534 00000000000000/* This file is part of the YAZ toolkit. * Copyright (C) 1995-2012 Index Data * See the file LICENSE for details. */ #if HAVE_CONFIG_H #include #endif #include #include #include #include #include #include void usage(const char *prog) { fprintf(stderr, "%s: [-p]\n", prog); exit(1); } static struct json_node *do_parse_from_stdin(void) { FILE *f = stdin; WRBUF w = wrbuf_alloc(); struct json_node *n; size_t pos; const char *json_str; const char *err_msg; int c; while ((c = getc(f)) != EOF) wrbuf_putc(w, c); json_str = wrbuf_cstr(w); n = json_parse2(json_str, &err_msg, &pos); if (!n) { fprintf(stderr, "JSON parse error: %s\nLeading text was:\n", err_msg); fwrite(json_str, 1, pos, stderr); fprintf(stderr, "^\n"); } wrbuf_destroy(w); return n; } int main(int argc, char **argv) { struct json_node *n; int print = 0; int ret; char *arg; while ((ret = options("p", argv, argc, &arg)) != YAZ_OPTIONS_EOF) { switch (ret) { case 'p': print = 1; break; default: usage(argv[0]); } } n = do_parse_from_stdin(); if (!n) exit(1); if (print) { WRBUF result = wrbuf_alloc(); json_write_wrbuf(n, result); puts(wrbuf_cstr(result)); wrbuf_destroy(result); } json_remove_node(n); return 0; } /* * Local variables: * c-basic-offset: 4 * c-file-style: "Stroustrup" * indent-tabs-mode: nil * End: * vim: shiftwidth=4 tabstop=8 expandtab */ yaz-4.2.30/util/cclsh.c0000644000175000017500000001216411733047144011551 00000000000000/* This file is part of the YAZ toolkit. * Copyright (C) 1995-2012 Index Data * See the file LICENSE for details. */ #if HAVE_CONFIG_H #include #endif #include #include #include #include #include #if HAVE_READLINE_READLINE_H #include #endif #if HAVE_READLINE_HISTORY_H #include #endif static int debug = 0; static char *prog; void usage(const char *prog) { fprintf(stderr, "%s: [-d] [-b configfile] [-x xmlconfig]\n", prog); exit(1); } int main(int argc, char **argv) { CCL_bibset bibset; FILE *bib_inf; char *bib_fname; int ret; char *arg; #if YAZ_HAVE_XML2 xmlDocPtr doc; const char *addinfo; #endif WRBUF q_wrbuf = 0; prog = *argv; bibset = ccl_qual_mk(); while ((ret = options("db:x:", argv, argc, &arg)) != -2) { switch(ret) { case 'd': debug = 1; break; case 'b': bib_fname = arg; bib_inf = fopen(bib_fname, "r"); if (!bib_inf) { fprintf(stderr, "%s: cannot open %s\n", prog, bib_fname); exit(1); } ccl_qual_file(bibset, bib_inf); fclose(bib_inf); break; #if YAZ_HAVE_XML2 case 'x': doc = xmlParseFile(arg); if (!doc) { fprintf(stderr, "%s: could not read %s\n", prog, arg); exit(1); } if (ccl_xml_config(bibset, xmlDocGetRootElement(doc), &addinfo)) { fprintf(stderr, "%s: error in %s: %s\n", prog, arg, addinfo); exit(1); } xmlFreeDoc(doc); break; #endif case 0: if (q_wrbuf) wrbuf_puts(q_wrbuf, " "); else q_wrbuf = wrbuf_alloc(); wrbuf_puts(q_wrbuf, arg); break; default: usage(prog); } } if (q_wrbuf) { CCL_parser cclp = ccl_parser_create(bibset); int error; struct ccl_rpn_node *rpn; rpn = ccl_parser_find_str(cclp, wrbuf_cstr(q_wrbuf)); error = ccl_parser_get_error(cclp, 0); if (error) { printf("%s\n", ccl_err_msg(error)); } else { if (rpn) { ccl_pr_tree(rpn, stdout); printf("\n"); } } ccl_parser_destroy(cclp); if (rpn) ccl_rpn_delete(rpn); wrbuf_destroy(q_wrbuf); exit(0); } while (1) { char buf[1000]; int i, error; struct ccl_rpn_node *rpn; #if HAVE_READLINE_READLINE_H char* line_in; line_in=readline("CCLSH>"); if (!line_in) break; #if HAVE_READLINE_HISTORY_H if (*line_in) add_history(line_in); #endif if (strlen(line_in) > 999) { fprintf(stderr,"Input line to long\n"); break; } strcpy(buf,line_in); free(line_in); #else printf("CCLSH>"); fflush(stdout); if (!fgets(buf, 999, stdin)) break; #endif for (i = 0; i<1; i++) { CCL_parser cclp = ccl_parser_create(bibset); int pos; rpn = ccl_parser_find_str(cclp, buf); error = ccl_parser_get_error(cclp, &pos); if (error) { printf("%*s^ - ", 6+pos, " "); printf("%s\n", ccl_err_msg(error)); } else { if (rpn && i == 0) { ccl_stop_words_t csw = ccl_stop_words_create(); int idx = 0; printf("First:\n"); ccl_pr_tree(rpn, stdout); if (ccl_stop_words_tree(csw, bibset, &rpn)) { printf("Second:\n"); ccl_pr_tree(rpn, stdout); printf("\n"); for (idx = 0; ; idx++) { const char *qname; const char *term; if (!ccl_stop_words_info(csw, idx, &qname, &term)) break; printf("Removed from %s: %s\n", qname ? qname : "none", term); } } ccl_stop_words_destroy(csw); } } ccl_parser_destroy(cclp); if (rpn) ccl_rpn_delete(rpn); } } printf("\n"); ccl_qual_rm(&bibset); return 0; } /* * Local variables: * c-basic-offset: 4 * c-file-style: "Stroustrup" * indent-tabs-mode: nil * End: * vim: shiftwidth=4 tabstop=8 expandtab */ yaz-4.2.30/util/yaz-icu-example.xml0000644000175000017500000000031111654451754014044 00000000000000 yaz-4.2.30/util/benchmark.c0000644000175000017500000000726711733047144012417 00000000000000/* This file is part of the YAZ toolkit. * Copyright (C) 1995-2012 Index Data * See the file LICENSE for details. */ #if HAVE_CONFIG_H #include #endif #include #include #include #include #include #include struct boptions { int nconnect; /* number of connections to make */ int nsearch; /* number of searches on each connection */ int npresent; /* number of presents for each search */ int full; /* 1 = fetch full records, 0 = brief */ int delay; /* number of ms to delay between ops */ int random; /* if true, delay is random 0-specified */ int verbosity; /* 0 = quiet, higher => more verbose */ } boptions = { 3, 3, 3, 0, 1000, 1, 0, }; static int test(char *host, int port); static void db_printf(int level, char *fmt, ...); static void usage(const char *prog); int main(int argc, char **argv) { char *host = 0; int port = 0; int c; int i; int ok; int nok = 0; char *arg; while ((c = options("c:s:p:fbd:rv:", argv, argc, &arg)) != -2) { switch (c) { case 0: if (!host) host = arg; else if (!port) port = atoi(arg); else usage(*argv); break; case 'c': boptions.nconnect = atoi(arg); break; case 's': boptions.nsearch = atoi(arg); break; case 'p': boptions.npresent = atoi(arg); break; case 'f': boptions.full = 1; break; case 'b': boptions.full = 0; break; case 'd': boptions.delay = atoi(arg); break; case 'r': boptions.random = 1; break; case 'v': boptions.verbosity = atoi(arg); break; default: usage(*argv); } } if (!host || !port) usage(*argv); for (i = 0; i < boptions.nconnect; i++) { db_printf(2, "iteration %d of %d", i+1, boptions.nconnect); ok = test(host, port); if (ok) nok++; } db_printf(1, "passed %d of %d tests", nok, boptions.nconnect); if (nok < boptions.nconnect) printf("Failed %d of %d tests\n", boptions.nconnect-nok, boptions.nconnect); return 0; } static void usage(const char *prog) { fprintf(stderr, "Usage: %s [options] \n" " -c Make connection to the server [default: 3]\n" " -s Perform searches on each connection [3]\n" " -p Make present requests after each search [3]\n" " -f Fetch full records [default: brief]\n" " -b Fetch brief records\n" " -d Delay ms after each operation\n" " -r Delays are random between 0 and the specified number of ms\n" " -v Set verbosity level to [0, silent on success]\n" , prog); exit(1); } static int test(char *host, int port) { ZOOM_connection conn; int error; const char *errmsg, *addinfo; conn = ZOOM_connection_new(host, port); if ((error = ZOOM_connection_error(conn, &errmsg, &addinfo))) { fprintf(stderr, "ZOOM error: %s (%d): %s\n", errmsg, error, addinfo); return 0; } ZOOM_connection_destroy(conn); return 1; } static void db_printf(int level, char *fmt, ...) { va_list ap; if (level > boptions.verbosity) return; fprintf(stderr, "DEBUG(%d): ", level); va_start(ap, fmt); vfprintf(stderr, fmt, ap); fputc('\n', stderr); va_end(ap); } /* * Local variables: * c-basic-offset: 4 * c-file-style: "Stroustrup" * indent-tabs-mode: nil * End: * vim: shiftwidth=4 tabstop=8 expandtab */ yaz-4.2.30/util/marcdump.c0000644000175000017500000003543611733047144012274 00000000000000/* This file is part of the YAZ toolkit. * Copyright (C) 1995-2012 Index Data * See the file LICENSE for details. */ #define _FILE_OFFSET_BITS 64 #if HAVE_CONFIG_H #include #endif #if YAZ_HAVE_XML2 #include #include #include #include /* Libxml2 version < 2.6.15. xmlreader not reliable/present */ #if LIBXML_VERSION < 20615 #define USE_XMLREADER 0 #else #define USE_XMLREADER 1 #endif #if USE_XMLREADER #include #endif #endif #include #include #include #include #include #if HAVE_LOCALE_H #include #endif #if HAVE_LANGINFO_H #include #endif #include #include #include #include #ifndef SEEK_SET #define SEEK_SET 0 #endif #ifndef SEEK_END #define SEEK_END 2 #endif static char *prog; static void usage(const char *prog) { fprintf(stderr, "Usage: %s [-i format] [-o format] [-f from] [-t to] " "[-l pos=value] [-c cfile] [-s prefix] [-C size] [-n] " "[-p] [-v] [-V] file...\n", prog); } static void show_version(void) { char vstr[20], sha1_str[41]; yaz_version(vstr, sha1_str); printf("YAZ version: %s %s\n", YAZ_VERSION, YAZ_VERSION_SHA1); if (strcmp(sha1_str, YAZ_VERSION_SHA1)) printf("YAZ DLL/SO: %s %s\n", vstr, sha1_str); exit(0); } static int getbyte_stream(void *client_data) { FILE *f = (FILE*) client_data; int c = fgetc(f); if (c == EOF) return 0; return c; } static void ungetbyte_stream(int c, void *client_data) { FILE *f = (FILE*) client_data; if (c == 0) c = EOF; ungetc(c, f); } static void marcdump_read_line(yaz_marc_t mt, const char *fname) { FILE *inf = fopen(fname, "rb"); if (!inf) { fprintf(stderr, "%s: cannot open %s:%s\n", prog, fname, strerror(errno)); exit(1); } while (yaz_marc_read_line(mt, getbyte_stream, ungetbyte_stream, inf) == 0) { WRBUF wrbuf = wrbuf_alloc(); yaz_marc_write_mode(mt, wrbuf); fputs(wrbuf_cstr(wrbuf), stdout); wrbuf_destroy(wrbuf); } fclose(inf); } #if YAZ_HAVE_XML2 static void marcdump_read_xml(yaz_marc_t mt, const char *fname) { WRBUF wrbuf = wrbuf_alloc(); #if USE_XMLREADER xmlTextReaderPtr reader = xmlReaderForFile(fname, 0 /* encoding */, 0 /* options */); if (reader) { int ret; while ((ret = xmlTextReaderRead(reader)) == 1) { int type = xmlTextReaderNodeType(reader); if (type == XML_READER_TYPE_ELEMENT) { const char *name = (const char *) xmlTextReaderLocalName(reader); if (!strcmp(name, "record") || !strcmp(name, "r")) { xmlNodePtr ptr = xmlTextReaderExpand(reader); int r = yaz_marc_read_xml(mt, ptr); if (r) fprintf(stderr, "yaz_marc_read_xml failed\n"); else { int write_rc = yaz_marc_write_mode(mt, wrbuf); if (write_rc) yaz_log(YLOG_WARN, "yaz_marc_write_mode: write error: %d", write_rc); fputs(wrbuf_cstr(wrbuf), stdout); wrbuf_rewind(wrbuf); } } } } } #else xmlDocPtr doc = xmlParseFile(fname); if (doc) { xmlNodePtr ptr = xmlDocGetRootElement(doc); for (; ptr; ptr = ptr->next) { if (ptr->type == XML_ELEMENT_NODE) { if (!strcmp((const char *) ptr->name, "collection")) { ptr = ptr->children; continue; } if (!strcmp((const char *) ptr->name, "record") || !strcmp((const char *) ptr->name, "r")) { int r = yaz_marc_read_xml(mt, ptr); if (r) fprintf(stderr, "yaz_marc_read_xml failed\n"); else { yaz_marc_write_mode(mt, wrbuf); fputs(wrbuf_cstr(wrbuf), stdout); wrbuf_rewind(wrbuf); } } } } xmlFreeDoc(doc); } #endif fputs(wrbuf_cstr(wrbuf), stdout); wrbuf_destroy(wrbuf); } #endif static void dump(const char *fname, const char *from, const char *to, int input_format, int output_format, int write_using_libxml2, int print_offset, const char *split_fname, int split_chunk, int verbose, FILE *cfile, const char *leader_spec) { yaz_marc_t mt = yaz_marc_create(); yaz_iconv_t cd = 0; if (yaz_marc_leader_spec(mt, leader_spec)) { fprintf(stderr, "bad leader spec: %s\n", leader_spec); yaz_marc_destroy(mt); exit(2); } if (from && to) { cd = yaz_iconv_open(to, from); if (!cd) { fprintf(stderr, "conversion from %s to %s " "unsupported\n", from, to); yaz_marc_destroy(mt); exit(2); } yaz_marc_iconv(mt, cd); } yaz_marc_enable_collection(mt); yaz_marc_xml(mt, output_format); yaz_marc_write_using_libxml2(mt, write_using_libxml2); yaz_marc_debug(mt, verbose); if (input_format == YAZ_MARC_MARCXML || input_format == YAZ_MARC_TURBOMARC || input_format == YAZ_MARC_XCHANGE) { #if YAZ_HAVE_XML2 marcdump_read_xml(mt, fname); #endif } else if (input_format == YAZ_MARC_LINE) { marcdump_read_line(mt, fname); } else if (input_format == YAZ_MARC_ISO2709) { FILE *inf = fopen(fname, "rb"); int num = 1; int marc_no = 0; int split_file_no = -1; if (!inf) { fprintf(stderr, "%s: cannot open %s:%s\n", prog, fname, strerror(errno)); exit(1); } if (cfile) fprintf(cfile, "char *marc_records[] = {\n"); for(;; marc_no++) { const char *result = 0; size_t len; size_t rlen; size_t len_result; size_t r; char buf[100001]; r = fread(buf, 1, 5, inf); if (r < 5) { if (r && print_offset && verbose) printf("\n", (long) r); break; } while (*buf < '0' || *buf > '9') { int i; long off = ftell(inf) - 5; if (verbose || print_offset) printf("\n", *buf & 0xff, *buf & 0xff, off, off); for (i = 0; i<4; i++) buf[i] = buf[i+1]; r = fread(buf+4, 1, 1, inf); if (r < 1) break; } if (r < 1) { if (verbose || print_offset) printf("\n"); break; } if (print_offset) { long off = ftell(inf) - 5; printf("\n", num, off, off); } len = atoi_n(buf, 5); if (len < 25 || len > 100000) { long off = ftell(inf) - 5; printf("Bad Length %ld read at offset %ld (%lx)\n", (long)len, (long) off, (long) off); break; } rlen = len - 5; r = fread(buf + 5, 1, rlen, inf); if (r < rlen) break; while (buf[len-1] != ISO2709_RS) { if (len > sizeof(buf)-2) break; r = fread(buf + len, 1, 1, inf); if (r != 1) break; len++; } if (split_fname) { char fname[256]; const char *mode = 0; FILE *sf; if ((marc_no % split_chunk) == 0) { mode = "wb"; split_file_no++; } else mode = "ab"; sprintf(fname, "%.200s%07d", split_fname, split_file_no); sf = fopen(fname, mode); if (!sf) { fprintf(stderr, "Could not open %s\n", fname); split_fname = 0; } else { if (fwrite(buf, 1, len, sf) != len) { fprintf(stderr, "Could write content to %s\n", fname); split_fname = 0; } fclose(sf); } } len_result = rlen; r = yaz_marc_decode_buf(mt, buf, -1, &result, &len_result); if (r > 0 && result && len_result) { if (fwrite(result, len_result, 1, stdout) != 1) { fprintf(stderr, "Write to stdout failed\n"); break; } } if (r > 0 && cfile) { char *p = buf; size_t i; if (marc_no) fprintf(cfile, ","); fprintf(cfile, "\n"); for (i = 0; i < r; i++) { if ((i & 15) == 0) fprintf(cfile, " \""); fprintf(cfile, "\\x%02X", p[i] & 255); if (i < r - 1 && (i & 15) == 15) fprintf(cfile, "\"\n"); } fprintf(cfile, "\"\n"); } num++; if (verbose) printf("\n"); } if (cfile) fprintf(cfile, "};\n"); fclose(inf); } { WRBUF wrbuf = wrbuf_alloc(); yaz_marc_write_trailer(mt, wrbuf); fputs(wrbuf_cstr(wrbuf), stdout); wrbuf_destroy(wrbuf); } if (cd) yaz_iconv_close(cd); yaz_marc_destroy(mt); } int main (int argc, char **argv) { int r; int print_offset = 0; char *arg; int verbose = 0; int no = 0; int output_format = YAZ_MARC_LINE; FILE *cfile = 0; char *from = 0, *to = 0; int input_format = YAZ_MARC_ISO2709; int split_chunk = 1; const char *split_fname = 0; const char *leader_spec = 0; int write_using_libxml2 = 0; #if HAVE_LOCALE_H setlocale(LC_CTYPE, ""); #endif #if HAVE_LANGINFO_H #ifdef CODESET to = nl_langinfo(CODESET); #endif #endif prog = *argv; while ((r = options("i:o:C:npc:xOeXIf:t:s:l:Vv", argv, argc, &arg)) != -2) { no++; switch (r) { case 'i': input_format = yaz_marc_decode_formatstr(arg); if (input_format == -1) { fprintf(stderr, "%s: bad input format: %s\n", prog, arg); exit(1); } #if YAZ_HAVE_XML2 #else if (input_format == YAZ_MARC_MARCXML || input_format == YAZ_MARC_XCHANGE) { fprintf(stderr, "%s: Libxml2 support not enabled\n", prog); exit(3); } #endif break; case 'o': /* dirty hack so we can make Libxml2 do the writing .. rather than WRBUF */ if (strlen(arg) > 4 && strncmp(arg, "xml,", 4) == 0) { /* Only supported for Libxml2 2.6.0 or later */ #if LIBXML_VERSION >= 20600 arg = arg + 4; write_using_libxml2 = 1; #else fprintf(stderr, "%s: output using Libxml2 unsupported\n", prog); exit(4); #endif } output_format = yaz_marc_decode_formatstr(arg); if (output_format == -1) { fprintf(stderr, "%s: bad output format: %s\n", prog, arg); exit(1); } break; case 'l': leader_spec = arg; break; case 'f': from = arg; break; case 't': to = arg; break; case 'c': if (cfile) fclose(cfile); cfile = fopen(arg, "w"); break; case 'x': fprintf(stderr, "%s: -x no longer supported. " "Use -i marcxml instead\n", prog); exit(1); break; case 'O': fprintf(stderr, "%s: OAI MARC no longer supported." " Use MARCXML instead.\n", prog); exit(1); break; case 'e': fprintf(stderr, "%s: -e no longer supported. " "Use -o marcxchange instead\n", prog); exit(1); break; case 'X': fprintf(stderr, "%s: -X no longer supported. " "Use -o marcxml instead\n", prog); exit(1); break; case 'I': fprintf(stderr, "%s: -I no longer supported. " "Use -o marc instead\n", prog); exit(1); break; case 'n': output_format = YAZ_MARC_CHECK; break; case 'p': print_offset = 1; break; case 's': split_fname = arg; break; case 'C': split_chunk = atoi(arg); break; case 0: dump(arg, from, to, input_format, output_format, write_using_libxml2, print_offset, split_fname, split_chunk, verbose, cfile, leader_spec); break; case 'v': verbose++; break; case 'V': show_version(); break; default: usage(prog); exit(1); } } if (cfile) fclose(cfile); if (!no) { usage(prog); exit(1); } exit(0); } /* * Local variables: * c-basic-offset: 4 * c-file-style: "Stroustrup" * indent-tabs-mode: nil * End: * vim: shiftwidth=4 tabstop=8 expandtab */ yaz-4.2.30/util/yaz-asncomp0000755000175000017500000011500011733047144012471 00000000000000#!/usr/bin/tclsh # # yaz-comp: ASN.1 Compiler for YAZ # (c) Index Data 1996-2012 # See the file LICENSE for details. # set yc_version 0.4 # Syntax for the ASN.1 supported: # file -> file module # | module # module -> name skip DEFINITIONS ::= mbody END # mbody -> EXPORTS { nlist } # | IMPORTS { imlist } # | name ::= tmt # | skip # tmt -> tag mod type # type -> SEQUENCE { sqlist } # | SEQUENCE OF type # | CHOICE { chlist } # | basic enlist # # basic -> INTEGER # | BOOLEAN # | OCTET STRING # | BIT STRING # | EXTERNAL # | name # sqlist -> sqlist , name tmt opt # | name tmt opt # chlist -> chlist , name tmt # | name tmt # enlist -> enlist , name (n) # | name (n) # imlist -> nlist FROM name # imlist nlist FROM name # nlist -> name # | nlist , name # mod -> IMPLICIT | EXPLICIT | e # tag -> [tagtype n] | [n] | e # opt -> OPTIONAL | e # # name identifier/token # e epsilon/empty # skip one token skipped # n number # tagtype APPLICATION, CONTEXT, etc. # lex: moves input file pointer and returns type of token. # The globals $type and $val are set. $val holds name if token # is normal identifier name. # sets global var type to one of: # {} eof-of-file # \{ left curly brace # \} right curly brace # , comma # ; semicolon # ( (n) # [ [n] # : ::= # n other token n proc lex {} { global inf val type while {![string length $inf(str)]} { incr inf(lineno) set inf(cnt) [gets $inf(inf) inf(str)] if {$inf(cnt) < 0} { set type {} return {} } lappend inf(asn,$inf(asndef)) $inf(str) set l [string first -- $inf(str)] if {$l >= 0} { incr l -1 set inf(str) [string range $inf(str) 0 $l] } set inf(str) [string trim $inf(str)] } set s [string index $inf(str) 0] set type $s set val {} switch -- $s { \{ { } \} { } , { } ; { } \( { } \) { } \[ { regexp {^\[[ ]*(.+)[ ]*\]} $inf(str) s val } : { regexp {^::=} $inf(str) s } default { regexp "^\[^,\t :\{\}();\]+" $inf(str) s set type n set val $s } } set off [string length $s] set inf(str) [string trim [string range $inf(str) $off end]] return $type } # lex-expect: move pointer and expect token $t proc lex-expect {t} { global type val lex if {[string compare $t $type]} { asnError "Got $type '$val', expected $t" } } # lex-name-move: see if token is $name; moves pointer and returns # 1 if it is; returns 0 otherwise. proc lex-name-move {name} { global type val if {![string compare $type n] && ![string compare $val $name]} { lex return 1 } return 0 } # asnError: Report error and die proc asnError {msg} { global inf puts "Error in line $inf(lineno) in module $inf(module)" puts " $msg" error exit 1 } # asnWarning: Report warning and return proc asnWarning {msg} { global inf puts "Warning in line $inf(lineno) in module $inf(module)" puts " $msg" } # asnEnum: parses enumerated list - { name1 (n), name2 (n), ... } # Uses $name as prefix. If there really is a list, $lx holds the C # preprocessor definitions on return; otherwise lx isn't set. proc asnEnum {name lx} { global type val inf if {[string compare $type \{]} return upvar $lx l while {1} { set pq [asnName $name] set id [lindex $pq 0] set id ${name}_$id lex-expect n lappend l "#define $inf(dprefix)$id $val" lex-expect ")" lex if {[string compare $type ,]} break } if {[string compare $type \}]} { asnError "Missing \} in enum list got $type '$val'" } lex } # asnMod: parses tag and modifier. # $xtag and $ximplicit holds tag and implicit-indication on return. # $xtag is empty if no tag was specified. $ximplicit is 1 on implicit # tagging; 0 otherwise. proc asnMod {xtag ximplicit xtagtype} { global type val inf upvar $xtag tag upvar $ximplicit implicit upvar $xtagtype tagtype set tag {} set tagtype {} if {![string compare $type \[]} { if {[regexp {^([a-zA-Z]+)[ ]+([0-9]+)$} $val x tagtype tag]} { set tagtype ODR_$tagtype } elseif {[regexp {^([0-9]+)$} $val x tag]} { set tagtype ODR_CONTEXT } else { asnError "bad tag specification: $val" } lex } set implicit $inf(implicit-tags) if {![string compare $type n]} { if {![string compare $val EXPLICIT]} { lex set implicit 0 } elseif {![string compare $val IMPLICIT]} { lex set implicit 1 } } } # asnName: moves pointer and expects name. Returns C-validated name. proc asnName {name} { global val inf lex-expect n if {[info exists inf(membermap,$inf(module),$name,$val)]} { set nval $inf(membermap,$inf(module),$name,$val) if {$inf(verbose)} { puts " mapping member $name,$val to $nval" } if {![string match {[A-Z]*} $val]} { lex } } else { set nval $val if {![string match {[A-Z]*} $val]} { lex } } return [join [split $nval -] _] } # asnOptional: parses optional modifier. Returns 1 if OPTIONAL was # specified; 0 otherwise. proc asnOptional {} { global type val if {[lex-name-move OPTIONAL]} { return 1 } elseif {[lex-name-move DEFAULT]} { lex return 0 } return 0 } # asnSizeConstraint: parses the optional SizeConstraint. # Currently not used for anything. proc asnSizeConstraint {} { global type val if {[lex-name-move SIZE]} { asnSubtypeSpec } } # asnSubtypeSpec: parses the SubtypeSpec ... # Currently not used for anything. We now it's balanced however, i.e. # (... ( ... ) .. ) proc asnSubtypeSpec {} { global type val if {[string compare $type "("]} { return } lex set level 1 while {$level > 0} { if {![string compare $type "("]} { incr level } elseif {![string compare $type ")"]} { incr level -1 } lex } } # asnType: parses ASN.1 type. # On entry $name should hold the name we are currently defining. # Returns type indicator: # SequenceOf SEQUENCE OF # Sequence SEQUENCE # SetOf SET OF # Set SET # Choice CHOICE # Simple Basic types. # In this casecalling procedure's $tname variable is a list holding: # {C-Function C-Type} if the type is IMPORTed or ODR defined. # or # {C-Function C-Type 1} if the type should be defined in this module proc asnType {name} { global type val inf upvar tname tname set tname {} if {[string compare $type n]} { asnError "Expects type specifier, but got $type" } set v $val lex switch -- $v { SEQUENCE { asnSizeConstraint if {[lex-name-move OF]} { asnSubtypeSpec return SequenceOf } else { asnSubtypeSpec return Sequence } } SET { asnSizeConstraint if {[lex-name-move OF]} { asnSubtypeSpec return SetOf } else { asnSubtypeSpec return Set } } CHOICE { asnSubtypeSpec return Choice } } if {[string length [info commands asnBasic$v]]} { set tname [asnBasic$v] } else { if {[info exists inf(map,$inf(module),$v)]} { set v $inf(map,$inf(module),$v) } if {[info exists inf(imports,$v)]} { set tname $inf(imports,$v) } else { set w [join [split $v -] _] set tname [list $inf(fprefix)$w $inf(vprefix)$w 1] } } if {[lex-name-move DEFINED]} { if {[lex-name-move BY]} { lex } } asnSubtypeSpec return Simple } proc mapName {name} { global inf if {[info exists inf(map,$inf(module),$name)]} { set name $inf(map,$inf(module),$name) if {$inf(verbose)} { puts -nonewline " $name ($inf(lineno))" puts " mapping to $name" } } else { if {$inf(verbose)} { puts " $name ($inf(lineno))" } } return $name } # asnDef: parses type definition (top-level) and generates C code # On entry $name holds the type we are defining. proc asnDef {name} { global inf file set name [mapName $name] if {[info exist inf(defined,$inf(fprefix)$name)]} { incr inf(definedl,$name) if {$inf(verbose) > 1} { puts "set map($inf(module),$name) $name$inf(definedl,$name)" } } else { set inf(definedl,$name) 0 } set mname [join [split $name -] _] asnMod tag implicit tagtype set t [asnType $mname] asnSub $mname $t $tname $tag $implicit $tagtype } # asnSub: parses type and generates C-code # On entry, # $name holds the type we are defining. # $t is the type returned by the asnType procedure. # $tname is the $tname set by the asnType procedure. # $tag is the tag as returned by asnMod # $implicit is the implicit indicator as returned by asnMod proc asnSub {name t tname tag implicit tagtype} { global file inf set ignore 0 set defname defined,$inf(fprefix)$name if {[info exist inf($defname)]} { asnWarning "$name already defined in line $inf($defname)" set ignore 1 } set inf($defname) $inf(lineno) switch -- $t { Sequence { set l [asnSequence $name $tag $implicit $tagtype] } SequenceOf { set l [asnOf $name $tag $implicit $tagtype 0] } SetOf { set l [asnOf $name $tag $implicit $tagtype 1] } Choice { set l [asnChoice $name $tag $implicit $tagtype] } Simple { set l [asnSimple $name $tname $tag $implicit $tagtype] } default { asnError "switch asnType case not handled" } } if {$ignore} return puts $file(outc) {} puts $file(outc) "int $inf(fprefix)${name}(ODR o, $inf(vprefix)$name **p, int opt, const char *name)" puts $file(outc) \{ puts $file(outc) [lindex $l 0] puts $file(outc) \} set ok 1 set fdef "$inf(cprefix)int $inf(fprefix)${name}(ODR o, $inf(vprefix)$name **p, int opt, const char *name);" switch -- $t { Simple { set decl "typedef [lindex $l 1] $inf(vprefix)$name;" if {![string compare [lindex $tname 2] 1]} { if {![info exist inf(defined,[lindex $tname 0])]} { set ok 0 } } set inf(var,$inf(nodef)) [join [lindex $l 2] \n] incr inf(nodef) } default { set decl "typedef struct $inf(vprefix)$name $inf(vprefix)$name;" set inf(var,$inf(nodef)) "[lindex $l 1];" incr inf(nodef) } } if {$ok} { puts $file(outh) {} puts $file(outh) $decl puts $file(outh) $fdef asnForwardTypes $name } else { lappend inf(forward,code,[lindex $tname 0]) {} $decl $fdef lappend inf(forward,ref,[lindex $tname 0]) $name } } proc asnForwardTypes {name} { global inf file if {![info exists inf(forward,code,$inf(fprefix)$name)]} { return 0 } foreach r $inf(forward,code,$inf(fprefix)$name) { puts $file(outh) $r } unset inf(forward,code,$inf(fprefix)$name) while {[info exists inf(forward,ref,$inf(fprefix)$name)]} { set n $inf(forward,ref,$inf(fprefix)$name) set m [lrange $n 1 end] if {[llength $m]} { set inf(forward,ref,$inf(fprefix)$name) $m } else { unset inf(forward,ref,$inf(fprefix)$name) } asnForwardTypes [lindex $n 0] } } # asnSimple: parses simple type definition and generates C code # On entry, # $name is the name we are defining # $tname is the tname as returned by asnType # $tag is the tag as returned by asnMod # $implicit is the implicit indicator as returned by asnMod # Returns, # {c-code, h-code} # Note: Doesn't take care of enum lists yet. proc asnSimple {name tname tag implicit tagtype} { global inf set j "[lindex $tname 1] " if {[info exists inf(unionmap,$inf(module),$name)]} { set uName $inf(unionmap,$inf(module),$name) } else { set uName $name } asnEnum $uName jj if {![string length $tag]} { set l "\treturn [lindex $tname 0] (o, p, opt, name);" } elseif {$implicit} { set l \ "\treturn odr_implicit_tag(o, [lindex $tname 0], p, $tagtype, $tag, opt, name);" } else { set l \ "\treturn odr_explicit_tag(o, [lindex $tname 0], p, $tagtype, $tag, opt, name);" \ } if {[info exists jj]} { return [list $l $j $jj] } else { return [list $l $j] } } # asnSequence: parses "SEQUENCE { s-list }" and generates C code. # On entry, # $name is the type we are defining # $tag tag # $implicit # Returns, # {c-code, h-code} proc asnSequence {name tag implicit tagtype} { global val type inf lappend j "struct $inf(vprefix)$name \{" set level 0 set nchoice 0 if {![string length $tag]} { lappend l "\tif (!odr_sequence_begin(o, p, sizeof(**p), name))" lappend l "\t\treturn odr_missing(o, opt, name) && odr_ok (o);" } elseif {$implicit} { lappend l "\tif (!odr_implicit_settag(o, $tagtype, $tag) ||" lappend l "\t\t!odr_sequence_begin (o, p, sizeof(**p), name))" lappend l "\t\treturn odr_missing(o, opt, name);" } else { lappend l "\tif (!odr_constructed_begin(o, p, $tagtype, $tag, name))" lappend l "\t\treturn odr_missing(o, opt, name);" lappend l "\tif (o->direction == ODR_DECODE)" lappend l "\t\t*p = ($inf(vprefix)$name *) odr_malloc(o, sizeof(**p));" lappend l "\tif (!odr_sequence_begin(o, p, sizeof(**p), 0))" lappend l "\t\{" lappend l "\t\tif (o->direction == ODR_DECODE)" lappend l "\t\t\t*p = 0;" lappend l "\t\treturn 0;" lappend l "\t\}" } lappend l "\treturn" while {1} { set p [lindex [asnName $name] 0] asnMod ltag limplicit ltagtype set t [asnType $p] set uName { } if {[info exists inf(unionmap,$inf(module),$name,$p)]} { set uName $inf(unionmap,$inf(module),$name,$p) } if {![string compare $t Simple]} { if {[string compare $uName { }]} { set enumName $uName } else { set enumName $name } asnEnum $enumName j set opt [asnOptional] if {![string length $ltag]} { lappend l "\t\t[lindex $tname 0](o, &(*p)->$p, $opt, \"$p\") &&" } elseif {$limplicit} { lappend l "\t\todr_implicit_tag(o, [lindex $tname 0]," lappend l "\t\t\t&(*p)->$p, $ltagtype, $ltag, $opt, \"$p\") &&" } else { lappend l "\t\todr_explicit_tag(o, [lindex $tname 0]," lappend l "\t\t\t&(*p)->$p, $ltagtype, $ltag, $opt, \"$p\") &&" } set dec "\t[lindex $tname 1] *$p;" } elseif {![string compare $t SequenceOf] && [string length $uName] &&\ (![string length $ltag] || $limplicit)} { set u [asnType $p] if {[llength $uName] < 2} { set uName [list num_$p $p] } if {[string length $ltag]} { if {!$limplicit} { asnError explicittag } lappend l "\t\todr_implicit_settag(o, $ltagtype, $ltag) &&" } switch -- $u { Simple { asnEnum $name j set tmpa "odr_sequence_of(o, (Odr_fun) [lindex $tname 0], &(*p)->$p," set tmpb "&(*p)->[lindex $uName 0], \"$p\")" lappend j "\tint [lindex $uName 0];" set dec "\t[lindex $tname 1] **[lindex $uName 1];" } default { set subName [mapName ${name}_$level] asnSub $subName $u {} {} 0 {} set tmpa "odr_sequence_of(o, (Odr_fun) $inf(fprefix)$subName, &(*p)->$p," set tmpb "&(*p)->[lindex $uName 0], \"$p\")" lappend j "\tint [lindex $uName 0];" set dec "\t$inf(vprefix)$subName **[lindex $uName 1];" incr level } } set opt [asnOptional] if {$opt} { lappend l "\t\t($tmpa" lappend l "\t\t $tmpb || odr_ok(o)) &&" } else { lappend l "\t\t$tmpa" lappend l "\t\t $tmpb &&" } } elseif {!$nchoice && ![string compare $t Choice] && \ [string length $uName]} { if {[llength $uName] < 3} { set uName [list which u $name] incr nchoice } lappend j "\tint [lindex $uName 0];" lappend j "\tunion \{" lappend v "\tstatic Odr_arm arm\[\] = \{" asnArm $name [lindex $uName 2] v j lappend v "\t\};" set dec "\t\} [lindex $uName 1];" set opt [asnOptional] set oa {} set ob {} if {[string length $ltag]} { if {$limplicit} { lappend l "\t\todr_implicit_settag(o, $ltagtype, $ltag) &&" if {$opt} { asnWarning "optional handling missing in CHOICE in SEQUENCE" asnWarning " set unionmap($inf(module),$name,$p) to {}" } } else { if {$opt} { set la "((" } else { set la "" } lappend l "\t\t${la}odr_constructed_begin(o, &(*p)->[lindex $uName 1], $ltagtype, $ltag, \"$p\") &&" } } else { if {$opt} { set oa "(" set ob " || odr_ok(o))" } } lappend l "\t\t${oa}odr_choice(o, arm, &(*p)->[lindex $uName 1], &(*p)->[lindex $uName 0], 0)${ob} &&" if {[string length $ltag]} { if {!$limplicit} { if {$opt} { set lb ") || odr_ok(o))" } else { set lb "" } lappend l "\t\todr_constructed_end(o)${lb} &&" } } } else { set subName [mapName ${name}_$level] asnSub $subName $t {} {} 0 {} set opt [asnOptional] if {![string length $ltag]} { lappend l "\t\t$inf(fprefix)${subName}(o, &(*p)->$p, $opt, \"$p\") &&" } elseif {$limplicit} { lappend l "\t\todr_implicit_tag(o, $inf(fprefix)${subName}," lappend l "\t\t\t&(*p)->$p, $ltagtype, $ltag, $opt, \"$p\") &&" } else { lappend l "\t\todr_explicit_tag(o, $inf(fprefix)${subName}," lappend l "\t\t\t&(*p)->$p, $ltagtype, $ltag, $opt, \"$p\") &&" } set dec "\t$inf(vprefix)${subName} *$p;" incr level } if {$opt} { lappend j "$dec /* OPT */" } else { lappend j $dec } if {[string compare $type ,]} break } lappend j "\}" if {[string length $tag] && !$implicit} { lappend l "\t\todr_sequence_end(o) &&" lappend l "\t\todr_constructed_end(o);" } else { lappend l "\t\todr_sequence_end(o);" } if {[string compare $type \}]} { asnError "Missing \} got $type '$val'" } lex if {[info exists v]} { set l [concat $v $l] } return [list [join $l \n] [join $j \n]] } # asnOf: parses "SEQUENCE/SET OF type" and generates C code. # On entry, # $name is the type we are defining # $tag tag # $implicit # Returns, # {c-code, h-code} proc asnOf {name tag implicit tagtype isset} { global inf if {$isset} { set func odr_set_of } else { set func odr_sequence_of } if {[info exists inf(unionmap,$inf(module),$name)]} { set numName $inf(unionmap,$inf(module),$name) } else { set numName {num elements} } lappend j "struct $inf(vprefix)$name \{" lappend j "\tint [lindex $numName 0];" lappend l "\tif (!odr_initmember(o, p, sizeof(**p)))" lappend l "\t\treturn odr_missing(o, opt, name);" if {[string length $tag]} { if {$implicit} { lappend l "\todr_implicit_settag(o, $tagtype, $tag);" } else { asnWarning "Constructed SEQUENCE/SET OF not handled" } } set t [asnType $name] switch -- $t { Simple { asnEnum $name j lappend l "\tif (${func}(o, (Odr_fun) [lindex $tname 0], &(*p)->[lindex $numName 1]," lappend l "\t\t&(*p)->[lindex $numName 0], name))" lappend j "\t[lindex $tname 1] **[lindex $numName 1];" } default { set subName [mapName ${name}_s] lappend l "\tif (${func}(o, (Odr_fun) $inf(fprefix)$subName, &(*p)->[lindex $numName 1]," lappend l "\t\t&(*p)->[lindex $numName 0], name))" lappend j "\t$inf(vprefix)$subName **[lindex $numName 1];" asnSub $subName $t {} {} 0 {} } } lappend j "\}" lappend l "\t\treturn 1;" lappend l "\tif (o->direction == ODR_DECODE)" lappend l "\t\t*p = 0;" lappend l "\treturn odr_missing(o, opt, name);" return [list [join $l \n] [join $j \n]] } # asnArm: parses c-list in choice proc asnArm {name defname lx jx} { global type val inf upvar $lx l upvar $jx j while {1} { set pq [asnName $name] set p [lindex $pq 0] set q [lindex $pq 1] if {![string length $q]} { set q $p set p ${defname}_$p } asnMod ltag limplicit ltagtype set t [asnType $q] lappend enums "$inf(dprefix)$p" if {![string compare $t Simple]} { asnEnum $name j if {![string length $ltag]} { lappend l "\t\t\{-1, -1, -1, $inf(dprefix)$p," lappend l "\t\t (Odr_fun) [lindex $tname 0], \"$q\"\}," } elseif {$limplicit} { lappend l "\t\t\{ODR_IMPLICIT, $ltagtype, $ltag, $inf(dprefix)$p," lappend l "\t\t(Odr_fun) [lindex $tname 0], \"$q\"\}," } else { lappend l "\t\t\{ODR_EXPLICIT, $ltagtype, $ltag, $inf(dprefix)$p," lappend l "\t\t(Odr_fun) [lindex $tname 0], \"$q\"\}," } lappend j "\t\t[lindex $tname 1] *$q;" } else { set subName [mapName ${name}_$q] if {![string compare $inf(dprefix)${name}_$q \ $inf(vprefix)$subName]} { set po [string toupper [string index $q 0]][string \ range $q 1 end] set subName [mapName ${name}${po}] } asnSub $subName $t $tname {} 0 {} if {![string length $ltag]} { lappend l "\t\t\{-1, -1, -1, $inf(dprefix)$p," lappend l "\t\t (Odr_fun) $inf(fprefix)$subName, \"$q\"\}," } elseif {$limplicit} { lappend l "\t\t\{ODR_IMPLICIT, $ltagtype, $ltag, $inf(dprefix)$p," lappend l "\t\t(Odr_fun) $inf(fprefix)$subName, \"$q\"\}," } else { lappend l "\t\t\{ODR_EXPLICIT, $ltagtype, $ltag, $inf(dprefix)$p," lappend l "\t\t(Odr_fun) $inf(fprefix)$subName, \"$q\"\}," } lappend j "\t\t$inf(vprefix)$subName *$q;" } if {[string compare $type ,]} break } if {[string compare $type \}]} { asnError "Missing \} got $type '$val'" } lex set level 1 foreach e $enums { lappend j "#define $e $level" incr level } lappend l "\t\t\{-1, -1, -1, -1, (Odr_fun) 0, 0\}" } # asnChoice: parses "CHOICE {c-list}" and generates C code. # On entry, # $name is the type we are defining # $tag tag # $implicit # Returns, # {c-code, h-code} proc asnChoice {name tag implicit tagtype} { global type val inf if {[info exists inf(unionmap,$inf(module),$name)]} { set uName $inf(unionmap,$inf(module),$name) } else { set uName [list which u $name] } lappend j "struct $inf(vprefix)$name \{" lappend j "\tint [lindex $uName 0];" lappend j "\tunion \{" lappend l "\tstatic Odr_arm arm\[\] = \{" asnArm $name [lindex $uName 2] l j lappend j "\t\} [lindex $uName 1];" lappend j "\}" lappend l "\t\};" if {![string length $tag]} { lappend l "\tif (!odr_initmember(o, p, sizeof(**p)))" lappend l "\t\treturn odr_missing(o, opt, name);" lappend l "\tif (odr_choice(o, arm, &(*p)->[lindex $uName 1], &(*p)->[lindex $uName 0], name))" } elseif {$implicit} { lappend l "\tif (!odr_initmember(o, p, sizeof(**p)))" lappend l "\t\treturn odr_missing(o, opt, name);" lappend l "\todr_implicit_settag(o, $tagtype, $tag);" lappend l "\tif (odr_choice(o, arm, &(*p)->[lindex $uName 1], &(*p)->[lindex $uName 0], name))" } else { lappend l "\tif (!odr_constructed_begin(o, p, $tagtype, $tag, 0))" lappend l "\t\treturn odr_missing(o, opt, name);" lappend l "\tif (!odr_initmember(o, p, sizeof(**p)))" lappend l "\t\treturn odr_missing(o, opt, name);" lappend l "\tif (odr_choice(o, arm, &(*p)->[lindex $uName 1], &(*p)->[lindex $uName 0], name) &&" lappend l "\t\todr_constructed_end(o))" } lappend l "\t\treturn 1;" lappend l "\tif (o->direction == ODR_DECODE)" lappend l "\t\t*p = 0;" lappend l "\treturn odr_missing(o, opt, name);" return [list [join $l \n] [join $j \n]] } # asnImports: parses i-list in "IMPORTS {i-list}" # On return inf(import,..)-array is updated. # inf(import,"module") is a list of {C-handler, C-type} elements. # The {C-handler, C-type} is compatible with the $tname as is used by the # asnType procedure to solve external references. proc asnImports {} { global type val inf file while {1} { if {[string compare $type n]} { asnError "Missing name in IMPORTS list" } lappend nam $val lex if {![string compare $type n] && ![string compare $val FROM]} { lex if {[info exists inf(filename,$val)]} { set fname $inf(filename,$val) } else { set fname $val } puts $file(outh) "\#include <$inf(h-dir)${fname}.h>" if {[info exists inf(prefix,$val)]} { set prefix $inf(prefix,$val) } else { set prefix $inf(prefix) } foreach n $nam { if {[info exists inf(map,$val,$n)]} { set v $inf(map,$val,$n) } else { set v $n } set w [join [split $v -] _] set inf(imports,$n) [list [lindex $prefix 0]$w \ [lindex $prefix 1]$w] } unset nam lex if {[string compare $type n]} break } elseif {![string compare $type ,]} { lex } else break } if {[string compare $type \;]} { asnError "Missing ; after IMPORTS list - got $type '$val'" } lex } # asnExports: parses e-list in "EXPORTS {e-list}" # This function does nothing with elements in the list. proc asnExports {} { global type val inf while {1} { if {[string compare $type n]} { asnError "Missing name in EXPORTS list" } set inf(exports,$val) 1 lex if {[string compare $type ,]} break lex } if {[string compare $type \;]} { asnError "Missing ; after EXPORTS list - got $type ($val)" } lex } # asnModuleBody: parses a module specification and generates C code. # Exports lists, imports lists, and type definitions are handled; # other things are silently ignored. proc asnModuleBody {} { global type val file inf if {[info exists inf(prefix,$inf(module))]} { set prefix $inf(prefix,$inf(module)) } else { set prefix $inf(prefix) } set inf(fprefix) [lindex $prefix 0] set inf(vprefix) [lindex $prefix 1] set inf(dprefix) [lindex $prefix 2] if {[llength $prefix] > 3} { set inf(cprefix) [lindex $prefix 3] } else { set inf(cprefix) {YAZ_EXPORT } } if {$inf(verbose)} { puts "Module $inf(module), $inf(lineno)" } set defblock 0 if {[info exists inf(init,$inf(module),c)]} { puts $file(outc) $inf(init,$inf(module),c) } if {[info exists inf(init,$inf(module),h)]} { puts $file(outh) "\#ifdef __cplusplus" puts $file(outh) "extern \"C\" \{" puts $file(outh) "\#endif" set defblock 1 puts $file(outh) $inf(init,$inf(module),h) } if {[info exists inf(init,$inf(module),p)]} { puts $file(outp) $inf(init,$inf(module),p) } while {[string length $type]} { if {[string compare $type n]} { lex continue } if {![string compare $val END]} { break } elseif {![string compare $val EXPORTS]} { lex asnExports } elseif {![string compare $val IMPORTS]} { if {$defblock} { puts $file(outh) "\#ifdef __cplusplus" puts $file(outh) "\}" puts $file(outh) "\#endif" set defblock 0 } lex asnImports } else { if {!$defblock} { puts $file(outh) "\#ifdef __cplusplus" puts $file(outh) "extern \"C\" \{" puts $file(outh) "\#endif" set defblock 1 } set inf(asndef) $inf(nodef) set oval $val lex if {![string compare $type :]} { lex asnDef $oval set inf(asndef) 0 } elseif {![string compare $type n]} { lex if {[string length $type]} { lex } } } } if {$defblock} { puts $file(outh) "\#ifdef __cplusplus" puts $file(outh) "\}" puts $file(outh) "\#endif" set defblock 0 } foreach x [array names inf imports,*] { unset inf($x) } } # asnTagDefault: parses TagDefault section proc asnTagDefault {} { global type val inf file set inf(implicit-tags) 0 while {[string length $type]} { if {[lex-name-move EXPLICIT]} { lex set inf(implicit-tags) 0 } elseif {[lex-name-move IMPLICIT]} { lex set inf(implicit-tags) 1 } else { break } } } # asnModules: parses a collection of module specifications. # Depending on the module pattern, $inf(moduleP), a module is either # skipped or processed. proc asnModules {} { global type val inf file yc_version set inf(nodef) 0 set inf(asndef) 0 lex while {![string compare $type n]} { set inf(module) $val if {[info exists inf(moduleP)] && ![string match $inf(moduleP) $val]} { if {$inf(verbose)} { puts "Skipping $id" } while {![lex-name-move END]} { lex } } else { set inf(nodef) 1 set inf(asndef) 1 while {![lex-name-move DEFINITIONS]} { lex if {![string length $type]} return } if {[info exists inf(filename,$inf(module))]} { set fname $inf(filename,$inf(module)) } else { set fname $inf(module) } set ppname [join [split $fname -] _] if {![info exists inf(c-file)]} { set inf(c-file) ${fname}.c } set file(outc) [open $inf(c-file) w] if {![info exists inf(h-file)]} { set inf(h-file) ${fname}.h } set file(outh) [open $inf(h-path)/$inf(h-dir)$inf(h-file) w] if {0} { if {![info exists inf(p-file)]} { set inf(p-file) ${fname}-p.h } set file(outp) [open $inf(h-path)/$inf(h-dir)$inf(p-file) w] } set greeting {Generated automatically by YAZ ASN.1 Compiler} puts $file(outc) "/** \\file $inf(c-file)" puts $file(outc) " \\brief ASN.1 Module $inf(module)" puts $file(outc) "" puts $file(outc) " ${greeting} ${yc_version}" puts $file(outc) "*/" puts $file(outc) "\#if HAVE_CONFIG_H" puts $file(outc) "\#include " puts $file(outc) "\#endif" puts $file(outc) {} puts $file(outh) "/** \\file $inf(h-file)" puts $file(outh) " \\brief ASN.1 Module $inf(module)" puts $file(outh) "" puts $file(outh) " ${greeting} ${yc_version}" puts $file(outh) "*/" puts $file(outh) {} if {[info exists file(outp)]} { puts $file(outp) "/** \\file $inf(p-file)" puts $file(outp) " \\brief ASN.1 Module $inf(module)" puts $file(outp) "" puts $file(outp) " ${greeting} ${yc_version}" puts $file(outp) "*/" puts $file(outp) {} } if {[info exists inf(p-file)]} { puts $file(outc) "\#include <$inf(h-dir)$inf(p-file)>" } else { puts $file(outc) "\#include <$inf(h-dir)$inf(h-file)>" } puts $file(outh) "\#ifndef ${ppname}_H" puts $file(outh) "\#define ${ppname}_H" puts $file(outh) {} puts $file(outh) "\#include " if {[info exists file(outp)]} { puts $file(outp) "\#ifndef ${ppname}_P_H" puts $file(outp) "\#define ${ppname}_P_H" puts $file(outp) {} puts $file(outp) "\#include <$inf(h-dir)$inf(h-file)>" } asnTagDefault if {[string compare $type :]} { asnError "::= expected got $type '$val'" } lex if {![lex-name-move BEGIN]} { asnError "BEGIN expected" } asnModuleBody lex if {[info exists file(outp)]} { set f $file(outp) } else { set f $file(outh) } puts $f "\#ifdef __cplusplus" puts $f "extern \"C\" \{" puts $f "\#endif" for {set i 1} {$i < $inf(nodef)} {incr i} { puts $f $inf(var,$i) if {[info exists inf(asn,$i)]} { if {0} { puts $f "/*" foreach comment $inf(asn,$i) { puts $f $comment } puts $f " */" } unset inf(asn,$i) } unset inf(var,$i) puts $f {} } puts $f "\#ifdef __cplusplus" puts $f "\}" puts $f "\#endif" if {[info exists inf(body,$inf(module),h)]} { puts $file(outh) $inf(body,$inf(module),h) } if {[info exists inf(body,$inf(module),c)]} { puts $file(outc) $inf(body,$inf(module),c) } if {[info exists inf(body,$inf(module),p)]} { if {[info exists file(outp)]} { puts $file(outp) $inf(body,$inf(module),p) } } puts $file(outh) "\#endif" if {[info exists file(outp)]} { puts $file(outp) "\#endif" } foreach f [array names file] { close $file($f) } unset inf(c-file) unset inf(h-file) catch {unset inf(p-file)} } } } # asnFile: parses an ASN.1 specification file as specified in $inf(iname). proc asnFile {} { global inf file if {$inf(verbose) > 1} { puts "Reading ASN.1 file $inf(iname)" } set inf(str) {} set inf(lineno) 0 set inf(inf) [open $inf(iname) r] asnModules } # The following procedures are invoked by the asnType function. # Each procedure takes the form: asnBasic and they must return # two elements: the C function handler and the C type. # On entry upvar $name is the type we are defining and global, $inf(module), is # the current module name. proc asnBasicEXTERNAL {} { return {odr_external {Odr_external}} } proc asnBasicINTEGER {} { return {odr_integer {Odr_int}} } proc asnBasicENUMERATED {} { return {odr_enum {Odr_int}} } proc asnBasicNULL {} { return {odr_null {Odr_null}} } proc asnBasicBOOLEAN {} { return {odr_bool {Odr_bool}} } proc asnBasicOCTET {} { global type val lex-name-move STRING return {odr_octetstring {Odr_oct}} } proc asnBasicBIT {} { global type val lex-name-move STRING return {odr_bitstring {Odr_bitmask}} } proc asnBasicOBJECT {} { global type val lex-name-move IDENTIFIER return {odr_oid {Odr_oid}} } proc asnBasicGeneralString {} { return {odr_generalstring char} } proc asnBasicVisibleString {} { return {odr_visiblestring char} } proc asnBasicGeneralizedTime {} { return {odr_generalizedtime char} } proc asnBasicANY {} { upvar name name global inf return [list $inf(fprefix)ANY_$name void] } # userDef: reads user definitions file $name proc userDef {name} { global inf if {$inf(verbose) > 1} { puts "Reading definitions file $name" } source $name if {[info exists default-prefix]} { set inf(prefix) ${default-prefix} } if {[info exists h-path]} { set inf(h-path) ${h-path} } foreach m [array names prefix] { set inf(prefix,$m) $prefix($m) } foreach m [array names body] { set inf(body,$m) $body($m) } foreach m [array names init] { set inf(init,$m) $init($m) } foreach m [array names filename] { set inf(filename,$m) $filename($m) } foreach m [array names map] { set inf(map,$m) $map($m) } foreach m [array names membermap] { set inf(membermap,$m) $membermap($m) } foreach m [array names unionmap] { set inf(unionmap,$m) $unionmap($m) } } set inf(verbose) 0 set inf(prefix) {yc_ Yc_ YC_} set inf(h-path) . set inf(h-dir) "" # Parse command line set l [llength $argv] set i 0 while {$i < $l} { set arg [lindex $argv $i] switch -glob -- $arg { -v { incr inf(verbose) } -c { set p [string range $arg 2 end] if {![string length $p]} { set p [lindex $argv [incr i]] } set inf(c-file) $p } -I* { set p [string range $arg 2 end] if {![string length $p]} { set p [lindex $argv [incr i]] } set inf(h-path) $p } -i* { set p [string range $arg 2 end] if {![string length $p]} { set p [lindex $argv [incr i]] } set inf(h-dir) [string trim $p \\/]/ } -h* { set p [string range $arg 2 end] if {![string length $p]} { set p [lindex $argv [incr i]] } set inf(h-file) $p } -p* { set p [string range $arg 2 end] if {![string length $p]} { set p [lindex $argv [incr i]] } set inf(p-file) $p } -d* { set p [string range $arg 2 end] if {![string length $p]} { set p [lindex $argv [incr i]] } userDef $p } -m* { set p [string range $arg 2 end] if {![string length $p]} { set p [lindex $argv [incr i]] } set inf(moduleP) $p } -x* { set p [string range $arg 2 end] if {![string length $p]} { set p [lindex $argv [incr i]] } if {[llength $p] == 1} { set inf(prefix) [list [string tolower $p] \ [string toupper $p] [string toupper $p]] } elseif {[llength $p] == 3} { set inf(prefix) $p } else { puts [llength $p] exit 1 } } default { set inf(iname) $arg } } incr i } if {![info exists inf(iname)]} { puts "YAZ ASN.1 Compiler ${yc_version}" puts "Usage:" puts -nonewline ${argv0} puts { [-v] [-c cfile] [-h hfile] [-p hfile] [-d dfile] [-I iout]} puts { [-i idir] [-m module] file} exit 1 } asnFile yaz-4.2.30/util/cql2xcql.c0000644000175000017500000000416411733047144012207 00000000000000/* This file is part of the YAZ toolkit. * Copyright (C) 1995-2012 Index Data * See the file LICENSE for details. */ #if HAVE_CONFIG_H #include #endif #include #include #include #include #include static void usage(const char *prog) { fprintf(stderr, "%s: [-c] [-n iterations] [-s] [infile]\n", prog); exit(1); } int main(int argc, char **argv) { CQL_parser cp; int r = 0; const char *fname = 0; int iterations = 1; int ret; int convert_to_ccl = 0; char *arg; char *prog = argv[0]; int do_sortkeys = 0; while ((ret = options("cn:s", argv, argc, &arg)) != YAZ_OPTIONS_EOF) { switch (ret) { case 0: fname = arg; break; case 'c': convert_to_ccl = 1; break; case 'n': iterations = atoi(arg); break; case 's': do_sortkeys = 1; break; default: usage(prog); } } cp = cql_parser_create(); if (fname) { int i; for (i = 0; i #endif #include #include #include const char *prog = "yaz-record-conv"; static void usage(void) { fprintf(stderr, "%s: usage\nyaz-record-conf config file ..\n", prog); exit(1); } int main (int argc, char **argv) { int r; char *arg; yaz_record_conv_t p = 0; int no_errors = 0; while ((r = options("V", argv, argc, &arg)) != -2) { switch (r) { case 'V': break; case 0: #if YAZ_HAVE_XML2 if (!p) { xmlDocPtr doc = xmlParseFile(arg); int r = -1; p = yaz_record_conv_create(); if (doc) { xmlNodePtr ptr = xmlDocGetRootElement(doc); if (ptr) { r = yaz_record_conv_configure(p, ptr); if (r) { fprintf(stderr, "record conf error: %s\n", yaz_record_conv_get_error(p)); } } } xmlFreeDoc(doc); if (r) { yaz_record_conv_destroy(p); exit(2); } } else { WRBUF input_record = wrbuf_alloc(); WRBUF output_record = wrbuf_alloc(); FILE *f = fopen(arg, "rb"); int c, r; if (!f) { fprintf(stderr, "%s: open failed: %s\n", prog, arg); exit(3); } while ((c = getc(f)) != EOF) wrbuf_putc(input_record, c); r = yaz_record_conv_record(p, wrbuf_buf(input_record), wrbuf_len(input_record), output_record); if (r) { fprintf(stderr, "%s: %s: Error %s\n", prog, arg, yaz_record_conv_get_error(p)); no_errors++; } else { fwrite(wrbuf_buf(output_record), 1, wrbuf_len(output_record), stdout); } wrbuf_destroy(input_record); wrbuf_destroy(output_record); fclose(f); } break; #else fprintf(stderr, "%s: YAZ not compiled with Libxml2 support\n", prog); usage(); break; #endif default: usage(); } } #if YAZ_HAVE_XML2 yaz_record_conv_destroy(p); #endif if (no_errors) exit(1); exit(0); } /* * Local variables: * c-basic-offset: 4 * c-file-style: "Stroustrup" * indent-tabs-mode: nil * End: * vim: shiftwidth=4 tabstop=8 expandtab */ yaz-4.2.30/util/yaziconv.c0000644000175000017500000001164411733047144012321 00000000000000/* This file is part of the YAZ toolkit. * Copyright (C) 1995-2012 Index Data * See the file LICENSE for details. */ #if HAVE_CONFIG_H #include #endif #include #include #include #include #define CHUNK_IN 64 #define CHUNK_OUT 64 void write_out(const char *b0, const char *b1) { size_t sz = b1 - b0; if (sz) { if (fwrite(b0, 1, sz, stdout) != sz) { fprintf(stderr, "yaz-iconv: write failed\n"); exit(8); } } } void convert(FILE *inf, yaz_iconv_t cd, int verbose) { char inbuf0[CHUNK_IN], *inbuf = inbuf0; char outbuf0[CHUNK_OUT], *outbuf = outbuf0; size_t inbytesleft = CHUNK_IN; size_t outbytesleft = CHUNK_OUT; int mustread = 1; while (1) { size_t r; if (mustread) { r = fread(inbuf, 1, inbytesleft, inf); if (inbytesleft != r) { if (ferror(inf)) { fprintf(stderr, "yaz-iconv: error reading file\n"); exit(6); } if (r == 0) { write_out(outbuf0, outbuf); outbuf = outbuf0; outbytesleft = CHUNK_OUT; r = yaz_iconv(cd, 0, 0, &outbuf, &outbytesleft); write_out(outbuf0, outbuf); break; } inbytesleft = r; } } if (verbose > 1) { fprintf(stderr, "yaz_iconv: inbytesleft=%ld outbytesleft=%ld\n", (long) inbytesleft, (long) outbytesleft); } r = yaz_iconv(cd, &inbuf, &inbytesleft, &outbuf, &outbytesleft); if (r == (size_t)(-1)) { int e = yaz_iconv_error(cd); if (e == YAZ_ICONV_EILSEQ) { fprintf(stderr, "invalid sequence\n"); return ; } else if (e == YAZ_ICONV_EINVAL) /* incomplete input */ { size_t i; for (i = 0; i #endif #include #include #include #include #include #include #include #if YAZ_HAVE_XML2 #include #endif static char *prog = "yaz-xmlquery"; #if YAZ_HAVE_XML2 void pqftoxmlquery(const char *pqf) { YAZ_PQF_Parser parser = yaz_pqf_create(); ODR odr = odr_createmem(ODR_ENCODE); Z_RPNQuery *rpn; if (!parser) { fprintf(stderr, "%s: cannot create parser\n", prog); exit(1); } if (!odr) { fprintf(stderr, "%s: cannot create parser\n", prog); exit(1); } rpn = yaz_pqf_parse(parser, odr, pqf); yaz_pqf_destroy(parser); if (!rpn) { fprintf(stderr, "%s: pqf parse error for query %s\n", prog, pqf); exit(2); } else { xmlDocPtr doc = 0; yaz_rpnquery2xml(rpn, &doc); if (!doc) { fprintf(stderr, "%s: yaz_rpnquery2xml failed for query %s\n", prog, pqf); exit(3); } else { xmlChar *buf_out = 0; int len_out = 0; xmlDocDumpMemory(doc, &buf_out, &len_out); if (!len_out || !buf_out) { fprintf(stderr, "%s: xmlDocDumpMemory failed for query %s\n", prog, pqf); exit(4); } else { if (fwrite(buf_out, len_out, 1, stdout) != 1) { fprintf(stderr, "%s: write failed\n", prog); exit(5); } } xmlFreeDoc(doc); } } odr_destroy(odr); } void xmlquerytopqf(const char *xmlstr) { xmlDocPtr doc; doc = xmlParseMemory(xmlstr, strlen(xmlstr)); if (!doc) { fprintf(stderr, "%s: xml parse error for XML:\n%s\n", prog, xmlstr); exit(1); } else { int error_code = 0; const char *addinfo = 0; Z_Query *query = 0; ODR odr = odr_createmem(ODR_ENCODE); const xmlNode *root_element = xmlDocGetRootElement(doc); yaz_xml2query(root_element, &query, odr, &error_code, &addinfo); if (error_code) { fprintf(stderr, "%s: yaz_xml2query failed code=%d addinfo=%s\n", prog, error_code, addinfo); exit(1); } else if (!query) { fprintf(stderr, "%s: yaz_xml2query no query result\n", prog); exit(1); } else { WRBUF w = wrbuf_alloc(); yaz_query_to_wrbuf(w, query); printf("%s\n", wrbuf_cstr(w)); wrbuf_destroy(w); } odr_destroy(odr); xmlFreeDoc(doc); } } void xmlfiletopqf(const char *xmlfile) { long sz; char *xmlstr; FILE *f = fopen(xmlfile, "rb"); if (!f) { fprintf(stderr, "%s: cannot open %s\n", prog, xmlfile); exit(1); } fseek(f, 0, SEEK_END); sz = ftell(f); if (sz <= 0 || sz >= 1<<18) { fprintf(stderr, "%s: bad size for file %s\n", prog, xmlfile); exit(1); } rewind(f); xmlstr = (char *) xmalloc(sz+1); xmlstr[sz] = '\0'; if (fread(xmlstr, sz, 1, f) != 1) { fprintf(stderr, "%s: read failed for file %s\n", prog, xmlfile); exit(1); } if (fclose(f)) { fprintf(stderr, "%s: close failed for file %s\n", prog, xmlfile); exit(1); } xmlquerytopqf(xmlstr); xfree(xmlstr); } #endif void usage(void) { fprintf(stderr, "%s [-p pqf] [-x xmlfile]\n", prog); fprintf(stderr, " -p pqf reads pqf. write xml to stdout\n"); fprintf(stderr, " -x xmlfile reads XML from file. write pqf to stdout\n"); exit(1); } int main (int argc, char **argv) { #if YAZ_HAVE_XML2 char *arg; int r; int active = 0; while ((r = options("-p:x:", argv, argc, &arg)) != -2) { switch(r) { case 'p': pqftoxmlquery(arg); active = 1; break; case 'x': xmlfiletopqf(arg); active = 1; break; case 0: break; } } if (!active) { fprintf(stderr, "%s: nothing to do\n", prog); usage(); } #else fprintf(stderr, "%s: XML support not enabled.\n", prog); exit(1); #endif return 0; } yaz-4.2.30/util/cql2pqf.c0000644000175000017500000000672211733047144012030 00000000000000/* This file is part of the YAZ toolkit. * Copyright (C) 1995-2012 Index Data * See the file LICENSE for details. */ #if HAVE_CONFIG_H #include #endif #include #include #include #include #include static void usage(void) { fprintf(stderr, "usage\n cql2pqf [-n ] [-r] []\n"); exit(1); } int main(int argc, char **argv) { cql_transform_t ct; int i, iterations = 1; char *query = 0; char *fname = 0; int reverse = 0; int verbose = 1; int ret; char *arg; while ((ret = options("n:rv", argv, argc, &arg)) != -2) { switch (ret) { case 0: if (!fname) fname = arg; else query = arg; break; case 'n': iterations = atoi(arg); break; case 'r': reverse = 1; break; case 'v': verbose = 1; break; default: usage(); } } if (!fname) usage(); if (!strcmp(fname, "-")) ct = cql_transform_create(); else ct = cql_transform_open_fname(fname); if (!ct) { fprintf(stderr, "failed to read properties %s\n", fname); exit(1); } if (reverse) { if (!query) usage(); else { ODR odr = odr_createmem(ODR_ENCODE); YAZ_PQF_Parser pp = yaz_pqf_create(); Z_RPNQuery *rpn = yaz_pqf_parse(pp, odr, query); if (!rpn) { fprintf(stderr, "PQF syntax error\n"); } else { int ret = cql_transform_rpn2cql_stream(ct, cql_fputs, stdout, rpn); if (ret) { const char *addinfo; int r = cql_transform_error(ct, &addinfo); printf("Transform error %d %s\n", r, addinfo ? addinfo : ""); } else printf("\n"); } yaz_pqf_destroy(pp); odr_destroy(odr); } } else { CQL_parser cp = cql_parser_create(); int r = 0; if (query) { if (verbose) printf("Parsing CQL %s\n", query); for (i = 0; i Date: Wed Apr 11 10:24:42 2012 +0200 Version 4.2.30 commit 4b881b11489fe1cb823f75dcfc5b88cbe7c21ba0 Author: Adam Dickmeiss Date: Wed Apr 4 12:54:14 2012 +0200 Update Bib-1/SRU diagnostic map for 236, 1015 commit 1de3e0a16b71a0d901efc76ed93285a1a869ef09 Author: Adam Dickmeiss Date: Wed Apr 4 12:53:14 2012 +0200 add two new SRU diagnostics 236: Access to specified database denied 1015: Init/AC: Maximum number of simultaneous sessions for Userid commit e7cef788e6e6ae270dc9a274b5da51e953ca5479 Author: Mike Taylor Date: Tue Apr 3 10:28:11 2012 +0100 Document the very useful ZOOM-C option "apdulog". commit d9dc3bb081f0b1ffc860569373cd35424c0f7c8d Merge: 1254f59 1941ff1 Author: Adam Dickmeiss Date: Fri Mar 23 14:28:17 2012 +0100 Merge branch 'master' of ssh://git.indexdata.com/home/git/pub/yaz commit 1254f5913d639e30ac822165196170a9b53748ff Author: Adam Dickmeiss Date: Fri Mar 23 14:24:35 2012 +0100 CQL to RPN: term may be passed through verbatim This is enabled with truncation.cql . The assumption being that the term is already CQL. commit 1941ff11603ef323740f8aa8de0baa472e6ea489 Author: Wolfram Schneider Date: Fri Mar 23 12:22:51 2012 +0000 update packages names for FreeBSD commit 51595f1f496ef99ccbe325f1984f46575fd46ea8 Author: Adam Dickmeiss Date: Tue Mar 20 14:24:08 2012 +0100 CCL: fix spell error in message commit 94b8ca343cc7084394526bd26c80c208aa16c9f9 Author: Adam Dickmeiss Date: Tue Mar 20 10:36:12 2012 +0100 Version 4.2.29 commit 5c0fa4bf1be2881b55a3ed27ae08cdc8b35271bc Author: Adam Dickmeiss Date: Tue Mar 20 10:34:50 2012 +0100 Update NEWS commit d9c0ce2694cbd7198c03b8e7d7c4e20a804f809f Author: Adam Dickmeiss Date: Tue Mar 20 10:33:19 2012 +0100 yaz-marcdump man: quote in leader spec example commit 922a7e99f2317972f9d6f3329d37a7583f57cbaa Author: Adam Dickmeiss Date: Thu Mar 8 16:56:50 2012 +0100 record_conv: allow user-XSLT params For example: commit b1c1ccaac399ee2eff5f993654accb5d17844c9e Author: Adam Dickmeiss Date: Thu Mar 8 10:08:38 2012 +0100 record_conv: leader spec may be given for marc element The leader spec is given as attribute leaderspec for element marc. For example to convert a MARC21 record from MARC-8 to UTF-8: commit 2e8277ab9c32d32ac776f7164828ef016cf06860 Author: Adam Dickmeiss Date: Thu Mar 8 09:19:58 2012 +0100 record_conv: fix error handling for marc charsets mis Fix really brain damaged error handling of marc charset check. commit 67263adf9c8efbd384b09ec71b98844ce7c7d2bf Author: Adam Dickmeiss Date: Wed Mar 7 12:46:37 2012 +0100 CQL: fix extra terms in wrong order commit ca293278a7d1a064c21d35df8ee00cf6d3ed6936 Author: Adam Dickmeiss Date: Tue Mar 6 12:23:34 2012 +0100 Version 4.2.28 commit b32d9b00c627dfca899c5a017f159313cb95faaa Merge: 04bbf6b ecaa6d3 Author: Adam Dickmeiss Date: Tue Mar 6 12:19:29 2012 +0100 Merge branch 'master' of ssh://git.indexdata.com/home/git/pub/yaz commit 04bbf6b734eade606885f41fb448ba30de29a197 Author: Adam Dickmeiss Date: Tue Mar 6 12:19:24 2012 +0100 Update NEWS commit ecaa6d31f9384565debfbd1848f1a42bb36b0666 Author: Adam Dickmeiss Date: Fri Mar 2 22:41:04 2012 +0100 Update doc/common and m4 commit b0be69c0a676f1702f12b2ea17cd73f9ebb08ea2 Author: Adam Dickmeiss Date: Fri Mar 2 11:28:34 2012 +0100 record_conv: change construct prototype Removing yaz_record_conv_t from construct conversion type handler. commit a3e65bcd3250b107397675bc65b35b5939355025 Author: Adam Dickmeiss Date: Fri Mar 2 11:17:28 2012 +0100 record_conv: modify new API for conversion types The conversion types may be passed in new functions yaz_record_conv_configure_t and yaz_retrieval_configure_t. Removing yaz_record_conv_add_type . commit d71e0f5445235ed25ab633d73a26bb4f01a0885f Author: Adam Dickmeiss Date: Thu Mar 1 15:41:34 2012 +0100 record_conv: 2nd attempt compile wo Libxml2 commit b2d8fc833e5f604df069deb5b16a76b6e03a0e61 Author: Adam Dickmeiss Date: Thu Mar 1 15:17:00 2012 +0100 record_conv: proper diagnostic for unhandled types Thanks to Hudson for telling me. commit 6bad90d4b022ea2276a83ecaccef42de13708d2d Author: Adam Dickmeiss Date: Thu Mar 1 15:07:46 2012 +0100 Move yaz_record_conv_type to XML2-only area Because it refers to xmlNode. commit 95b69dabd857fa3342a71df2be123333b42c8da2 Author: Adam Dickmeiss Date: Thu Mar 1 14:52:58 2012 +0100 record_conv: extensible conversion A new conversion type may be defined for the record_conv system, with the new function yaz_record_conv_add_type. commit 558df80ae85811e84dbe5767df72bffdd19c3bcf Author: Adam Dickmeiss Date: Thu Mar 1 14:52:20 2012 +0100 Comment fix to make Doxygen happy commit a067640083f9ef3f18feb267cc361b7602b9fa37 Author: Adam Dickmeiss Date: Wed Feb 29 10:47:13 2012 +0100 Avoid mixed stmt/var declare commit a317903bc5eccb7cfb0c15411565fe4d5f2e72a4 Author: Adam Dickmeiss Date: Tue Feb 28 19:41:25 2012 +0000 Version 4.2.27 commit 9a15c4eecb9fc1ea2b52a59fbc496658fea534fd Author: Adam Dickmeiss Date: Tue Feb 28 17:10:43 2012 +0100 Update NEWS commit 0ee6ed21c56ed2fbcdab586054f95d1be1107e1d Author: Adam Dickmeiss Date: Tue Feb 28 16:53:19 2012 +0100 Diagnostic map tweaks for "Database does not exist" Bib-1 114: Database unavailable and Bib-1: 235 "Database does not exist" maps to SRU diagnostic 235 "Database does not exist". commit d996e25e6508fde1400a7c8aaea2a06f66503a29 Author: Adam Dickmeiss Date: Tue Feb 28 16:51:03 2012 +0100 Add SRU diagnostic 235: Database does not exist Not part of the standard. commit 6451a706e744f7b2d6142f60ab2ee025ecf48326 Author: Adam Dickmeiss Date: Fri Feb 24 14:48:26 2012 +0100 Reformat (no code changes) commit e38cab5629e6643d9e1621a697e8ccc8d7822727 Author: Adam Dickmeiss Date: Fri Feb 24 14:46:02 2012 +0100 retrieval: only one section allowed commit 97d7fdb61597302d861480d4bc7455d4bb1b08cb Author: Adam Dickmeiss Date: Fri Feb 24 11:26:56 2012 +0100 CCL: ccl_err_msg returns 0 ptr for invalid ccl_errno commit ba1f112c74932545871791eaf2c2e4cfe4014ee5 Author: Adam Dickmeiss Date: Fri Feb 24 11:23:46 2012 +0100 CCL: add two new diagnostics for unsupported masking The new diagnostics are: "Embedded truncation not supported" and "Single charcacter mask not supported". commit 6e3979a31cbe2af9e223930e04770a9efb5f2021 Author: Adam Dickmeiss Date: Thu Feb 23 08:14:55 2012 +0000 Version 4.2.26 commit 0e7fdbc857d4905e67a7bdf8fe5b6c773ee47a7b Author: Adam Dickmeiss Date: Thu Feb 23 09:09:48 2012 +0100 CCL: fix use of "term" field in sub queries commit d2b2e6cbf33f8d85dfc258fa7b53ff65e2423998 Author: Adam Dickmeiss Date: Fri Feb 17 15:30:12 2012 +0100 Update doc/common commit d1ea8fe378111656d531fb426eaa10f57d56f29f Author: Adam Dickmeiss Date: Tue Jan 17 14:55:54 2012 +0100 Fix 0 ptr ref in tcpd usage (host unknown) Thanks to Donovan Artz for the patch. commit eafd1552e1097d4f93f7eb22cabbb25d3b751bf8 Author: Adam Dickmeiss Date: Wed Jan 11 09:29:25 2012 +0100 Version 4.2.25 commit 529cef45a52c3f9425f3b81ce46ba77a72681685 Author: Adam Dickmeiss Date: Wed Jan 11 09:26:45 2012 +0100 Add Ubuntu Oneiric commit 77c5a4fca8b516fd39b8ba213daed17a465a6b2a Author: Adam Dickmeiss Date: Mon Jan 9 19:14:31 2012 +0100 Happy new year commit 08e2bab36d24a98ed921130df0973370be5aac80 Author: Adam Dickmeiss Date: Mon Jan 9 19:11:21 2012 +0100 Changes to NEWS commit 3add35fb1972e98b5f8922bd1c6f1985b4540009 Author: Adam Dickmeiss Date: Thu Jan 5 16:13:22 2012 +0100 Add some tests for CCL for new proximity behavior commit e5a3bea3827a893295f7d4d30fbb2fbacd27d02e Author: Adam Dickmeiss Date: Thu Jan 5 16:11:08 2012 +0100 CCL: allow parantheses for prox operands For example, (a) % (b) is now allowed. The parsing code was actually reduced by this. commit abe46958ffd48a2af09b9f7753f89342e31fb1e1 Author: Adam Dickmeiss Date: Fri Dec 30 14:36:47 2011 +0100 GFS: fix bend_assoc_is_alive When cs_get returns 0 the association is marked dead, rather then being destroyed. If not, the session memory is being free'd before the search/scan handler is finished. Also destroy request memory in request_release rather than in various places, which resulted in leaks from time to time. commit c6e6b1fe0674de638fbc1ad44393baa251d4af6f Author: Adam Dickmeiss Date: Wed Dec 21 14:52:19 2011 +0100 Version 4.2.24 commit f18ebddc25b66240a8c2396d7bc4f85c3eea8157 Author: Adam Dickmeiss Date: Wed Dec 21 14:49:57 2011 +0100 Changes commit b8c32e563453793ed92e311d4585d54fc77fbb04 Author: Adam Dickmeiss Date: Wed Dec 21 10:30:33 2011 +0100 Add test case for cql_sortby_to_sortkeys (sort prefix) commit f9070e3fc55f12dfa9562727f78734615535ec4c Author: Adam Dickmeiss Date: Wed Dec 21 10:29:56 2011 +0100 cql_sortby_to_sortkeys: honor sort prefix commit 85a0aae5ecc05652b0cf16aae811d64846835f80 Author: Adam Dickmeiss Date: Tue Dec 20 14:49:34 2011 +0100 RPN to CQL: always quote resulting terms For bizarre reasons, JSTOR's SRU server returns 0 hits on ISSN searches unless a CQL term is quoted. The rpn2cql family of functions now always returns quoted CQL terms. commit 871f1239cc0c8a2d4b2bd16a918a39c97633faa8 Author: Adam Dickmeiss Date: Tue Dec 20 12:56:08 2011 +0100 Fix CQL to CCL conversion for multiple terms Add two test cases as well. commit d3dd31e410ea2d3ecba76d825909db7a2c2279d1 Author: Adam Dickmeiss Date: Thu Dec 15 10:40:28 2011 +0100 Version 4.2.23 commit 0053add2774c4e79953db1095dfa1bb9c3d456d1 Author: Adam Dickmeiss Date: Thu Dec 15 10:40:17 2011 +0100 More consisten look of NEWS commit fbb95a6f20b90e3fc804d0e808a27175f6537bf4 Author: Adam Dickmeiss Date: Thu Dec 15 10:38:59 2011 +0100 Update dependency version due to new function ZOOM_connection_save_apdu_wrbuf. This should have been done for the 4.2.22 release. commit a58958a898bd469b252d3554f64b059a723aa774 Author: Adam Dickmeiss Date: Thu Dec 15 10:30:51 2011 +0100 Update news commit c239fa0fd573149e2d916b6c844aca8161ec2b45 Author: Adam Dickmeiss Date: Thu Dec 15 10:27:56 2011 +0100 configure.ac not needed for Windows package commit f1e531f6145bd036475a33dc7f3574ddd252624f Author: Adam Dickmeiss Date: Thu Dec 15 10:24:35 2011 +0100 IDMETA part of Windows package commit 0bcc1ed577edcdcab35fdc930f50ad0303946b8a Author: Adam Dickmeiss Date: Thu Dec 15 10:20:08 2011 +0100 Pass IDMETA to mk_version.tcl commit d384acaecc0cc8b226aae4cf2f7ae4125cf272e6 Author: Adam Dickmeiss Date: Thu Dec 15 10:17:21 2011 +0100 mk_version.tcl gets version from IDMETA It's a month ago we moved version from configure.ac to IDMETA, but mk_version.tcl is only used on Windows. commit 5634c61bba1700946c7e7f4292580e50a3f594d6 Author: Adam Dickmeiss Date: Thu Dec 15 09:39:34 2011 +0100 Add tests for yaz_uri_to_array and yaz_array_to_uri commit 692cfa1de9dd855c1725db48f6d0a2cddcae9fcd Author: Adam Dickmeiss Date: Thu Dec 15 09:37:11 2011 +0100 Allow =val to be omitted for yaz_uri_to_array Also, multiple &'s in sequence is treated as one. For example, &&a=b&&&c& is identical to a=b&c= . commit 49ef9093f47fbe076c85428d1b3f4aeb94d49165 Author: Adam Dickmeiss Date: Wed Dec 7 14:38:40 2011 +0100 Fix Doxygen filename commit 0faba8eaa6796ce9a1101e36d00d9b0d9f5ce3b2 Author: Adam Dickmeiss Date: Wed Dec 7 14:37:23 2011 +0100 Refactor SRU/Z39.50 diag map utils to diag_map.c commit f862d0cc736ecc220ca1a39093c2abf13c70e8e9 Author: Adam Dickmeiss Date: Mon Dec 5 10:53:19 2011 +0000 Version 4.2.22 commit 0b0eb588d2989d5bc7d77600e4e9b375d1eade12 Author: Adam Dickmeiss Date: Mon Dec 5 11:28:08 2011 +0100 Add ZOOM_connection_save_apdu_wrbuf This function may be used to save APDUs for a connection to a WRBUF. commit 11325508f28602eeeade2294f0b5e70f3f9c8429 Author: Adam Dickmeiss Date: Fri Nov 25 14:31:19 2011 +0100 buildconf removes autom4te.cache This is to ensure that software version is not cached but taken from IDMETA as it should. commit 2dbb55981b7169e8e3957e2ea2ea3f7fd5aea530 Author: Adam Dickmeiss Date: Thu Nov 24 14:17:07 2011 +0100 Add tests of CQL to CCL+sortkeys conversion commit b57542eb8dfd435b7c5f2c02e4b0d9a1a8431521 Author: Adam Dickmeiss Date: Thu Nov 24 11:00:10 2011 +0100 CQL to CCL: add ()s for boolean sub terms For boolean operation, a op b, make CCL (a) op (b) rather than (a op b), to ensure that proximity operator within a or be is only applied there. This is to ensure that field assigment in a is never applied to b in the resulting CQL. In CCL proximity has higher precedence than field assignment, unlike CQL. commit 0a23789949e767272bb46ca36cf66cbc0fb2cd87 Merge: ad737e7 956cbe8 Author: Adam Dickmeiss Date: Thu Nov 24 10:37:52 2011 +0100 Merge branch 'master' of ssh://git.indexdata.com/home/git/pub/yaz commit 956cbe8186c430c4c5a3821a8bfe96eedfe5f898 Author: Adam Dickmeiss Date: Wed Nov 23 21:32:41 2011 +0100 Remove Ubuntu karmic from build commit 3603a0303af734f5b4fa234472cc7a3edf043045 Author: Adam Dickmeiss Date: Wed Nov 23 16:08:33 2011 +0000 Version 4.2.21 commit 5650509910a3a243d42113305be7ef5412d2f95e Author: Adam Dickmeiss Date: Wed Nov 23 17:05:34 2011 +0100 cql_sortby_to_sortkeys - fix pr_n It was so broken I wonder how it ever would work. commit ce0b30b9bf7f8f30798724aa29a4d4dc83eaccfa Author: Adam Dickmeiss Date: Wed Nov 23 14:05:25 2011 +0100 test_ccl: add special qualifier tests Such as @truncation, @and, @or, @not. commit e7ee503f39a77a3b79d590feef34e0bd959ece0c Author: Adam Dickmeiss Date: Wed Nov 23 14:04:25 2011 +0100 ccl: honor @truncation again commit ad737e79a0f8d3e8e7a354aa596acae68ae0083e Author: Adam Dickmeiss Date: Fri Nov 18 13:09:04 2011 +0100 Diagnostic mapping: tweak 10, 108 mappings The bib-1 to SRU are kept in order again, and 10->108 reverse is in the reverse mapping. commit 5ba32ffaf5223a74bcbf95812d7002b4ef5aa4cf Author: Adam Dickmeiss Date: Fri Nov 18 12:54:28 2011 +0100 Change diagnostic code mapping for Bib-1: "Unsupported search" Bib-1: "Unsupported search" now maps to SRU diagnostic : "Query feature unsupported". commit 3f320e9bc56210d730081b2d82f2658636afa5ca Author: Adam Dickmeiss Date: Tue Nov 15 14:03:08 2011 +0100 Refactor icu_chain_create And ensure proper clean up if UCollator can not be created. commit 689388c889a644a40ca1f447cc862da009049836 Author: Adam Dickmeiss Date: Tue Nov 15 13:55:45 2011 +0100 Reformat, remove a few redundant type casts commit 6c5f1e84b0917856d2bb726ee34bd982c9b91aa1 Author: Adam Dickmeiss Date: Tue Nov 15 13:45:48 2011 +0100 Minor refactor of ICU casemap commit 739856a108a9c54cdf8d85aaa21dc65b2b4d1a70 Author: Adam Dickmeiss Date: Tue Nov 15 13:45:41 2011 +0100 Ignore test_options program commit 17f0838c01af294a5b400a613c42c943083c8e4f Author: Adam Dickmeiss Date: Mon Nov 14 16:29:20 2011 +0100 RPM: get version from IDMETA So we don't need to update the spec file for each release anymore. commit fdc95948ee7f905c54a977006ea3f3ae24a83648 Author: Adam Dickmeiss Date: Mon Nov 14 16:28:53 2011 +0100 IDMETA part of dist commit 6c6f50e4763f3985548d4cabafab1be1673faaae Author: Adam Dickmeiss Date: Mon Nov 14 16:10:48 2011 +0100 Read version from IDMETA rather than configure.ac. In other words, configure.ac gets its version from IDMETA. commit 443b3302ebc9b47e4ffc97e826de5076daea3af2 Author: Adam Dickmeiss Date: Thu Nov 10 12:47:54 2011 +0100 Update m4 commit 2ba14237fbb3983161a63f321cbfd137eb622648 Author: Adam Dickmeiss Date: Wed Nov 9 16:02:55 2011 +0100 Version 4.2.20, really commit 3c287bc1d48ee6a1f300054c2cebd0ba312bd5b9 Author: Adam Dickmeiss Date: Wed Nov 9 15:56:04 2011 +0100 New ZOOM connection setting: tproxy It's like proxy, but does not set Z39.50 proxy OID or change HTTP for proxy behavior. Can be used to set resolved address + port for a connection outside ZOOM itself. commit a5dd43fc9e75e2267b42e0effb446d0483ea92e3 Author: Adam Dickmeiss Date: Wed Nov 9 12:31:23 2011 +0100 Fix atoi_n_check digit test Thanks to Giannis Kosmas for spotting it. commit eaeb5111f809df907a53890b797c854ecacfdf21 Author: Adam Dickmeiss Date: Mon Nov 7 10:31:15 2011 +0100 Version 4.2.20 commit 8cab0e7a022a9c5ec35cf74ea6b77b9a652a17f9 Author: Adam Dickmeiss Date: Mon Nov 7 10:13:59 2011 +0100 Describe changes commit 38b682e3f8a2c985098aa98c1d8c72fda65cf3ed Author: Dennis Schafroth Date: Fri Nov 4 15:40:40 2011 +0100 Initializing suggestions. commit 7b52338c50b952d6ab2848339975335446936fcb Author: Mike Taylor Date: Wed Nov 2 12:30:07 2011 +0000 Describe recent changes. commit 3d43554048d6e68909638c65a3d55b945ec38555 Author: Mike Taylor Date: Wed Nov 2 12:29:54 2011 +0000 When ZOOM_set_dset_error() is passed an addinfo2 as well as addinfo, they are separated by a colon and a space rather than simply concatenated. commit 2c511722276f25a9e845dde8c2504bd3ca6d356a Author: Mike Taylor Date: Wed Nov 2 12:28:51 2011 +0000 Error handling for Z_APDU_close uses ZOOM_set_dset_error() to pass back-end's addinfo through into the ZOOM response addinfo. commit cc3abee6f861d0166bef5333b1fc72fbdc8bd94c Author: Adam Dickmeiss Date: Fri Oct 28 14:19:51 2011 +0200 Version 4.2.18 commit bb616f1670e9198b048298b049dd8cdb7370353f Author: Adam Dickmeiss Date: Fri Oct 28 14:19:01 2011 +0200 May use libreadline-dev Because libreadline5-dev is gone in Debian wheezy. commit 5f934b45f139e441bf26a4d28168df7ea6f9f841 Author: Adam Dickmeiss Date: Fri Oct 28 14:13:30 2011 +0200 Fix compilation wo libxml2 commit dbe23d34a8ab88558e1fb9e3cefa1eecae5b8ab0 Author: Dennis Schafroth Date: Fri Oct 28 14:06:04 2011 +0200 Info about Solr spell-checking/suggestions. New command suggestions to show result commit 86dd4bfde2e51c5389135a45d29a98032ca0ac69 Author: Dennis Schafroth Date: Fri Oct 28 13:57:07 2011 +0200 Fix: usage of wrong xml node. Fix string compare. Cosmetic: add newline after xml element misspelled commit 43a39e3fad856932e6f538bb05781d0430c58899 Author: Dennis Schafroth Date: Fri Oct 28 12:47:37 2011 +0200 Implement display of suggestions commit 82f61d1dd58f64119e33ed88d4ab7572b0ad1083 Author: Dennis Schafroth Date: Fri Oct 28 12:46:39 2011 +0200 Impl. display of suggestions commit 78db92d203c03c589beb89e039e07cdc0c53ccc2 Author: Dennis Schafroth Date: Fri Oct 28 10:45:24 2011 +0200 Init new suggestions pointer commit 8b5fac33ba89011ccec1d04955d90b8585874164 Author: Dennis Schafroth Date: Fri Oct 28 10:32:42 2011 +0200 Add setting of suggestions options on resultset commit 06ff64edbe47561d10357592c23dcd196b60f116 Author: Dennis Schafroth Date: Fri Oct 28 10:32:00 2011 +0200 Fix missing return type. Fix function name commit c18fa0350a008cd57973968334ccf8270026b2e0 Author: Dennis Schafroth Date: Thu Oct 27 16:53:17 2011 +0200 parsing of optional mispelled/suggestions commit df65074917a6504ab9f21b5d1897b006ec086007 Author: Dennis Schafroth Date: Thu Oct 27 16:49:43 2011 +0200 New suggestions result commit 8f09a31746ca9b1450cce6106b89f9cfbf53e88f Author: Adam Dickmeiss Date: Fri Oct 14 14:34:24 2011 +0200 facet display: avoid printing 0-string commit ffca367b18062164e077f24b2563f219e5c4ad02 Author: Adam Dickmeiss Date: Wed Sep 28 12:25:28 2011 +0200 Version 4.2.17 commit 2715f6522ca62ab5dbc886c21ed18945743216f0 Author: Adam Dickmeiss Date: Wed Sep 28 11:26:40 2011 +0200 Reformat commit 29b39371225c6c6eaa746d8805dd46d42b9b9668 Author: Adam Dickmeiss Date: Wed Sep 28 11:25:31 2011 +0200 Slightly different format in generated C code Avoid space between term and ( except for operators. commit 794c0656c852e13d5c9b2fdc046309d83caf6916 Author: Adam Dickmeiss Date: Wed Sep 28 10:41:35 2011 +0200 test nmem_strsplit_escape2 commit 07ebfd1140984b5a36427dd5b0f3cb6a4b48684e Author: Adam Dickmeiss Date: Tue Sep 27 16:09:46 2011 +0200 New utility: nmem_strsplit_escape2 commit adad3479963999a4085240a5cd2a6aa4d405e846 Author: Adam Dickmeiss Date: Thu Sep 22 14:49:38 2011 +0200 Version 4.2.16 commit 474209f883ef0abea418e5fe2e3e2451b2ff3a0e Author: Adam Dickmeiss Date: Thu Sep 22 14:43:22 2011 +0200 Another fix for nmem_strsplit_escape Double-escape was not encoded to escape. Test case in place. commit 1bef37cb158d2c33a7ddf138ff299e4f96a084ae Author: Adam Dickmeiss Date: Thu Sep 22 14:30:10 2011 +0200 Fix nmem_strsplit_escape subsitutes escape char away commit 834902a1b9db396bd9aae10fe0ae725535afecfe Author: Adam Dickmeiss Date: Wed Sep 21 14:34:28 2011 +0200 YAZ options: special -- ends options Add test of YAZ options commit 5ce89138d84a5edc6d9b8e6d8128367b9b9b3e31 Author: Adam Dickmeiss Date: Wed Sep 21 14:12:26 2011 +0200 zoomsh: option -e for getting zoomsh to set EXIT code depending on success/failure. commit ab75b3bd5dffe9425dfcfd36e76a60e8496bdd5d Author: Adam Dickmeiss Date: Wed Sep 21 13:28:15 2011 +0200 Refactor zoomsh to use YAZ options commit 8fba4cf2cac1cc543aa4c1063c78b449ebac44a7 Author: Adam Dickmeiss Date: Tue Sep 20 13:13:14 2011 +0200 CCL: fix syntax error commit 3b5a46489f85d20012cff59320d7a43b16a43c99 Author: Adam Dickmeiss Date: Tue Sep 20 12:23:35 2011 +0200 CCL test: check for white-space preserve commit 22c55c8cd417ff79ed5a83fa00556db102fc1685 Author: Adam Dickmeiss Date: Tue Sep 20 12:23:24 2011 +0200 CCL: use strxcat rather than strlen+memcpy commit f77061f0ad18ff3a037a10ca4fcb0954e0848fa3 Author: Adam Dickmeiss Date: Tue Sep 20 11:21:19 2011 +0200 Reformat commit 176297882639f5e3318ffa4dcc515f081a6e08f4 Author: Adam Dickmeiss Date: Tue Sep 20 11:19:42 2011 +0200 CCL test: check for terms more special chars commit fcfd9a074ff29ffdd52e5eb0ee348fb74f0a0d17 Author: Adam Dickmeiss Date: Tue Sep 20 11:13:52 2011 +0200 CQL/CCL to RPN. Checks for leading @ Special case, since @ precedes PQF operators. commit 17a23431f99a678761992a2b7ad5cf6a0a2ff60c Author: Adam Dickmeiss Date: Fri Sep 16 10:59:23 2011 +0200 Version 4.2.15 commit 5d7f0c6837c49cc360d11bbab767634bf9ec1374 Author: Adam Dickmeiss Date: Fri Sep 16 10:58:09 2011 +0200 Comments on return values commit 141b1995386bd21dbbc05e6cba481aa0e57537d7 Merge: ba13392 828e4c7 Author: Adam Dickmeiss Date: Thu Sep 8 08:46:01 2011 +0200 Merge branch 'master' of ssh://git.indexdata.com/home/git/pub/yaz commit ba13392e39d4e60db21b7017babbefacd8da8e0f Author: Adam Dickmeiss Date: Thu Sep 8 08:43:31 2011 +0200 yaz_filepath_resolve: path search for abs fname If fname is absolute, the path is not searched. commit 828e4c72181fb748b1f12072351f4cd3e5be4dd5 Author: Mike Taylor Date: Wed Sep 7 17:46:01 2011 +0100 Fix conv_xslt() error-reporting when stylesheet is not found. (The value of fullpath is meaningless in this situation.) commit 151897160304fd7e59a3109ad310ab31950c6c44 Author: Adam Dickmeiss Date: Wed Sep 7 12:22:03 2011 +0200 Version 4.2.14 commit f59fb84215267865b80710429592d7295f9d436d Author: Adam Dickmeiss Date: Wed Sep 7 11:00:02 2011 +0200 CQL node: un-init memory commit ff4dc282083d2c1920329cd6e7406a10669494dd Author: Adam Dickmeiss Date: Tue Sep 6 20:54:04 2011 +0200 New function yaz_srw_sortkeys_to_sort_spec commit 77aaeaf4801a896d3eaa93b8d76a81be82d95bad Author: Adam Dickmeiss Date: Tue Sep 6 16:26:59 2011 +0200 SRU 1.1 sorting for ZOOM_query_sortby2 commit 57cae124c6a1c7cdd8c70090db636b227887fc19 Author: Adam Dickmeiss Date: Tue Sep 6 13:14:44 2011 +0200 New ZOOM utility ZOOM_query_sortby2 That takes a strategy parameter: one of "z3950", "type7", "cql", "sru11" or "embed". The "embed" chooses type-7 or CQL sortby depending on whether Type-1 or CQL is actually sent to the target. "sru11" not implemented yet. commit 9b2f4955aee1fcee3702bcd832dbaf7fca7243ad Author: Adam Dickmeiss Date: Tue Sep 6 13:11:30 2011 +0200 New functions yaz_sort_spec_to_{cql,type7} These two new functions convert a Z39.50 SortKeySpecList to CQL SORTBY and Type-1/RPN with type-7 sorting. Tests in test_sortspec.c. commit c4aebcfe8750bd421de0c06820fdddb4e4443a11 Author: Adam Dickmeiss Date: Mon Sep 5 10:34:14 2011 +0200 rpn2solr supports Z39.58 truncation (104) Thus, CCL truncation mode t=z will make it possible to use both single-character mask (#) and wildcard (?) in CCL . Throw diagnostic for left truncation because that is not supported by SOLR. commit 11b233f8da71f0017d5625772a714ba50a026ae6 Author: Adam Dickmeiss Date: Thu Sep 1 15:01:12 2011 +0200 Version 4.2.13 commit 72ac2c02c91e8cdadbe18ac50cd0fd6d57a51437 Author: Adam Dickmeiss Date: Thu Sep 1 14:59:40 2011 +0200 Notes on changes commit 147ae312f9a9ea0e8d74517812eab22fdb87946f Author: Adam Dickmeiss Date: Thu Sep 1 14:47:46 2011 +0200 Update m4 for improved ICU check fixes commit 3423bbadcfd00b7965e7b4728adc4bc274e5bae4 Author: Adam Dickmeiss Date: Thu Sep 1 14:46:58 2011 +0200 yaz-client: allow scanpos of "none" For special value scanpos "none", yaz-client omits preferred position in response for scan. commit 135a70856fc99547451ea919da242e7e7382acea Author: Adam Dickmeiss Date: Tue Aug 30 12:26:29 2011 +0200 cql2pqf: refactor truncation handling and fix Z39.58 mode Refactor the CQL to PQF term code in cqltransform.c. Characters that don't need escaping aren't and characters that do need escaping are. For example CQL query a#a? must be handled as a Z39.58 mode query because the trailing ? (single-character mask in CQL). But since the generated term includes #, it must be escaped and survive the PQF parse, thus the result is "\\#a#" (was "a#a# before). Also the CQL term a*3 now produces "a?\\3" rather than "a?3" . This is becauase a?n has special meaning in Z39.58. Characters that do need escaping are the PQF specials " and \\. Rest are preseved and \-sequence in CQL are otherwise removed. commit c508282c3e52e145f998d0bb85c0ea6b36fe956c Author: Adam Dickmeiss Date: Mon Aug 29 15:57:05 2011 +0200 CQL/CCL/PQF conversion fixes. CCL support for Z39.58 trunc Lots of fixes for the conversions from CQL to CCL; CCL to RPN; RPN to CQL. yaz_encode_pqf_term's term parameter properly escaped into PQF term. CCL truncation configuration t=z enables Z39.58 truncation which is in fact CCL truncation, but there's more to it than one might think anyway. The RPN to CCL conversion handles Z39.58 truncation as well (5=104). commit 454ce0647544a588751b4a0fe536253a84867362 Author: Adam Dickmeiss Date: Mon Aug 29 13:04:57 2011 +0200 cql2ccl: term code for all/any sequences as well commit f7a3b7f177753fbe82a172efc1b61d59141991ae Author: Adam Dickmeiss Date: Mon Aug 29 12:33:30 2011 +0200 cql2ccl: fix handling of \\ commit e47569dbfbafa2ff798e0fe3ad5a32f26f3fc972 Author: Adam Dickmeiss Date: Mon Aug 29 12:24:08 2011 +0200 Add test of cql_to_ccl commit 23d1547f65851be2000c717bbddf32b380e2900e Author: Adam Dickmeiss Date: Mon Aug 29 12:21:59 2011 +0200 Trunc 104 is Z39.58 commit fda1ca39e89e4c7f3479c0a9d2a1e38acfdb46bb Author: Adam Dickmeiss Date: Mon Aug 29 12:06:18 2011 +0200 cql2ccl: handle CQL \-sequences differently For most CQL \-sequences do not produce \-sequence in resulting CCL term. Only \" and \\ are special commit bfb2ef5f27f900c15c13a239081ad9fa217e91ec Author: Adam Dickmeiss Date: Mon Aug 29 10:29:22 2011 +0200 bin-1 ref: mention Index Data's extensions commit 26e1223d0b98f56cf288fb8fdf1acaa15047db2b Author: Adam Dickmeiss Date: Sun Aug 28 00:09:45 2011 +0200 ccl2rpn: more characters to escape (regexp-1). commit ed6736a60464a131d0edb37467c15cf010bc588f Author: Adam Dickmeiss Date: Sun Aug 28 00:09:38 2011 +0200 rpn2cql: handle \\ sequence commit cf4a74a0d6b17bf1c6582835a7fceaec7ad4115d Author: Adam Dickmeiss Date: Sun Aug 28 00:07:48 2011 +0200 PQF parsing: handle \\\0 sequence A truncated PQF term, backslash as last character, would resolve in read one byte beyond end of string. commit c47f8dac157aaadeb46841c6537c3dc2a0164403 Author: Adam Dickmeiss Date: Sat Aug 27 16:03:18 2011 +0200 Version 4.2.12 commit 295502cfb885ae2dde3523d76bd691f01de3477c Author: Adam Dickmeiss Date: Sat Aug 27 15:38:59 2011 +0200 cql2ccl: quote term characters, except operators Fixes #4584. commit fa1a9e8e89873bad70a3707d95262e6e6c2ec457 Author: Adam Dickmeiss Date: Thu Aug 25 14:40:02 2011 +0200 Version 4.2.11 commit e902d25ca34c8498c6ccff8c9278ec0513d7c1b9 Author: Adam Dickmeiss Date: Thu Aug 25 14:36:14 2011 +0200 Changes commit 835fe1fa5d34428ba2803cd4a2b1a9b9aec48ab0 Author: Adam Dickmeiss Date: Thu Aug 25 14:06:40 2011 +0200 ccl2rpn: Conversion to regexp-1 terms (trunc=102). For mode t=x, the CCL parser will map both # and ? to their regular expression equivalents (. and .*). commit e1f778342e0563a5cf8e5ca34d5be264afa1340e Author: Adam Dickmeiss Date: Thu Aug 25 14:05:41 2011 +0200 rpn2cql: deal with truncation=102 (regexp-1) And ensure proper quoting of reserved CQL characters. commit 2bbab1599d7da506eca84f47ff4d70b2829a45b6 Author: Adam Dickmeiss Date: Thu Aug 25 13:56:20 2011 +0200 cql2ccl: deal with both * and ? in conversion Also leave escaped ones as is, so that they are pass-through. commit d22199db5fdac737990cebcd0f7c77232fcf5d0c Author: Adam Dickmeiss Date: Wed Aug 24 21:45:53 2011 +0200 CCL: retain ? for CCL terms commit 6cf204a1f25e251bc6de07f4254125b174a14c3a Author: Adam Dickmeiss Date: Wed Aug 24 17:58:07 2011 +0000 Version 4.2.10 commit 84831e1cdf373b303ac548002ae944f0ae0cc1d5 Merge: 1dfd68d 5fddafa Author: Mike Taylor Date: Wed Aug 24 15:03:17 2011 +0100 Merge branch 'master' of ssh://git.indexdata.com/home/git/pub/yaz commit 1dfd68dfcf6792062a242e78f7f93ebce3fa50d3 Author: Mike Taylor Date: Wed Aug 24 15:02:59 2011 +0100 Describe recent changes. commit ea883a980a6b7c787a7f68d3e270d94630048666 Author: Mike Taylor Date: Wed Aug 24 15:01:06 2011 +0100 rpn2cql_structure() supports proximity nodes (except that the Type-1 proximity node's "exclusion" binary is ignored, as there is no way to express that in CQL). Fixes bug #4564. commit f0b41a3b124a6305b14ae188361f11e0db9b3eb3 Author: Mike Taylor Date: Wed Aug 24 14:59:50 2011 +0100 Ignore generated script yaz-url commit 68a59422720c8dd69b2f070dc562fe56b4ec0b49 Author: Mike Taylor Date: Wed Aug 24 14:49:47 2011 +0100 Public declaration for yaz_prox_unit_name() commit 5fddafa991a00d90f1f9691458e026464b0fb213 Author: Adam Dickmeiss Date: Wed Aug 24 15:35:00 2011 +0200 ZOOM: HTTP prepare for reconnect if server don't say so In case the server HTTP/1.1 says Keep-Alive, we set the reconnect_ok to 1, if it closes anyway. Fixes #4555. commit 8532ec227a5c21c4a5d63bf81a40ddf47fef9d5d Author: Mike Taylor Date: Wed Aug 24 14:34:51 2011 +0100 static prox_unit_name() renamed to yaz_prox_unit_name(), made external. commit 85e483aa6245bb163485b57f1f77719dc1cf24b8 Author: Adam Dickmeiss Date: Wed Aug 24 15:14:56 2011 +0200 GFS: mention -K in usage commit a9a9b042053d185970dbb47c807305e2661ab35a Author: Mike Taylor Date: Wed Aug 24 12:44:53 2011 +0100 Lint-clean: void out an unused return value. commit ed907bd829d0a9e00cfd1b0f3cf0d41dc68563c6 Author: Adam Dickmeiss Date: Tue Aug 23 18:27:41 2011 +0200 zoomtst3: setting option step=5 This is to illustrate the step option and to check that it actually works. commit fc99a84b59f1b806f51eb5e4db0cdf44371048a4 Author: Adam Dickmeiss Date: Thu Aug 18 10:28:51 2011 +0200 Version 4.2.9 commit 4b92edda23ae263000414a98e037c5b9c226dd5f Author: Adam Dickmeiss Date: Wed Aug 17 15:50:11 2011 +0200 zoomsh: fix SEGV for set command wo value commit 86bfbf5acd6fd03bc1d483cdd6cc1f8ba30da6c4 Merge: d1f18e9 efb6e9d Author: Adam Dickmeiss Date: Tue Aug 16 10:30:10 2011 +0200 Merge branch 'master' of ssh://git.indexdata.com/home/git/pub/yaz commit d1f18e923658fe9817fbda7b510ae40e9be69e7f Author: Adam Dickmeiss Date: Tue Aug 16 10:27:20 2011 +0200 Check for invalid COMSTACK addresses Check return value of cs_parse_host in cs_create_host_proxy. For example, yaz-url would SEGV if ssl/https was given and SSL was not enabled in the built (as it happens on Windows). commit efb6e9da30907327939837a4d4e6374048d986e3 Author: Adam Dickmeiss Date: Fri Aug 12 09:57:14 2011 +0200 nmake: build yaz_url commit db40cd121fcb1e7a2d25a350ce683cbe8b4687b6 Author: Adam Dickmeiss Date: Thu Aug 11 12:56:06 2011 +0200 Version 2.4.8 commit 4c2a1989cfcdeba0338fce5fe9152a37837ef28a Author: Adam Dickmeiss Date: Thu Aug 11 11:23:54 2011 +0200 yaz-url + man page installed and part of packages commit bbb858cba04873a77ae3d55f759c4226cbd61eec Author: Adam Dickmeiss Date: Thu Aug 11 10:45:16 2011 +0200 Update other version of tcpip_straddr for https too commit bef3628f699c3d747292bd6c87a733818e618e6c Author: Adam Dickmeiss Date: Thu Aug 11 10:43:06 2011 +0200 yaz-url: Opt -O writes output to file instead of stdout commit 58391187e99197eed163baa468c0b979c7b942b7 Author: Adam Dickmeiss Date: Thu Aug 11 10:42:11 2011 +0200 tcpip_straddr: Use port 443 for https commit 12024d4ca595416375e534b44f2465543f1c0fa3 Author: Adam Dickmeiss Date: Thu Aug 11 10:33:38 2011 +0200 GFS: close connection immediately if EOF is received. Previously the assocation was marked DEAD and that could lead to a few seconds hang on SSL connections. commit ec603701ef51f85beef83898aa36e385028692f1 Author: Adam Dickmeiss Date: Thu Aug 11 10:31:25 2011 +0200 SSL: Handle EOF case in ssl_get If gnutls was in use and gnutls_record_recv returned 0 (EOF) the ssl_get function would never terminate. commit 15aeea31b59ead99109571dcf67a5f3b78fd5585 Author: Adam Dickmeiss Date: Thu Aug 11 10:26:48 2011 +0200 sockets: fix for whether poll is available The select(2) wrapper was in use even though poll(2) was available. commit e413e4b687759bbb7410e6153a3557a16c7e07f0 Author: Adam Dickmeiss Date: Thu Aug 11 08:33:50 2011 +0200 yaz-url: HTTP method may be given. Change header (-H) option. Argument for -H is now name:value rather than name=value - it just seems more natural for Web hackers that way. commit 2e45e866cd91bf96707fdc0a278e8481773c4c86 Author: Adam Dickmeiss Date: Thu Aug 11 08:21:08 2011 +0200 yaz-url: display usage if no ULRs are given commit 8cd8912e4ff99fd53ff78a028f7d84418e494b0d Author: Adam Dickmeiss Date: Wed Aug 10 15:03:53 2011 +0200 New utility yaz_url: fetches HTTP content This is a simple wrapper around COMSTACK and HTTP utilities; deals with proxy'ing. commit 4487d4c1bac624b4d02f99ad0f1239e405bed425 Author: Adam Dickmeiss Date: Wed Aug 10 11:23:19 2011 +0200 zoomsh: fix set command to use remaning args for value Before, only one token was taken as value for set (or one would have to quote if a token contained space). commit 2a890281a1ded6f53a1a6cbaaceea24e1b8f43e0 Author: Adam Dickmeiss Date: Wed Aug 10 11:22:56 2011 +0200 yaz_pqf_parse_facet_list returns FAIL (0) for bad facet spec commit 65fc6d0e2ca1ebe2d5a949f382a70b93f02ba88f Merge: 73662ac cfb1b8f Author: Adam Dickmeiss Date: Tue Aug 9 18:42:49 2011 +0200 Merge branch 'master' of ssh://git.indexdata.com/home/git/pub/yaz commit 73662ac185d4f1151c0b99cde88aecd4c26fc097 Author: Adam Dickmeiss Date: Tue Aug 9 18:41:27 2011 +0200 yaz_pqf_parser_facet_list also reads term list Thus yaz_pqf_parser_facet_list might also be used to create a facet response. commit cfb1b8ff4632b51bec4e5eab18137081efdfb02d Author: Adam Dickmeiss Date: Fri Aug 5 16:24:08 2011 +0200 New utility: nmem_strsplit_escape commit dcf6101fd8cf823c366b0703243381e8a0e11d75 Author: Adam Dickmeiss Date: Fri Aug 5 14:55:32 2011 +0200 Testin wrbuf_insert commit 027d8648a24b0b61b31a5f1752b29520791fd2fd Author: Adam Dickmeiss Date: Fri Aug 5 14:35:20 2011 +0200 New WRBUF utility: wrbuf_insert commit 3bd3293043f3c2ef02dc448cd707045376085ef6 Author: Adam Dickmeiss Date: Thu Aug 4 14:14:22 2011 +0200 Remove unused code commit d78eafbc5889e1f4602116cf6627b1f0dc1da100 Author: Adam Dickmeiss Date: Thu Aug 4 13:32:15 2011 +0200 Base64 utilities public commit 59aa88eb085c71e191802510804588a4f9edbe9b Author: Adam Dickmeiss Date: Thu Aug 4 13:00:25 2011 +0200 Remove variables and assignments with no effect As warned by newer GCC. commit 37fbd309fef590f0cc0e3bc955161bcb8e37e99e Author: Adam Dickmeiss Date: Thu Aug 4 13:00:02 2011 +0200 zoomsh: remove unused code for cmd facets commit 7ac6428937b4b235b59446ea7ca3f13a0378ed5c Author: Adam Dickmeiss Date: Thu Aug 4 12:59:22 2011 +0200 void mixed stmt/var declare commit e097399fc00cac905e6267bd2a1cfd2c23665e60 Author: Adam Dickmeiss Date: Thu Aug 4 12:58:40 2011 +0200 client: proper recid passing commit 29846d8b70756fceab1c76a524e172f68ad23cbe Author: Adam Dickmeiss Date: Wed Aug 3 13:39:47 2011 +0200 Version 4.2.7 commit 4aaca71aaade2a94eab1806a11967d672e7c90dd Author: Adam Dickmeiss Date: Wed Aug 3 11:40:33 2011 +0200 ZOOM: addinfo includes HTTP content when SRU decode fails When ZOOM C sees an SRU responst that it cannot decode it returns "meta" diagnostic ZOOM_ERROR_DECODE/10003 . The additional info now contains the HTTP content. commit 108a41cd16f10f21aad2bcdb74525ec4d5c94b34 Author: Adam Dickmeiss Date: Tue Aug 2 14:14:29 2011 +0200 Make json_write_wrbuf available commit 4540ab99193bc04001545865d0a71ea8d3bf3cd0 Merge: 5b25820 23886f9 Author: Adam Dickmeiss Date: Fri Jul 29 17:59:48 2011 +0200 Merge branch 'master' of ssh://git.indexdata.com/home/git/pub/yaz commit 23886f924273c18724a87b3c21a1c3f58f194d75 Author: Adam Dickmeiss Date: Thu Jul 28 14:18:54 2011 +0200 Version 4.2.6 commit 89a547847448c1288ce39a0d5af1a1f18378e979 Author: Adam Dickmeiss Date: Thu Jul 28 14:18:46 2011 +0200 Add YAZ_EXPORT for wrbuf_vp_puts commit ec96e7e16229e96777b3fa24ba12972e71c84915 Author: Adam Dickmeiss Date: Thu Jul 28 11:32:13 2011 +0200 ZOOM: throw diagnostic for invalid sru value commit 893f68144651cf991409de76198f98610b0567a0 Author: Adam Dickmeiss Date: Wed Jul 27 16:20:06 2011 +0200 rpn2cql: check for proper truncation attributes commit ef37da81cb79e50520faa5a2274423359353075a Author: Adam Dickmeiss Date: Wed Jul 27 15:41:41 2011 +0200 Reformat commit cfe5f99ac4ab3fda679a35e5d9591495a5879a05 Author: Adam Dickmeiss Date: Wed Jul 27 15:07:05 2011 +0200 cql2xcql: option -s deals with CQL sortkeys commit 38d2e7b4d30b060d3b6dc85e0e3f57c4930c6313 Author: Adam Dickmeiss Date: Wed Jul 27 15:06:35 2011 +0200 Adding new utility wrbuf_vp_puts commit fcdccb3e9a757d41e1bdf6c18c2b3bdb2314ca3f Author: Adam Dickmeiss Date: Wed Jul 27 15:04:31 2011 +0200 Header updates commit 896b145fa7a02199bfc3e8aa824c018b9d7cbf98 Author: Adam Dickmeiss Date: Tue Jul 26 09:38:07 2011 +0200 Remove assignment to variables not in use. Fixes warnings produced by GCC 4.6.1. commit 5b25820db8435aeb54205c4ef6c9155407fb3acc Merge: cf813a4 d951267 Author: Adam Dickmeiss Date: Mon Jul 25 21:05:00 2011 +0200 Merge branch 'master' of ssh://git.indexdata.com/home/git/pub/yaz commit d951267dfd65b4b0741d9b9621474f2731ea3b45 Author: Adam Dickmeiss Date: Mon Jul 25 13:50:34 2011 +0200 Add cclxmlconfig.obj commit cf6bf2f04ed7e376bfd9a37f7ef4ab0366f46804 Author: Adam Dickmeiss Date: Mon Jul 25 12:55:02 2011 +0200 yaz_is_abspath: drive letter test NOT using isalpha isalpha is problematic for signed chars and we assume drive letters are [a-zA-Z] only; also isalpha depends locale. commit 17144b85fb59bb8e0bdf1f8f634c339d88baf069 Author: Adam Dickmeiss Date: Mon Jul 25 12:52:48 2011 +0200 Reformat commit 9dba177f0fcfff591da208b07428ae3d45666084 Author: Adam Dickmeiss Date: Mon Jul 25 12:44:03 2011 +0200 Change yaz_filepath_resolve for path="" (empty) Applying empty path is equivalent to not passing a path at all or passing just the path ".". commit cf813a4e4ab337aeb540e75fd6373c27d6f8cadd Merge: 4a7e5fa 796a205 Author: Adam Dickmeiss Date: Fri Jul 22 12:53:35 2011 +0200 Merge branch 'master' of ssh://git.indexdata.com/home/git/pub/yaz commit 796a205f03250e4ed1eb4986f3e7a0feb36dd2bb Author: Adam Dickmeiss Date: Thu Jul 21 10:16:21 2011 +0200 Version 4.2.5 commit f9ee3b9ec26306b6397c37434e8066f084d33b3a Author: Adam Dickmeiss Date: Wed Jul 20 14:16:35 2011 +0200 ZOOM HTTP: refactor and simplify redirect/proxy code commit aaddb3668a93e2048e2237463a375ec3f48b68bb Author: Adam Dickmeiss Date: Wed Jul 20 11:02:13 2011 +0200 ZOOM C: fix un-init var for cookie buffer commit 1220d32af6f85baf5057172291be5dc882f6e777 Author: Adam Dickmeiss Date: Tue Jul 19 16:04:39 2011 +0200 ZOOM HTTP: proxy uses full URI in HTTP header Squid don't seem to like GET /?operation.. HTTP/1.1 but rather GET http://host/?operation HTTP/1.1 When HTTP proxy is in effect. When proxying the new function cs_create_host_proxy is used to so comstack type is determined from logical URL rather than proxy host. Proxy just needs host:port type of spec. Note: this change might break HTTP redirect. commit 05ee6a02d78ff422ddb63bb4ebbc2f5988d9a121 Author: Adam Dickmeiss Date: Tue Jul 19 16:03:32 2011 +0200 Add cs_create_host_proxy This is similar to cs_create_host but allows a proxy to be given. Comstack type is still taken from vhost (logical host). commit dd339eebb35a0068c15962d9a6872a95b79755f7 Author: Adam Dickmeiss Date: Tue Jul 19 14:13:24 2011 +0200 MARC line decoding: be less picky about length given Still, the MARC record must have 5 leading digits so we can distinguish this from header and other lines. commit a01e8d12dab3fbde9c494338f15f8177e04e98a1 Author: Adam Dickmeiss Date: Tue Jul 19 13:02:29 2011 +0200 cql_to_ccl deals with proximity , bug #4407 The CQL proximity modifiers are supported: unordered (CCL %), ordered (CCL !), distance with relation <= and < , unit with value word. Anything but those throws an error. commit d00ba88308804905d281209e6d90de0d9f12c959 Author: Adam Dickmeiss Date: Tue Jul 19 11:12:05 2011 +0200 Reformat commit 98a78d8028fa4835369006de527353d7e33f1ef9 Author: Adam Dickmeiss Date: Tue Jul 19 11:06:00 2011 +0200 Fix up SRU recordData with pseudo root This is to make recordData XML parseable (document) in case it is an XML fragment. The inserted root is . Fixes #4453. commit 301bd3892284e83875d90bd7a65f48366c81213d Author: Adam Dickmeiss Date: Mon Jul 18 13:27:59 2011 +0200 Spell fix commit 4a7e5fa76ce41e82c7e028aea763bcf63cd0237b Merge: 3b04841 38d3faf Author: Adam Dickmeiss Date: Fri Jul 15 21:14:41 2011 +0200 Merge branch 'master' of ssh://git.indexdata.com/home/git/pub/yaz commit 38d3fafb8baf5f2d0a3acfcb5a72f5994e75d4a4 Author: Dennis Schafroth Date: Fri Jul 15 15:48:29 2011 +0200 Create constant for SRW max parameters commit 12ab7a040623d875c3e324e6a1df20652087b551 Author: Dennis Schafroth Date: Fri Jul 15 15:47:55 2011 +0200 Encode special characters in term commit 7d2cc7589c630c539f114b24eaff53a98b696005 Author: Dennis Schafroth Date: Fri Jul 15 15:47:03 2011 +0200 Add support for extra parameters commit 7b2533f27f7bec5518fd73cf3b04c1f18d66e287 Author: Dennis Schafroth Date: Mon Jul 11 13:37:57 2011 +0200 Spell fix in comment commit f1354830c806b65e6ec6dfdc66dba451715608fc Author: Dennis Schafroth Date: Mon Jul 11 13:36:38 2011 +0200 Escaping : commit 3b048412a86f31a520c83d8604569c88ec9cbbf6 Author: Adam Dickmeiss Date: Sat Jul 9 18:10:02 2011 +0200 Reformat commit 11ef4db1458a878796cf3600bb67a2e140584227 Author: Adam Dickmeiss Date: Sat Jul 9 18:08:54 2011 +0200 Fix spelling of YAZ_OPTIONS_H commit 2e1d346b82bb60f3286e2fdd3a9a3eb6ff75cdf4 Merge: 443e78f fc9ad74 Author: Mike Taylor Date: Tue Jul 5 23:51:06 2011 +0100 Merge branch 'master' of ssh://git.indexdata.com/home/git/pub/yaz commit 443e78f2e7d7894a1a9cb3cac79e4b1a84ec7a11 Author: Mike Taylor Date: Tue Jul 5 23:42:31 2011 +0100 The static function bool(), which is part of cql_to_ccl_r(), now makes some attempt to recognise and deal with proximity. Right now, all it does it recognise the CQL operator name "prox" and map it to the CCL operator "!" rather than the unrecognised plain word "prox" -- this suffices to get SOME indication of proximity into the resulting CCL, which is a big step forward for bug #4407. We ought to check for a an /ordered=0 relation modifier and emit "%" instead in that case. commit fc9ad7425061fafd9340229aa006c4db115deee7 Author: Adam Dickmeiss Date: Tue Jul 5 23:49:51 2011 +0200 GFS: properly initialise scan stepSixze commit 05ce3a6e0133e8d3279c193f9be066198cf0b8b6 Author: Adam Dickmeiss Date: Wed Jun 29 16:47:33 2011 +0200 Debian control: split long lines commit 281911a2d5a2599b56158e90779cad02c5aaf496 Author: Adam Dickmeiss Date: Tue Jun 21 15:10:11 2011 +0200 Version 4.2.4 commit 0f9a136e988a7f9813a9a6c8f6e014c4e2653e30 Author: Adam Dickmeiss Date: Tue Jun 21 12:39:12 2011 +0200 Fix uninit-memory for sru/solr databaseRecord commit 1fe0314280248c8f6d91deaaee26568369774831 Author: Adam Dickmeiss Date: Tue Jun 21 12:38:27 2011 +0200 Another fix for ccl_qual_dup commit 1a2bd22f51e34404b8bc130a3314ad8e99e2e2d7 Author: Adam Dickmeiss Date: Mon Jun 20 11:34:03 2011 +0200 cql2cql: convert mask char '*'=>'?' commit 3775cbf69e7cfefce240f69fc43e148d0a64fa60 Author: Adam Dickmeiss Date: Fri Jun 17 12:48:34 2011 +0200 Version 4.2.3 commit 4e0757c4ea6d3081ccdd5420d8a80926c858c960 Author: Adam Dickmeiss Date: Fri Jun 17 12:15:55 2011 +0200 ccl_qual_dup fixes; previous version totally broken commit 1f3fef356c699a9d7c68902cd6d3e33b08c3cc4e Author: Adam Dickmeiss Date: Fri Jun 17 11:08:27 2011 +0200 CCL: new utility ccl_qual_dup Function ccl_qual_dup makes a copy of a CCL_bibset. commit 989d5bac118f61e95638cf994b168ef29822443f Author: Adam Dickmeiss Date: Fri Jun 10 14:36:21 2011 +0200 Version 4.2.2 commit aed766ddea6fe0f47304816ed5d16983b4079125 Author: Adam Dickmeiss Date: Fri Jun 10 14:33:08 2011 +0200 Update for new source ccl2ccl commit 211fa151f2239cfecd08a212e00be8d27f7a35a7 Author: Adam Dickmeiss Date: Fri Jun 10 14:30:32 2011 +0200 Fix return values for cql_to_ccl_buf commit 02d2f2409c58ab49ab535758d85d70fae0f651f4 Author: Adam Dickmeiss Date: Fri Jun 10 14:01:26 2011 +0200 Add cql_to_ccl_buf commit fccc0e1dbb7cc7937abb742071d55ab36df96aaa Author: Adam Dickmeiss Date: Fri Jun 10 13:41:43 2011 +0200 cql2xcql: option -c makes conversion to CCL. By default cql2xcql converts to XCQL (XML). commit 2cf1b669768e41118f6937dd0afab37c8ed586a8 Author: Adam Dickmeiss Date: Fri Jun 10 13:40:39 2011 +0200 Add cql_to_ccl and cql_to_ccl_stdio. These utilities makes a rough conversion from CQL parse tree (cql_node) to a CCL string. commit c3cbd042e2c98206d2976806d14075f5f57e1617 Author: Adam Dickmeiss Date: Fri Jun 10 11:06:31 2011 +0200 Ignore test programs commit 4493d0acd68f0d3f1b0f1b6c79e3934bfa3207ed Author: Adam Dickmeiss Date: Thu Jun 9 15:25:17 2011 +0200 Work around a bug in ucol_getSortKey The problem seen is that ucol_getSortkey writes one byte at the capacity position. This in turn, results in malloc heap corruption. commit 9a23e52dbba0f2f6d7ab85361e3c53ac9f222446 Author: Adam Dickmeiss Date: Tue Jun 7 09:40:56 2011 +0200 Version 4.2.1 commit 6275cc5093f8226cbfab6906fcbd4f5c11f1c70c Author: Adam Dickmeiss Date: Mon May 30 11:22:56 2011 +0200 No need for ExternalToolBuilder commit a374152c4737fd8716a3f56052fce7c7680a4e9f Author: Adam Dickmeiss Date: Mon May 30 11:15:12 2011 +0200 Eclispse CDT: Use external Makefile Use External Builder and Makefile as produced by configure. commit 8c46ec68792635e698d8f6e83de83b9da37eebed Author: Adam Dickmeiss Date: Fri May 27 12:50:07 2011 +0200 test_xml_include: no test wo Libxml2 commit 47c02bcca227aca4fe6b17916a2c734a3e8421ce Author: Adam Dickmeiss Date: Fri May 27 12:47:25 2011 +0200 Reformat commit 0b09ad5de6d4790b75d8ac2aabc59b36e55834ab Author: Adam Dickmeiss Date: Fri May 27 12:27:47 2011 +0200 Fix compilation without Libxml2 (broke in 4.2.0) commit db073edc9e7834e7f71f1fa9f76866aeb29e0421 Author: Adam Dickmeiss Date: Tue May 24 12:34:52 2011 +0200 yaz-client: no extra blanks for searchResult-1 display This partly reverts 3c0e13a1. Facets as still indented. commit 74dc4c62bbdf03c3f7eb22f08836f11acd468449 Author: Adam Dickmeiss Date: Mon May 23 22:47:03 2011 +0200 Remove redundant comment commit a0e777e0003305532d60edce436ae8f4cc360453 Author: Adam Dickmeiss Date: Wed May 18 11:59:04 2011 +0000 Version 4.2.0 commit a14df7391f90790b0db8e4e286e7252e06bf8c38 Author: Adam Dickmeiss Date: Wed May 18 12:23:18 2011 +0200 Simplify facet parse commit b6b28dc63b69535fdab4e3d25b8ef30b6022f75e Author: Adam Dickmeiss Date: Wed May 18 10:51:23 2011 +0200 Reformat commit 665fb4d99b4cd1cf7cbd47f9bf289559e8a545cc Author: Adam Dickmeiss Date: Wed May 18 10:44:57 2011 +0200 Rename define FACET_DElIMITER->FACET_DELIMITER commit 3236c79e8d4287738236a804fe887ce4094fc9e9 Author: Adam Dickmeiss Date: Wed May 18 10:43:21 2011 +0200 yaz-client: reformat commit df19fd9743e7aa080e4b228572b0a116dbf76b7a Author: Adam Dickmeiss Date: Wed May 18 10:40:29 2011 +0200 yaz-client: remove unused define commit 77eb8faa2fa82a314874df3243cac0ca153adccf Author: Adam Dickmeiss Date: Wed May 18 10:39:14 2011 +0200 yaz-client: rework facet command; fix leak commit 8121243279bcd990bbbca2b80715467472003565 Author: Adam Dickmeiss Date: Tue May 17 15:22:15 2011 +0200 yaz-ztest: 10 facet entries by default commit b41a475db81d89458d4267b27e98f302c4519316 Author: Adam Dickmeiss Date: Tue May 17 12:25:28 2011 +0200 Add yaz_utf8_check A function that checks whether a string appears to be UTF-8 encoded. commit 847dc126960b1bcc6ce8cef8a73e3606588770af Author: Adam Dickmeiss Date: Mon May 16 15:54:00 2011 +0200 SOLR + facets: use Odr_int for counts For hit counts/occurrences Odr_int is used - not int, that usually has a limit of 2^31-1. Use also facet_term_create_cstr for creating Z_FacetTerms to use Odr_int and avoid Z_Term intermediate(s). commit 66dd1c1a5916fa62a186ba7d95804aa5a3fe6ca2 Author: Adam Dickmeiss Date: Mon May 16 15:53:10 2011 +0200 Add z_Term_create for creating Z_Term things commit 27ce41db1ab7b1a386d1a37dda90d4e143a2fc2c Author: Adam Dickmeiss Date: Mon May 16 13:38:20 2011 +0200 yaz-icu: fix compilation without ICU (disabled) Move declaration inside YAZ_HAVE_ICU section. commit 0dedb61924122466aeaba3557c3dc81a8f6ede4d Author: Adam Dickmeiss Date: Mon May 16 13:34:03 2011 +0200 buildconf.sh: update package list for compiling with sources commit 7d7e192def2fef342d235ea894eddb1e89edd714 Author: Adam Dickmeiss Date: Fri May 13 15:18:40 2011 +0200 Add new function nmem_strsplitx. This is like nmem_strsplitx but allows us to specify whether to collapse delimitors or not. The existing nmem_strsplit do collapse (collapse parameter = 1). commit dceeaf843f3bd4c87d667ed62fd4b5446d934cff Author: Adam Dickmeiss Date: Fri May 13 12:18:04 2011 +0200 GFS: fail if CQL properties can not be opened commit 068c332ae7dc06df7d4e0cc396061651720e9e50 Author: Adam Dickmeiss Date: Thu May 12 15:05:42 2011 +0200 SOLR tests: start work on decode tests commit 369d5e89785b7aefa6a269724692586af0215a91 Author: Adam Dickmeiss Date: Thu May 12 15:04:16 2011 +0200 SOLR decode: avoid creating empty records array Do not create records array if num_records == 0. commit 34356a0306446525cc3b2a5ddc268d77e5ade288 Author: Adam Dickmeiss Date: Thu May 12 13:58:40 2011 +0200 SOLR facets: no magic for non-date facets No longer remove/append _exact for facet names. Facets must be given from the API with their full names. commit 1597ca1e5e29c86afb20eee69de3db40f4c23ed8 Author: Adam Dickmeiss Date: Thu May 12 13:57:51 2011 +0200 Reformat; rename fun relationattr -> sortorderattr commit 33a39e24078032c9f726cacdf32c092fa0fe878d Author: Adam Dickmeiss Date: Thu May 12 13:03:58 2011 +0200 Add test for SOLR stuff; memory based, no network. commit 4849119cd60244ee5ed16958e885bc97315d23ad Author: Adam Dickmeiss Date: Thu May 12 13:02:25 2011 +0200 Reformat commit fc405db33968e9d67cfc066cdfcee2b8bdae6164 Author: Adam Dickmeiss Date: Thu May 12 13:02:02 2011 +0200 Reformat commit cc210c8334133d10df376ba1d914d34d96798e32 Author: Adam Dickmeiss Date: Thu May 12 13:01:45 2011 +0200 Reformat commit b57fc2b5c6741125e2ab27872a4898531f6408de Author: Adam Dickmeiss Date: Thu May 12 13:01:42 2011 +0200 Reformat commit 065b4a0fb49a47f88257a7fe49c1941a148286fa Author: Adam Dickmeiss Date: Wed May 11 14:47:12 2011 +0200 zoomsh: show returned facets (if any). commit c6d8de13a9a2fe8f1afed51bc57ec2b130b87365 Author: Adam Dickmeiss Date: Tue May 10 12:09:53 2011 +0200 CQL: ajd is a CQL 2.0 relation commit a6f6d77b75984f05b97942cfcca1b64d661fc76a Author: Adam Dickmeiss Date: Tue May 10 12:08:55 2011 +0200 CQL grammar: rename two terminals commit b80bf43768c7e00315720abde4cbd644fafa2bd1 Author: Adam Dickmeiss Date: Tue May 10 11:25:22 2011 +0200 Update to CQL 2.0 as of Feb 2011 Add all remaining relation symbols. Get rid of QUOTED_URI_STRING and make it a terminal instead based on QUITED_STRING. If not, the grammar is seriously broken, ie, search terms like "http://www.indexdata.com/" would be forbidden. Note that the search_term now (as for CQL 1.X) allows terms like 'and', 'or', 'sortby' . commit 9549afd48c2dc297f9bcd832d7ef9cea8c336f13 Author: Adam Dickmeiss Date: Tue May 10 10:43:36 2011 +0200 CQL grammar: simplify a bit WRT relations commit c52f7aa360f7aab46fe904e00293d8c3de7f77b8 Author: Adam Dickmeiss Date: Mon May 9 15:45:54 2011 +0200 Fix yacc grammar WRT prefix_assignment commit bdc72ca302452e555308e716c2f1e1743866a9ef Author: Adam Dickmeiss Date: Fri May 6 14:57:26 2011 +0200 GFS: convert to CQL sortkeys if CQL to PQF is used If CQL to PQF is in use by GFS, then it will also parse CQL sortby material and convert it to srw_sortkeys. commit dd993ee2910a754d46b2223c06b09abdd61caceb Author: Adam Dickmeiss Date: Fri May 6 14:56:51 2011 +0200 cql_sortby_to_sortkeys: handle modifiers. And add cql_sortby_to_sortkeys_buf. commit 4d827d4162155ab4514acb05dd2a1a38c29f4bcf Author: Adam Dickmeiss Date: Wed May 4 17:22:23 2011 +0200 CQL: start work on cql_sortby_to_sortkeys commit 7dfff1f7b79d8a3cf5f5ed62c71f6e4c2a616072 Author: Adam Dickmeiss Date: Wed May 4 16:09:29 2011 +0200 Reformat a bit commit ea44785920112e329fbc94c2e70758e6378eb775 Author: Adam Dickmeiss Date: Wed May 4 16:05:05 2011 +0200 CQL: handle SORT node in a few places In particular, CQL to PQF transform was broken after introduction of the SORT node. commit 4c5aa7d3ec9d1fe3fff1473e56b5690450ef4311 Author: Adam Dickmeiss Date: Wed May 4 15:15:32 2011 +0200 Add two CQL sortby tests commit b756b711841bac38e5b69baa51939ca9e1c01adb Author: Adam Dickmeiss Date: Wed May 4 15:09:33 2011 +0200 Renamed sh-based tests commit 262800f89e3280c5b594faf6eea2c98e988ee2cb Author: Adam Dickmeiss Date: Tue May 3 16:04:00 2011 +0200 CQL sortby; conversion to XML done. The cql_node struct has not changed size but a new type of node CQL_NODE_SORT is new. Strictly speaking this breaks binary compatibility so perhaps this has to be enabled "actively", by API. Bug #608. commit ed51c750eb5540c5a3a34ef3beb0c043a6e65f7c Author: Adam Dickmeiss Date: Tue May 3 14:28:20 2011 +0200 Add emacs/vim local variables commit 5038ee934566dcef1d366c32be2e54f53a0e4b99 Author: Adam Dickmeiss Date: Fri Apr 29 11:21:55 2011 +0000 Add Debian wheezy, Ubuntu natty commit 6bf58f547a8c58ec4ce4fefda177aec9e92c197e Author: Adam Dickmeiss Date: Fri Apr 29 10:18:39 2011 +0200 Omit redundant include of yaz/yconfig.h. commit cee361c60ab22518b0864d46d2c7b2b472ad797d Author: Adam Dickmeiss Date: Wed Apr 27 15:33:17 2011 +0200 Avoid printf %.*s for arbitrary strings Use wrbuf_write instead of wrbuf_printf in a few places for fixed length buffers. Use wrbuf_puts instead of wrbuf_printf when printf is not needed. There is a problem with printf("%.*", len, buf) when buf is in different encoding from what is given by LANG variable.. At least when readline is in use. commit 4f3bcae93d51a26709c12b51261c3d95af610cb2 Author: Adam Dickmeiss Date: Tue Apr 26 14:33:23 2011 +0200 Avoid ctype.h . The ctype.h-functions depend on the LANG environment which might be set to something totally different than a server application assumes. We also do not need anything but ASCII based checks (HTTP protocol for one). isxxx functions also require an unsigned int and a cast. These casts can be avoided now. commit 1fbd038d97d6e1bfe97270ecc17cca123bcc435c Author: Adam Dickmeiss Date: Mon Apr 11 13:05:17 2011 +0200 Rename internal func yaz_use_attribute_create commit 5bfd14747afb35c8009f9d6eb960c1b887717cab Author: Adam Dickmeiss Date: Mon Apr 11 12:14:41 2011 +0200 Log SRU auth params in GFS commit b7279e4a1668b45b6e6edbfeb7f45515dcabe191 Author: Adam Dickmeiss Date: Mon Apr 11 12:12:38 2011 +0200 SRU SOAP decoding: handle HTTP basic auth as well Call yaz_srw_decodeauth in the SRU SOAP decoder function yaz_srw_decode. commit dbd362a3dc1cfcafbcbafee0d5b28a4397fe7f03 Merge: d6717ba 977d04b Author: Adam Dickmeiss Date: Mon Apr 11 11:20:10 2011 +0200 Merge branch 'master' of ssh://git.indexdata.com/home/git/pub/yaz commit d6717ba6822aea328e4a456edcf0318261cdc175 Author: Adam Dickmeiss Date: Mon Apr 11 11:18:18 2011 +0200 Handle password=0 for z_HTTP_header_add_basic_auth Avoid 0-ptr reference for z_HTTP_header_add_basic_auth . If NULL password is passed that is treated as treated as empty string. commit 977d04b2e65976b61396ff0e6cf97d4a883643cf Author: Dennis Schafroth Date: Thu Apr 7 14:13:59 2011 +0200 Remove empty lines and out-commented irrelevant test commit 9e6452d5c86ff5f0056803b95bcd26efd77a698a Merge: 6d79c6e c8a79e2 Author: Dennis Schafroth Date: Thu Apr 7 14:07:35 2011 +0200 Merge branch 'master' of ssh://git.indexdata.com/home/git/pub/yaz commit 6d79c6e2281fb22a755f95a15b3da16c3ace7c3a Author: Dennis Schafroth Date: Thu Apr 7 14:07:03 2011 +0200 Remove symbolic tests. Works only for ccl commit 617f469c9c7f5846d4ae3d53ac17616a09a49415 Author: Dennis Schafroth Date: Thu Apr 7 14:06:14 2011 +0200 Add truncation tests commit 173572735db6564239b28435231d34fada3fb446 Author: Dennis Schafroth Date: Thu Apr 7 14:05:32 2011 +0200 Fix left-right truncation fix commit c8a79e28da9f30fe4db703e598a33f63d22048c7 Merge: f668865 801004d Author: Adam Dickmeiss Date: Thu Apr 7 13:58:13 2011 +0200 Merge branch 'master' of ssh://git.indexdata.com:222/home/git/pub/yaz commit f66886517ee1fbd4acd34d9942d9edde802a8c7b Author: Adam Dickmeiss Date: Thu Apr 7 13:57:27 2011 +0200 NSIS: Set InstallDir depending on x86/x64 commit 4d300e643896e74f94514065da5236fc24f14b13 Author: Adam Dickmeiss Date: Thu Apr 7 13:57:05 2011 +0200 nmake: add make64 target commit 801004d08d99b46b34f9a1b2342b9a5c13337d95 Author: Dennis Schafroth Date: Thu Apr 7 13:42:50 2011 +0200 Test for truncation. Not sure how CQL handles it commit 4f2a5c81a0efcee0fcd92bb89998126ee5dfd8e2 Author: Dennis Schafroth Date: Thu Apr 7 13:41:40 2011 +0200 Test that would have caught the truncation flags switch commit b68bf3d66b984c7dab7d4fe8707d761e7cc8c896 Merge: a675503 8e4e5fd Author: Dennis Schafroth Date: Thu Apr 7 13:39:08 2011 +0200 Merge branch 'master' of ssh://git.indexdata.com/home/git/pub/yaz commit a6755038fe15be8e6aca7e062a0577407bb640a2 Author: Dennis Schafroth Date: Thu Apr 7 13:35:05 2011 +0200 Fix left/right switch of truncation flag commit 8e4e5fd8b258f7e3db8a5356cfc8ccddddebd150 Author: Adam Dickmeiss Date: Tue Apr 5 13:50:08 2011 +0200 Mods to tests to avoid clang warnings commit 44480613eaf589ad4cad250a3ef0bd9299b26c50 Author: Adam Dickmeiss Date: Tue Apr 5 13:32:22 2011 +0200 Adjust code a little to avoid clang warnings commit 86f056a3c67a9b6bb76f231c8cbaa010ce7f89b1 Author: Adam Dickmeiss Date: Fri Apr 1 14:03:21 2011 +0200 test_icu uses sortkey. Calls ICU cleanup. commit 47d9d5ac3241f8db09ba19a1a5c1fdd5e140e75f Author: Adam Dickmeiss Date: Thu Mar 31 14:34:44 2011 +0200 Reformatting commit 058d8ab3655c243e23e0adcb29a8fea345e9fa53 Author: Adam Dickmeiss Date: Thu Mar 31 14:23:38 2011 +0200 Reformatting commit 3dfa732aa036db355ccfc199a419c0ed90772a37 Author: Adam Dickmeiss Date: Thu Mar 31 14:21:44 2011 +0200 Make element_name_append_attribute_value static This, strictly speaking, changes binary compatibility but since this function was never declared in a public header we can get by .. commit 7c182a7a93e1f99fad3403946776c7167dbb7e08 Merge: 74f55d9 c1ee92c Author: Adam Dickmeiss Date: Wed Mar 30 16:03:04 2011 +0200 Merge branch 'master' of ssh://git.indexdata.com:222/home/git/pub/yaz commit 74f55d91dabcfa4f82e481e1a49ac57937d82d2f Author: Adam Dickmeiss Date: Wed Mar 30 16:01:45 2011 +0200 Build 64-bit YAZ with Libxml2, libxslt and ICU Make variable ICU_DIR replaced with ICU_LIB, ICU_INCLUDE and ICU_BIN. commit c1ee92c068d11468080418f5a5a5c44028deafa7 Author: Adam Dickmeiss Date: Wed Mar 30 13:50:20 2011 +0200 yaz-icu.c refactor and cleanup Use config parameter consistently. Call u_cleanup during exit to better cheak for leaks in ICU usage. commit 6cbdacfdeef5982e7d588aac5fabd5299732e78d Author: Adam Dickmeiss Date: Wed Mar 30 13:41:42 2011 +0200 yaz-icu: input file may be given. As an alternative to stdin.. Needed it for a gdb run and it seems useful. commit 79f064dd58f7d27cd29e429566f302bb18d87b9e Author: Adam Dickmeiss Date: Wed Mar 30 13:41:12 2011 +0200 Remove redundant utf-16 buffer term commit 86878f261a0679ae4cbddad2f8eb3208722e2e3b Author: Adam Dickmeiss Date: Thu Mar 24 10:33:34 2011 +0100 ZOOM: diagnostics for invalid ES usage, bug #3893. commit c1250b6b91fc106645f28bff1d6188936434a494 Author: Adam Dickmeiss Date: Thu Mar 17 09:19:22 2011 +0100 GFS: make statserv_main return for one-shot mode. Bug #4064. commit 3e45202a276daf769ce4727bc47147a1e669d4b1 Author: Dennis Schafroth Date: Wed Mar 16 14:54:09 2011 +0100 Remove extensive debug logging commit b0438903da4a34ce1dab8dbdc35eb3d938cbba90 Merge: c43e561 9b1c573 Author: Adam Dickmeiss Date: Tue Mar 15 14:19:48 2011 +0100 Merge branch 'master' of ssh://git.indexdata.com/home/git/pub/yaz Conflicts: win/yaz.nsi commit c43e561fdfe12989a6040163dae0e28ba0a02453 Author: Adam Dickmeiss Date: Tue Mar 15 14:11:09 2011 +0100 Version 4.1.7 commit b5ea4383e1229096765cfaf00e3c786ae6a3a572 Author: Adam Dickmeiss Date: Tue Mar 15 14:10:46 2011 +0100 NSIS: add configure.ac A nmake rule depends on it so we need it be part of the 'YAZ Source' component. commit 9b1c57318aabdbf8e6d0dc33e3a9848bdf062c64 Author: Adam Dickmeiss Date: Tue Mar 15 13:56:50 2011 +0100 NSIS: add configure.ac A nmake rule depends on it so we need it be part of the 'YAZ Source' component. commit 426de04212512159a1bb46b20d896478cb21c083 Author: Adam Dickmeiss Date: Tue Mar 15 13:28:13 2011 +0100 Update WIN32 makefile for stemmer commit e0cc7cde5fbb0dc5f0c170c9196ffc4eb181b05f Author: Adam Dickmeiss Date: Tue Mar 15 11:23:59 2011 +0100 Update m4 commit a02076d5c1a2ee1e080ea32b3e76c7af751b88b7 Author: Adam Dickmeiss Date: Tue Mar 15 09:44:26 2011 +0100 Multi iconv conversions for yaz_opac_decode_wrbuf2 This function uses iconv handle for MARC first; failing that uses iconv handle supplied to function yaz_opac_decode_wrbuf. Bug #4048. commit 22f541bb03c1fc3e9edbab5f4aaf01e9232bd003 Author: Adam Dickmeiss Date: Tue Mar 15 09:43:18 2011 +0100 Add new function wrbuf_iconv_write_x Is a generic WRBUF writer for iconv+cdata as an option . Returns if writing was successful or not. commit 554423d357ed2bcf4ece977f85de3bc1307d6536 Merge: e5567b5 e7c92da Author: Dennis Schafroth Date: Fri Mar 11 13:36:52 2011 +0100 Merge branch 'master' of ssh://git.indexdata.com/home/git/pub/yaz commit e5567b53a976dd18a2a8b51deaa0189d53a2f226 Author: Dennis Schafroth Date: Fri Mar 11 13:36:39 2011 +0100 out-defined logging of stemming commit e7c92daefc4151eb51197bea80fbd4e80895945f Author: Adam Dickmeiss Date: Thu Mar 10 10:27:53 2011 +0100 Version 4.1.6 commit 14ce856a0a41fb7923d62bd173cd4d8e130f02f8 Author: Adam Dickmeiss Date: Thu Mar 10 10:22:53 2011 +0100 Avoid empty strings for yaz_iconv_open yaz_iconv_open apparently returns a non-null handle in case of to=(null) and from="" .. Avoid we call it this way. This resulted in bad records for Pazpar2 and was introduced in YAZ 4.1.5. commit e6f0ebc4aaded2fc0cfa36a78f7dc65a3b1e0d70 Author: Adam Dickmeiss Date: Tue Mar 8 14:22:10 2011 +0100 Fix date for NEWS commit 7bf4ce353e55ef9159f0eeb4c40fec3035c87ab4 Author: Adam Dickmeiss Date: Tue Mar 8 13:54:07 2011 +0100 Version 4.1.5 commit be199f850bc95c9908259e8c595b154081eadf93 Merge: 275390c fd43f84 Author: Adam Dickmeiss Date: Tue Mar 8 13:30:55 2011 +0100 Merge branch 'master' of ssh://git.indexdata.com/home/git/pub/yaz commit 275390c6f75f5f1adf39a0bae4893168b95f7695 Author: Adam Dickmeiss Date: Tue Mar 8 13:28:34 2011 +0100 Separate OPAC record character set for ZOOM_record yaz_record_render allows a character set given as charset=from/opacfrom,to where 'from' is the character set of a bibliographic record, 'opacfrom' is character set of OPAC record and 'to' is the target character set. commit 45bf7a223153a11dcc07b1f1cb988f02af3a23f1 Author: Adam Dickmeiss Date: Tue Mar 8 13:28:10 2011 +0100 Implement yaz_opac_decode_wrbuf2 This function behaves likes yaz_opac_decode_wrbuf but takes yaz_iconv_t to allow character set conversion different from yaz_iconv_t part of yaz_marc_t. This is because OPAC record ASN.1 fields may have different encoding from the bibliographic MARC record. commit fd43f843d1366a7565533e66212507106bda5664 Author: Dennis Schafroth Date: Fri Mar 4 13:16:36 2011 +0100 Fix: import header so we dont return a int and seg.fault on that. commit 94524e7e3c8e47eaeabb16a246b3e892a75e7dbb Author: Dennis Schafroth Date: Fri Mar 4 12:26:55 2011 +0100 methods for handling DADS SRU-proxy facets commit 3b61496132dbd2b2127745cd9a3b4eeed8296ec5 Author: Dennis Schafroth Date: Fri Mar 4 12:25:55 2011 +0100 Refactor location of utility methods commit d71588ed52b5d84fa39a815f8c3893933a96dcbe Author: Dennis Schafroth Date: Fri Mar 4 11:26:35 2011 +0100 Add yaz_use_atttribute_create to private API commit 8cd027fbc995dce7192bdaeb5a9a7c87a411a2ac Author: Dennis Schafroth Date: Fri Mar 4 11:25:37 2011 +0100 Moved yaz_solr_use_atttribute_create to srwutil. Support for null attribute name in match_xml_node_attribute commit edfd7d1201e61701d29241bb684d85880a822310 Author: Dennis Schafroth Date: Thu Feb 24 12:23:07 2011 +0100 New non-public resultsets_count commit f3b96837fa4c86d0f10a9b167f94e897338bd16c Author: Adam Dickmeiss Date: Mon Feb 21 12:52:35 2011 +0100 Version 4.1.4 commit 9885c9c651e293561fad21cbc7d01b6b7b47e5c2 Author: Adam Dickmeiss Date: Mon Feb 21 12:42:36 2011 +0100 yaz-client: show may XML format records Command show followed by 'format' will format XML records retrieved using Libxml2's xmlDocDumpFormatMemory function. commit 46371c08c10cc1b0d9d101590e60f58ba65b5b11 Author: Wolfram Schneider Date: Sat Feb 19 12:52:50 2011 +0100 document icu4 for FreeBSD commit e4f86070d38505130eed815469a439f299eaaabd Author: Wolfram Schneider Date: Sat Feb 19 12:43:51 2011 +0100 update help message for FreeBSD commit f5e58c21e2318579bdfa500abfc483fa35b8c733 Author: Wolfram Schneider Date: Sat Feb 19 12:37:50 2011 +0100 run on FreeBSD 8.1 Release commit 17fe7bc7f9aba476c245d128e17f551f83dd5fdd Merge: 095bd74 7bfdd9c Author: Dennis Schafroth Date: Fri Feb 18 13:48:18 2011 +0100 Merge branch 'master' of ssh://git.indexdata.com/home/git/pub/yaz commit 095bd74d0cc1cfd3bd4123da0a5fbeafbd1462ce Author: Dennis Schafroth Date: Fri Feb 18 13:47:59 2011 +0100 Remove unnessesary union commit 7bfdd9cdcbfd12d6690278c9b56a7ac26b2457e9 Merge: 222aad8 4e9f63d Author: Adam Dickmeiss Date: Wed Feb 2 09:20:24 2011 +0100 Merge branch 'master' of ssh://git.indexdata.com/home/git/pub/yaz commit 222aad8dece12c5a93a4dd8a67899933e4bd875e Author: Adam Dickmeiss Date: Wed Feb 2 09:19:35 2011 +0100 For phpyaz: set YAZVERSION, not YAZ_VERSION Thanks to Dave Burgess for pointing that out. commit 4e9f63d38f168dacc4952779e195e85bf46e61ed Author: Adam Dickmeiss Date: Sat Jan 29 15:35:07 2011 +0100 Fix compilation for case of unavailable ICU commit 3747235c36b720719687808418b60a2a33ea6c8d Merge: 3ec3ad2 792769e Author: Adam Dickmeiss Date: Thu Jan 27 14:44:47 2011 +0100 Merge branch 'master' of ssh://git.indexdata.com/home/git/pub/yaz commit 792769e081699489f37f1d7d34e3c8d49e098e66 Merge: 33054ee a03737d Author: Dennis Schafroth Date: Thu Jan 27 14:32:25 2011 +0100 Merge branch 'master' of ssh://git.indexdata.com/home/git/pub/yaz commit 33054ee1b9de573a3de49e09267b1bfb912c5a0c Author: Dennis Schafroth Date: Thu Jan 27 14:32:20 2011 +0100 New libstemmer test commit 3ec3ad2bd1e248022bbb7c9d762844bef7f8a461 Author: Adam Dickmeiss Date: Thu Jan 27 14:06:06 2011 +0100 Version 4.1.3 commit 152722adad30e645e48890daf3c38910e52afaf1 Author: Adam Dickmeiss Date: Thu Jan 27 13:56:42 2011 +0100 Update NEWS commit 9c0c683e8e673023dec619948a62513d9a94a179 Author: Adam Dickmeiss Date: Thu Jan 27 10:43:39 2011 +0100 RPM: Release includes 'indexdata' name Use indexdata in release name so this package can be distinguished from other vendors. commit a03737d4f0a631d0c90521a8b5ad813c624c2d9c Merge: b637f5d 50efb1a Author: Adam Dickmeiss Date: Thu Jan 27 10:37:48 2011 +0100 Merge branch 'master' of ssh://git.indexdata.com/home/git/pub/yaz commit 50efb1a28ec6dc05a88280c404ee8c39e3d3c07e Author: Adam Dickmeiss Date: Thu Jan 27 10:37:18 2011 +0100 Fix distcheck for libstemmer_c commit b637f5d4f5d2aea0fba9a338da386e62a10dfd00 Author: Adam Dickmeiss Date: Thu Jan 27 10:27:59 2011 +0100 GFS: Z_PresentStatus_partial_4 for missing record If bend_fetch handler returns no error and no record, the present request is considered partial (only a subset of the records could be returned by backend), and so it is appropriate to set Present Status to partial-4. commit e7fe65bb0895a91714b664eff5d88602ea2524a5 Author: Adam Dickmeiss Date: Tue Jan 18 12:20:24 2011 +0100 RPM: use libgnutls-devel on SLES11. commit 17791e5c56b616ad9f845ae3d38f27fe2f0bbd46 Author: Adam Dickmeiss Date: Fri Jan 14 16:28:32 2011 +0100 Define tcpwrappers for fedora, redhat, suse commit 8a26576a7adf8cdec539d24055cff561020e6bc6 Author: Adam Dickmeiss Date: Fri Jan 14 15:43:53 2011 +0100 Multiple BuildRequires commit 7b1bbfddfb6e9d68c645388e3279a4990a6592ef Author: Adam Dickmeiss Date: Fri Jan 7 13:07:18 2011 +0100 Set YAZ_VERSION (php-yaz relies on it) commit ff8389b05aaf988715c0d67fbce43bfb25e5c6fd Author: Adam Dickmeiss Date: Fri Jan 7 10:56:39 2011 +0100 Update copyright-year commit 43a9d38d20c1b1bcd1a03b2445a501d27526bd35 Author: Adam Dickmeiss Date: Thu Jan 6 16:18:56 2011 +0100 Happy new year commit 3c7699211080055df1bb6fdcc2f45b95a096cf18 Author: Adam Dickmeiss Date: Thu Dec 23 11:16:26 2010 +0100 Update m4 commit 92d27e4d818fdd4613e42ea79184974c39d34c93 Author: Adam Dickmeiss Date: Wed Dec 22 14:48:05 2010 +0100 yaz-config: Use exec_prefix, libdir, includedir Use these variables as determined by configure commit f378ccccc2423f903390908eb8e9c41a015921c0 Author: Adam Dickmeiss Date: Mon Dec 20 13:55:57 2010 +0100 RPM: make it relocatable commit 8bfdf45d149101c4c3088c061094b5867e160822 Author: Adam Dickmeiss Date: Mon Dec 20 07:51:18 2010 -0500 Moved yaz.spec.in to yaz.spec commit 5909f3400a7e326c0a64bb56bc0567488669534f Author: Dennis Schafroth Date: Tue Nov 16 12:02:48 2010 +0100 Return no yaz_stemmer on misconfiguration. Handle null pointer in clone and destroy correctly commit c0e78d06e1febedac76533f51ae75971cf5a84d8 Merge: 0f073ba 640be7d Author: Dennis Schafroth Date: Fri Nov 12 13:41:14 2010 +0100 Merge branch 'master' of ssh://git.indexdata.com/home/git/pub/yaz commit 640be7dfc9e6f7b4e15520cdc21caca957db9aec Merge: 6d7c7f9 22a1022 Author: Adam Dickmeiss Date: Fri Nov 12 11:21:45 2010 +0100 Merge branch 'master' of ssh://git.indexdata.com/home/git/pub/yaz commit 6d7c7f983e151470b2e543b76a4ce727686d914c Author: Adam Dickmeiss Date: Fri Nov 12 11:21:36 2010 +0100 Bundle more stemmer sources with dist commit 22a1022ca71a2b44b0f2e03dcf782be16375e0c1 Merge: 13ae824 487a3ad Author: Dennis Schafroth Date: Fri Nov 12 11:17:24 2010 +0100 Merge branch 'master' of ssh://git.indexdata.com/home/git/pub/yaz commit 13ae8240df93fc9a717ab9e069f356df1d9eca7f Author: Dennis Schafroth Date: Fri Nov 12 11:17:19 2010 +0100 Fix: using right destroy method commit 0f073baf2183a54f2a5691e697fde68c9a5f50c5 Merge: 31c5e5f 487a3ad Author: Dennis Schafroth Date: Thu Nov 11 15:13:20 2010 +0100 Merge branch 'master' of ssh://git.indexdata.com/home/git/pub/yaz commit 487a3ad015d2b63976a25022ec603b2cb8e76de6 Author: Dennis Schafroth Date: Thu Nov 11 14:27:01 2010 +0100 Fix: Destroy utf8 buffer with utf-8 buffer destroy commit 29f1edd41f3cc72bca9a2aacd10d6fd49f681aa8 Author: Adam Dickmeiss Date: Thu Nov 11 14:23:16 2010 +0100 Using different ICU diagnostic code commit 5a3e6fa63181ab4afa8bce5f01c6de016a333334 Author: Dennis Schafroth Date: Thu Nov 11 13:16:26 2010 +0100 Ups... memory leak commit 7b5b162f32acb625e9afba21e88acb56ca2ab04f Author: Dennis Schafroth Date: Thu Nov 11 13:13:04 2010 +0100 Test for stemming commit 640ef4d07f0b09f70578dccc4cda6d282ed6b281 Author: Dennis Schafroth Date: Thu Nov 11 13:06:44 2010 +0100 Stemmer implementation working. - Snowball stemmer now works. - Implementing "No Operation" for invalid settings. But returning error. commit c21a01f2a1dfff7f62636b251d4d129a9f0fbeec Author: Dennis Schafroth Date: Thu Nov 11 13:04:57 2010 +0100 Fix copy and paste code commit 3252229521745ee6413d1a5357a6348d36f87622 Author: Dennis Schafroth Date: Wed Nov 10 15:20:32 2010 +0100 Add Snowball API implementation commit afd1acce31b61e54fdc7550b4e7488c9b8511f5e Author: Dennis Schafroth Date: Wed Nov 10 15:19:29 2010 +0100 Updated to slimmed down snowball library: English/porter support commit b5b083d6c36e61c77b8b67980c155dde0a539ca5 Author: Dennis Schafroth Date: Wed Nov 10 14:41:16 2010 +0100 First implementation of yaz_stemmer API. Can compile. commit bcf7ddf816372109c2f46fe2bb959b80ebc491c9 Author: Adam Dickmeiss Date: Wed Nov 10 10:03:07 2010 +0100 Update libstemmer_c commit ec0326d927a40c3b5d917d35432ee06ad554f023 Author: Adam Dickmeiss Date: Wed Nov 10 10:00:02 2010 +0100 Update to new current libstemmer_c commit 2089dfbe2339c6f3e856e76f9b99e8fdda6ea8b8 Author: Adam Dickmeiss Date: Wed Nov 10 09:46:24 2010 +0100 Stemmer C sources part of libyaz_icu library commit fff2dc6469e36483e4547732aa8414fe3fe71183 Merge: c22010a bda8b16 Author: Adam Dickmeiss Date: Wed Nov 10 09:27:40 2010 +0100 Merge branch 'master' into stemming commit c22010a486adc7fe881418f831873dd62b7860f1 Author: Dennis Schafroth Date: Tue Nov 9 13:44:34 2010 +0100 Ignore some eclipse setting commit 7c078095142e5e064c88f238b9f3b6f5c7f0f82d Author: Dennis Schafroth Date: Tue Nov 9 13:43:34 2010 +0100 Add config.h stuff commit b3109da9bf75d6cb6c0e3cb003d9646d050cc2b9 Author: Dennis Schafroth Date: Tue Nov 9 13:37:25 2010 +0100 Add libstemmer_c (Snowball) as sub module commit bda8b16040f9cc9a5f5d7e90981c97a1726a9cca Author: Adam Dickmeiss Date: Tue Nov 9 13:14:45 2010 +0100 Deb: announce 4.1.0 because of new JSON OID commit 9e04bbdbec82ea6f5795dc2d16bd9876ecc7762f Merge: e1ad0cf 29fc3c6 Author: Dennis Schafroth Date: Mon Nov 8 18:05:54 2010 +0100 Merge branch 'master' into stemming Conflicts: src/icu_chain.c Merge minor ICU change and test changes. Fix includes to include config.h. Fix Makefile: Include stemmer in libyaz_icu. commit e1ad0cf93484f86cbdcd53c73219eef124332dfc Author: Dennis Schafroth Date: Mon Nov 8 16:27:47 2010 +0100 Modify icu_chain to support yaz stemming commit 827d331a56e9c2b17983717155b74c2f3e5808fd Author: Dennis Schafroth Date: Mon Nov 8 16:26:47 2010 +0100 Add yaz stemmer file commit 1064b0521a608ba2c985f893772315819a990372 Author: Dennis Schafroth Date: Mon Nov 8 16:25:23 2010 +0100 Add Stemming API (following ICU transforms) commit 29fc3c6ee42b1c1bd2200c950393326007fa0d83 Author: Adam Dickmeiss Date: Mon Nov 8 15:30:55 2010 +0100 ICU: refactor step creation commit d5f0d8d7b52fa2dbf5b44654c877ae2506dc4a54 Author: Adam Dickmeiss Date: Mon Nov 8 15:29:28 2010 +0100 ICU: add test for multi-line rule commit 08fcb37b8bac4d5573b6afec27c3f3df4119781f Author: Adam Dickmeiss Date: Mon Nov 8 15:25:01 2010 +0100 Dont work with NULL chains commit af3b1f509a27cb38ca5c9cb7a22cd384f5ca7c70 Author: Adam Dickmeiss Date: Mon Nov 8 15:24:46 2010 +0100 ICU: remove check for attr rule (not required) commit ed329d8fb558a860215b29aea90ff688488bcf45 Author: Adam Dickmeiss Date: Mon Nov 8 15:11:18 2010 +0100 ICU rules may be specified as CDATA below the rule This allows for multi-line rules, such as ICU custom transliterators. For example: $back = \` ; $back $back > “ ; # generate right d.q.m. (double quotation mark) $back > ‘ ; commit 0e948cf6b84b6e601f3c7c12c83921e2753cdd1b Author: Adam Dickmeiss Date: Mon Nov 8 14:45:06 2010 +0100 Reformat commit 6b48f480f5095c2f26c628bb29c3a18220a5a278 Author: Adam Dickmeiss Date: Mon Nov 8 13:44:09 2010 +0100 Update ICU URL commit a75989ffbbddaae375ce9a9c3a323e38588cbe4b Author: Adam Dickmeiss Date: Mon Nov 8 13:37:04 2010 +0100 Reformat commit 8e6bdfe54743294add27acc265adae0f6999a9ca Author: Adam Dickmeiss Date: Mon Nov 8 13:34:12 2010 +0100 More consistent ICU info. Update URLs to ICU info commit d0e351c12fff564d876958e860338d43716dc269 Author: Adam Dickmeiss Date: Wed Nov 3 13:05:16 2010 +0100 Update configure to generate config.h commit 3224954c29109b736fb03f9b486fc5953223120c Author: Adam Dickmeiss Date: Tue Nov 2 16:49:42 2010 +0100 test_file_glob: return two files in test commit 25ede22cdd0f258801b169ecb6c787bf8e08ed54 Author: Adam Dickmeiss Date: Tue Nov 2 16:47:50 2010 +0100 yaz_file_glob sorts files commit a668cd0857e0141abba373761d77dbd556b6414a Author: Adam Dickmeiss Date: Tue Nov 2 10:05:58 2010 +0100 Version 4.1.2 commit 43c1d385fc4076fac26aa0a93783b078c7347b5c Author: Adam Dickmeiss Date: Tue Nov 2 10:03:02 2010 +0100 Mention @6 special hostname commit 9ffe61934ffe19de96352b10aad48bfb596c25cc Author: Adam Dickmeiss Date: Mon Nov 1 21:31:40 2010 +0100 Use yaz_log to print info about events; not printf commit d2c24334b58c3fe10d1af36dedb2f4de5a7d9fb9 Author: Adam Dickmeiss Date: Fri Oct 29 15:19:36 2010 +0200 Put yaz_log private data in non-static data Move yaz_log private data, such as log file, file type, log prefix from static to non-static (in a struct). This is to fix a problem where a shared object will see the "old" initialized data - not "current" data. For example, yaz_log_file would return stderr handle in shared object program despite the fact that yaz_log_init_file was called in mother program. The "private" data is combined in a struct yaz_log_info to minimize number of globals (that really are private data to yaz_log). commit 6bb56cea1f0da95aab92c52878f8501a7f4e6a75 Author: Adam Dickmeiss Date: Tue Oct 26 20:11:42 2010 +0200 buildconf.sh -d: use --with-pic commit 31c5e5fa92f5980deac3c042b765e4148329cd1b Merge: c205a1f 29e4554 Author: Dennis Schafroth Date: Tue Oct 26 14:18:06 2010 +0200 Merge branch 'master' of ssh://git.indexdata.com/home/git/pub/yaz commit 29e4554a9be9e8c25f200c3012e7fa4c2d03aaef Author: Adam Dickmeiss Date: Tue Oct 26 12:41:30 2010 +0200 tcp comstack: change behavior for @-specs (anyaddr) @ listens on AF_INET (IPV4) peers, and @6 listens to AF_INET6 (ipv6) peers. Previously @ listened on AF_INET6 which accepted both IPV4 and IPV6 peers on some Linux systems. However, in general that does not work so YAZ can not rely on that to work. Debian changed behavior in this respect from Debian lenny to Debian squeeze (still testing as of Oct 2010). Refer to: http://www.mail-archive.com/debian-devel@lists.debian.org/msg277726.html commit 10bb56d88175ffbc37e37615bd859ca6356c5f5d Author: Adam Dickmeiss Date: Mon Oct 25 14:30:55 2010 +0200 yaz-icu: avoid deprecated ICU API commit 754ccc50d4238e10be1aef777c83b2f86935b99d Author: Adam Dickmeiss Date: Mon Oct 25 14:06:31 2010 +0200 yaz-icu: mention libicu-dev; not old libicu36-dev commit bf522cd3aa2173ec426ae99f4b103a4bbaa04fca Author: Dennis Schafroth Date: Thu Oct 21 14:39:05 2010 +0200 Mention SOLR where SRU. commit 51dcfce92fb00a21315cd06e8330df594e730403 Author: Dennis Schafroth Date: Thu Oct 21 14:36:10 2010 +0200 Fixed spelling error. Add SOLR client only comment commit d52ecf4caac3228a6e543c0ab8c58e1befa1eee1 Author: Dennis Schafroth Date: Thu Oct 21 14:34:03 2010 +0200 Mention SOLR with other protocols commit f18e872c965a03818293cc914fdf30e1ec8f5f65 Author: Dennis Schafroth Date: Thu Oct 21 14:33:11 2010 +0200 Add comment on SOLR non-usage of version commit cc639afc463cc2a31d2e29c80c82a19c1a028228 Author: Dennis Schafroth Date: Thu Oct 21 14:31:33 2010 +0200 Add SOLR version. mentioning SOLR togetheer with Z39.50 and SRU. commit 88465f3bd8186da0903d08e8d1d124c509811541 Author: Adam Dickmeiss Date: Wed Oct 13 21:49:06 2010 +0200 RPM: comma separate package lists (requires) commit 00512e603a9a54c4499c84442fe07ba4c9b0af95 Author: Adam Dickmeiss Date: Tue Oct 12 13:41:30 2010 +0200 DLL Export a few more commit b98bdccf7972f49b21121d828f94e9506787a9c6 Author: Adam Dickmeiss Date: Tue Oct 12 13:41:16 2010 +0200 Add missing SOLR obj for Windows commit 93a9045258440573f0e2a54f0a8b401659778670 Author: Adam Dickmeiss Date: Tue Oct 12 13:26:23 2010 +0200 Add missing %s commit 476854e0207a1a3dddd648f71f5e24510956a142 Author: Adam Dickmeiss Date: Tue Oct 12 13:00:53 2010 +0200 Ubuntu maverick commit 6f60c2ddc5cbb085699d142af7e5836caaf6c69a Author: Adam Dickmeiss Date: Mon Oct 11 13:52:59 2010 +0200 First go at 64-bit install using NSIS Allow to build without documentation (html, css, ent). version.nsi is still required for NSIS. commit a99f6baa6d5d4203853a138de5b138d7e225e832 Merge: aa688c4 5b2fe23 Author: Adam Dickmeiss Date: Mon Oct 11 12:51:45 2010 +0200 Merge branch 'master' of ssh://git.indexdata.com/home/git/pub/yaz commit aa688c4388adbbbf022e0dbfad51e9a12eef37a1 Author: Adam Dickmeiss Date: Mon Oct 11 12:50:56 2010 +0200 Allow compilation without Libxml2 support (again) commit 9629dc2f718a92b415653d494527ee2c3b0640a2 Author: Adam Dickmeiss Date: Mon Oct 11 12:50:47 2010 +0200 Use casts rather than floor(3) commit 5b2fe23e1cffff1c658bdfe26fddc3f84256e7f4 Author: Dennis Schafroth Date: Thu Oct 7 12:31:16 2010 +0200 Describe ZOOM_facet_field_name commit eac6b7eead8e7149a7e1b2ae3954b649054c57c8 Merge: 27b6135 93b69aa Author: Adam Dickmeiss Date: Wed Oct 6 13:30:27 2010 +0200 Merge branch 'master' of ssh://git.indexdata.com/home/git/pub/yaz commit 93b69aa5e5c81d58189d0e6827c1e73b2787bc76 Author: Dennis Schafroth Date: Wed Oct 6 12:59:37 2010 +0200 Eclipse project commit bd9c79c8a78ab881df8e2ba667b24021193151bc Author: Dennis Schafroth Date: Wed Oct 6 12:59:00 2010 +0200 Remove double-check on facet_list. Add facets parse warning commit 7d6ad94dbab567cc2d3e11a648594c4bb8fd4a9b Author: Dennis Schafroth Date: Wed Oct 6 12:56:41 2010 +0200 Add Facets sections, describing the Facets retrieval functions. commit 27b613584082f1221c73ee3d174ba3c02423e130 Author: Adam Dickmeiss Date: Wed Oct 6 12:56:19 2010 +0200 Move yaz-config man pages to section 1 commit a85807bde8a4a08706d266bd7dd089fb6778e281 Author: Adam Dickmeiss Date: Wed Oct 6 12:49:39 2010 +0200 Doc: update to DB 4.4. More metadata for man pages commit b1f0878598c07d7468612d81e8bead22b9d22066 Author: Adam Dickmeiss Date: Tue Oct 5 15:01:19 2010 +0200 Version 4.1.1 For 4.1.0: utility yaz-config did not reports flags and libraries correctly. commit 4c36250e9572cf234b1d43212c64fc438cabf2db Author: Adam Dickmeiss Date: Tue Oct 5 15:00:20 2010 +0200 Fix yaz-config (echo_source not set) commit f47da3c93d2beed65f9149c4550722ac4183c540 Merge: b580b6f 679a658 Author: Adam Dickmeiss Date: Tue Oct 5 11:58:27 2010 +0200 Merge branch 'master' of ssh://git.indexdata.com/home/git/pub/yaz commit 679a6580c9d1ef83446e5f9f3693803c8145b8f2 Author: Adam Dickmeiss Date: Tue Oct 5 11:58:09 2010 +0200 Fix obj filename commit b580b6f606842cac87708b6bdf78140ca8ec0afa Author: Adam Dickmeiss Date: Tue Oct 5 10:13:48 2010 +0200 Version 4.1.0 commit 6a947d9c6d870cf15bb3805e5eaed843663474c1 Author: Adam Dickmeiss Date: Thu Sep 23 14:53:22 2010 +0200 zoomsh: display piggyback recs again Was removed by accident in previous commit. commit f0d23836907782b75c45f9572ff0df25561b2cf8 Author: Adam Dickmeiss Date: Thu Sep 23 14:37:07 2010 +0200 GFS: no-keepalive option, mostly for testing The no-keepalive option is enabled for GFS by supplying option -K. commit e31c087cd8187e3568f4a7af4203672cc5f67118 Author: Adam Dickmeiss Date: Thu Sep 23 14:28:52 2010 +0200 Avoid lost events (bug #3694) The ZOOM_connection_insert_task function no longer calls clear_error. This ensures that events are not lost when a server don't do keepalive. commit ba1a707a2125e63c7180d712f4b8bf3685a17105 Author: Adam Dickmeiss Date: Thu Sep 23 14:27:54 2010 +0200 zoomsh: print events if in async mode commit 544555bd2d47e79737c3a5ecd794bbee697c8f63 Merge: b6aa93d a5795a2 Author: Adam Dickmeiss Date: Thu Sep 23 14:27:10 2010 +0200 Merge branch 'master' of ssh://git.indexdata.com/home/git/pub/yaz commit b6aa93dcb5c07ed09b664c006b5f33b0135a0854 Author: Adam Dickmeiss Date: Thu Sep 23 10:49:07 2010 +0200 zoomtst3: print event name commit 7eb11b475a9600b3e80fc1b1e94f341b99b2a565 Author: Adam Dickmeiss Date: Thu Sep 23 10:48:44 2010 +0200 Using YAZ_OPTIONS_-defines commit 2af72908b33a7847f9e150902f276f8fc95b74ba Author: Adam Dickmeiss Date: Thu Sep 23 10:48:11 2010 +0200 Not using GNU threads anymore commit a5795a2df2095d5a44b012a59426e7b906db3ec9 Author: Dennis Schafroth Date: Wed Sep 22 16:15:26 2010 +0200 Added debug logging to verify ZOOM_EVENT_RECV_SEARCH commit c8eb759d01c901904810106986d58ff1bb72e3f4 Author: Dennis Schafroth Date: Wed Sep 22 16:13:27 2010 +0200 Cosmetic commit b11da5f84991a07de9caf4ab52478e0e5a1028e0 Author: Adam Dickmeiss Date: Wed Sep 15 14:30:09 2010 +0200 Add SOLR material for ZOOM and yaz-client commit b606ea58c401186fc040bba5273d6353aabc230f Author: Adam Dickmeiss Date: Wed Sep 15 14:17:49 2010 +0200 Update doc/common commit cb0cb58575edb434b29bc20468eb6f456a65d9e2 Merge: 7ae6a3d e2cf8e5 Author: Adam Dickmeiss Date: Wed Sep 15 10:56:52 2010 +0200 Merge branch 'master' of ssh://git.indexdata.com/home/git/pub/yaz commit 7ae6a3d178c4f29bad3af081c1882cdb6dcb3e06 Author: Adam Dickmeiss Date: Wed Sep 15 10:56:34 2010 +0200 Simplify yaz-config a bit src_root, build_root values can be taken from automake value. commit e2cf8e560e0a20fb96a52672deb205f4edf0c461 Author: Adam Dickmeiss Date: Mon Sep 13 20:13:13 2010 +0200 Add record syntax JSON / private Index Data OID commit c205a1feaf8e56abc17a0b761b16c35954f469b3 Merge: 2788a5e 55f306a Author: Dennis Schafroth Date: Thu Sep 9 17:37:58 2010 +0200 Merge branch 'master' of ssh://git.indexdata.com/home/git/pub/yaz commit 2788a5e4758bd50376bf2d69409aef9c77b05c42 Author: Dennis Schafroth Date: Thu Sep 9 17:37:50 2010 +0200 Work-around to be removed commit 55f306a7eb44ebfa39c096d2c76ad0cf12a089ea Author: Dennis Schafroth Date: Thu Sep 9 17:36:09 2010 +0200 Add facet.mincount=1 to avoid "ghost" facets commit 03253a9ef705cd30deb32f68f3d310cef407b1a7 Author: Dennis Schafroth Date: Thu Sep 9 16:15:10 2010 +0200 Work-around for bogus SOLR facets when zero hits commit 07127dd94f9d68932f75047f91fd4aed78d2b3cf Author: Adam Dickmeiss Date: Thu Sep 9 14:54:46 2010 +0200 yaz-client: add nl for cs_put error commit d4283605cc2af155bf822d1bcdd7db08868f7ab1 Merge: 87db97b 082b517 Author: Adam Dickmeiss Date: Thu Sep 9 11:35:01 2010 +0200 Merge branch 'master' of ssh://git.indexdata.com/home/git/pub/yaz commit 87db97bc97dd4eb54a4d474f35fb585749135ff9 Author: Adam Dickmeiss Date: Thu Sep 9 11:34:48 2010 +0200 Initialize facetList commit 082b5178292fbba931469da363fe6541dda41c40 Author: Adam Dickmeiss Date: Wed Sep 8 20:29:12 2010 +0200 Fix yaz URL commit 709498d46ca78ef5338d3c4dce36b7e5c5037905 Author: Adam Dickmeiss Date: Wed Sep 8 20:23:34 2010 +0200 RPM: call ldconfig for libyaz4, not yaz commit 540b8919836aede9f2fe7f7a20978fc290e8972c Author: Adam Dickmeiss Date: Wed Sep 8 10:22:22 2010 +0200 Avoid mixed stmt/var declare commit efcd2fc68f269dd52d077da7f46c639d5b803117 Merge: 8f527ef cff93bf Author: Dennis Schafroth Date: Wed Sep 1 14:20:39 2010 +0200 Merge branch 'solr_facets' of ssh://git.indexdata.com/home/git/pub/yaz into solr_facets commit 8f527ef1b249d9665418778c3c0661d5fdf68df3 Author: Dennis Schafroth Date: Wed Sep 1 14:19:46 2010 +0200 Use postfix "_exact" fields for SOLR facet requests. commit cff93bfc3cff822251abf7687bb5791a81b2bf0c Merge: 120d410 b8b750a Author: Dennis Schafroth Date: Tue Aug 31 13:14:42 2010 +0200 Merge branch 'master' into solr_facets commit b8b750a84e0c9f7253d210f9604e385bd84a7569 Author: Dennis Schafroth Date: Tue Aug 31 12:42:04 2010 +0200 Fix: No default of 10 terms. Dont send terms unless limit is set. commit 120d41020531bb15a771971e9287b2f8f2b072ae Author: Dennis Schafroth Date: Mon Aug 30 15:46:22 2010 +0200 Extract handlie_facet_list to function. Used for SOLR as well commit 6e120dc3c508279e1733049e7aeb4626645d5eef Author: Dennis Schafroth Date: Mon Aug 30 15:41:59 2010 +0200 Support for facets for SRW targets (SOLR only) Using method handle_facet_list in zoom-z3950 commit 9d99233343d990135fe697f47f5933b1fd74cb0b Author: Dennis Schafroth Date: Mon Aug 30 15:37:08 2010 +0200 Fix: Initialize facets to empty commit e53c4f335802aa7e8d617b4dafc0908bc50cabce Author: Dennis Schafroth Date: Mon Aug 30 15:36:23 2010 +0200 Fix: allocating string on odr memory commit 44fa6a1823276d0f45796404e0fc5423a6a7f71d Author: Dennis Schafroth Date: Fri Aug 27 13:28:39 2010 +0200 Final bits to get facets from SOLR targets decoded commit 1c0ca5448add3823add4ba4993da0864e2d3657a Author: Dennis Schafroth Date: Fri Aug 27 13:27:30 2010 +0200 Show facets if present in search response commit d3c33ee221a22387ff0c260ba953aeffdd7ea040 Author: Dennis Schafroth Date: Thu Aug 26 16:49:30 2010 +0200 Implement SOLR xml int reader (for term + freq) commit 20e7d4946445ff49378144abbe6ab3f0f70a77d3 Author: Dennis Schafroth Date: Thu Aug 26 16:31:43 2010 +0200 Check for presense of numFound. commit 55af198a15d393b37618e3732ab0825ddc201469 Author: Dennis Schafroth Date: Thu Aug 26 16:30:29 2010 +0200 maximumRecords back to 0. Facets: warn on SRU/W of missing support. commit e73eb663eceab6bf4e364e30d0b59404c69aae16 Merge: a95e1c4 2dd448a Author: Dennis Schafroth Date: Thu Aug 26 15:31:35 2010 +0200 Merge branch 'solr_facets' of ssh://git.indexdata.com/home/git/pub/yaz into solr_facets commit a95e1c4f3d0f4edad819cf20832fbab228db81d3 Author: Dennis Schafroth Date: Thu Aug 26 15:31:31 2010 +0200 Setting maximum records to 20 (testing) commit 2dd448afda333a5db88396d70d539089bf1a572d Author: Dennis Schafroth Date: Thu Aug 26 15:24:53 2010 +0200 add new test function: is_SRW commit d962efcd2c1f0a3abfb0c40e81e298d69a9757bd Author: Dennis Schafroth Date: Thu Aug 26 15:23:59 2010 +0200 re-impl. status check commit 9274947f1618751c10d1eb941692397537e79cae Author: Dennis Schafroth Date: Thu Aug 26 13:53:14 2010 +0200 Fix: facet_list -> facetList in SRW request/response commit b1f4aab8ff8fbf10958a3a18644972165d60621c Author: Dennis Schafroth Date: Thu Aug 26 12:10:45 2010 +0200 Implement encoding of Z_FacetList into SOLR request commit c3603459af001cb368a9906313b63fdc90fefaa3 Author: Dennis Schafroth Date: Thu Aug 26 12:08:56 2010 +0200 Add FacetList to SRW request/response. Change in public API. commit d082d063b2a6939de80d62150a1818d9ab1fe3a6 Author: Dennis Schafroth Date: Thu Aug 26 12:07:57 2010 +0200 Set facets on SRW request. Only implemented for SOLR. commit 93cf5a348dd93d545c30ffa2f2b1aa4bfee62cbb Author: Dennis Schafroth Date: Wed Aug 25 16:47:50 2010 +0200 Decode SOLR Facet response into Z_FacetList commit 869d0e8acb79984b9191576c566cb7753f653ea8 Author: Dennis Schafroth Date: Wed Aug 25 16:46:55 2010 +0200 Add facet list for request and response commit 2b33c56ec97fff11e300f441c88a61e04a176f68 Author: Dennis Schafroth Date: Tue Aug 24 17:52:44 2010 +0200 Remove the extensive logging commit 5e1889250160764822014ce89ee19dc84e5ce310 Author: Dennis Schafroth Date: Tue Aug 24 17:51:55 2010 +0200 Remove the extensive logging commit 83fe7a135733a28f6baecbfb054271163e8f46f6 Author: Dennis Schafroth Date: Tue Aug 24 17:37:35 2010 +0200 Fix: Work-around since zoom-sru handle_srw_response does not work with zero-based records commit 1ab314f533e2942e0898ad5fda346a48312b351a Merge: 09bf942 4eeeeea Author: Dennis Schafroth Date: Thu Aug 19 10:25:18 2010 +0200 Merge branch 'master' of ssh://git.indexdata.com/home/git/pub/yaz commit 09bf9425a83a58f4faf62a4de9fe4b465a8856a8 Author: Dennis Schafroth Date: Thu Aug 19 10:14:01 2010 +0200 Merge single change from local solr_client branch commit 4eeeeead8c63047aed5320c68ccb71f53fa130bd Author: Adam Dickmeiss Date: Thu Aug 19 10:10:45 2010 +0200 Version 4.0.13 in progress commit 8907fda61b461413a30d1634635136bbce540976 Merge: 7be47e0 8c7858e Author: Adam Dickmeiss Date: Tue Aug 17 13:17:12 2010 +0200 Merge branch 'solr_client' of ssh://git.indexdata.com/home/git/pub/yaz into solr_client commit 7be47e0daa09a9cf939668a65831cfaaa22bf2ff Merge: 9082210 aab59e4 Author: Adam Dickmeiss Date: Tue Aug 17 13:16:54 2010 +0200 Merge branch 'master' into solr_client commit aab59e4ad859bc77a361760c9e1dc3ebe6690233 Author: Adam Dickmeiss Date: Tue Aug 17 12:41:50 2010 +0200 Version 4.0.12 commit 8c7858ee7a1266db5ac2e18393ef331cadb687b0 Merge: 91dee59 45beb75 Author: Dennis Schafroth Date: Mon Aug 16 11:01:09 2010 +0200 Merge branch 'solr_client' of ssh://git.indexdata.com/home/git/pub/yaz into solr_client Conflicts: test/Makefile.am commit 91dee596d78d23af4c1ebc9f0c037b1bcb4728fc Author: Dennis Schafroth Date: Mon Aug 16 10:58:00 2010 +0200 eclipse update commit 98573bbc35a5eea1df877e5c887ef909bfaceddd Author: Dennis Schafroth Date: Mon Aug 16 10:57:05 2010 +0200 Add query with sort commit 671844eec000149592321bf3945a163a7078f342 Author: Dennis Schafroth Date: Mon Aug 16 10:54:39 2010 +0200 Added test_rpm2solr.c commit 90822107107281df9caf3ad66a693cb7403b16f8 Author: Adam Dickmeiss Date: Fri Aug 13 14:33:50 2010 +0200 SOLR: Map SRU recordSchema to "fl" commit 45beb75c13c772c5dc305cb443208862f33061c7 Author: Adam Dickmeiss Date: Thu Aug 12 15:27:24 2010 +0200 Rename yaz_solr_encode -> yaz_solr_encode_request commit 96e65728eefb6d7efef6e2f74a3b0d64f92b3c23 Author: Adam Dickmeiss Date: Thu Aug 12 15:22:16 2010 +0200 Rename SOLR HTTP response function From yaz_solr_decode to yaz_solr_decode_response; it only deals with HTTP response decoding. commit e8ab85dcfbcd1cdd8846a0b7f9b10adec780d9f1 Author: Adam Dickmeiss Date: Thu Aug 12 13:49:59 2010 +0200 Add test test_rpn2solr commit bb8c1303f5ffddd9dec1e3527f64fdaaa397698e Author: Adam Dickmeiss Date: Thu Aug 12 13:49:57 2010 +0200 Disable tests that do not yet work commit dfeb387a4744dd3c7ed9df15b3306ae6c35fa22e Author: Adam Dickmeiss Date: Thu Aug 12 13:38:06 2010 +0200 Make some internal functions static These functions were defined non-static by mistake (they were never defined in a header): emit_term, emit_terms, emit-wordlist. commit d2ca9fe2f99c4dd273eb21e00b645bc59c2315e2 Author: Adam Dickmeiss Date: Thu Aug 12 13:20:33 2010 +0200 Add new SOLR headers to header list commit 82130a0421d4d15df51078dd58aa8710e370a8ef Merge: e84dbd9 fabec8c Author: Adam Dickmeiss Date: Thu Aug 12 13:15:36 2010 +0200 Merge branch 'solr_client' of ssh://git.indexdata.com/home/git/pub/yaz into solr_client commit fabec8cc81c901ee77f71e3d8667494b57507e7d Author: Dennis Schafroth Date: Thu Aug 12 13:15:12 2010 +0200 Add SOLR (rpn2solr) support. commit e84dbd9a06cc689f8919049213508db450055d82 Merge: 2ad2651 598a08e Author: Adam Dickmeiss Date: Thu Aug 12 13:13:30 2010 +0200 Merge branch 'solr_client' of ssh://git.indexdata.com/home/git/pub/yaz into solr_client commit 2ad2651374674c895ad59b267da6fe2d8665fabd Author: Adam Dickmeiss Date: Thu Aug 12 13:08:34 2010 +0200 SOLR support for ZOOM and yaz-client The SOLR requests and responses (search only) are encoded in the same structures as SRW/SRU, because they are semantically so equal. It also means minimal change to existing software. However, at this time decoding of a SOLR search response must be instructed by the client. Had the SOLR Webservice used a namespace we might have a cleaner model. For ZOOM, option "sru" may be set to "solr" in which case ZOOM will contact a SOLR server with the URL with suffix "/select". So far the following SRU parameters are mapped: query, startRecord, maximumRecords. commit 1c256a41a684b68d2dea7c5bad34e02293a60de9 Merge: 0ae46bd 205db64 Author: Adam Dickmeiss Date: Thu Aug 12 10:20:33 2010 +0200 Merge branch 'master' into solr_client commit 205db64953fc270a79878b89e5c6abc81c7c041a Author: Adam Dickmeiss Date: Thu Aug 12 10:20:19 2010 +0200 Fix compilation for without libxml2 commit 0ae46bd1e19dcc853c758af505c6f62f1f6be060 Author: Adam Dickmeiss Date: Thu Aug 12 09:59:29 2010 +0200 Refactor ZOOM event, hide more definitions commit 598a08eba1b5875837c606b9105b9d980092b40a Merge: 582c324 83a7bb7 Author: Dennis Schafroth Date: Wed Aug 11 16:37:06 2010 +0200 Merge branch 'solr_client' of ssh://git.indexdata.com/home/git/pub/yaz into solr_client commit 582c324a5b5dc365195133e92f4ca6d02991e43b Author: Dennis Schafroth Date: Wed Aug 11 16:36:56 2010 +0200 Test cases for RPN to SOLR conversion commit 24a717fb09063be70ff56dc82e9f03e7673254e0 Author: Dennis Schafroth Date: Wed Aug 11 16:33:30 2010 +0200 Add SOLR (rpn2solr) support Not 100% working, only basic stuff. TODO: also clean out stuff not needed (based on the CQF files) commit 4e077901ce8ec84a24186bf6f00851b64a00a8a7 Author: Dennis Schafroth Date: Wed Aug 11 16:22:30 2010 +0200 Add new SOLR files for parsing from rpn2solr. (based on the rpn2cpf) Not working 100%. Only very basic parsing. TODO: clean out unused code. commit 83a7bb713c01e6c9b3311c6f5356e76a9a9fb92a Author: Adam Dickmeiss Date: Wed Aug 11 15:59:03 2010 +0200 Refactor ZOOM SRU stuff to separate source commit 61b325b3eedfffade2d918b58b8688911324a2d9 Author: Adam Dickmeiss Date: Wed Aug 11 14:26:13 2010 +0200 Fix filename in Doxygen comment commit f6def128a97444384d6c0939eaa04fb0e931d6df Author: Adam Dickmeiss Date: Wed Aug 11 14:24:15 2010 +0200 Refactor record render to separate source commit 74682526ffcdc625f5d8e7adec296b0d6d23a8b5 Author: Adam Dickmeiss Date: Wed Aug 11 14:03:18 2010 +0200 Refactor record cache to separate source commit 63c48920fd45817bf28177279f65099670fe258b Author: Adam Dickmeiss Date: Wed Aug 11 13:39:37 2010 +0200 Refactor ZOOM_query to separate source commit b7ac19e96f5e53975064b3dec2be6cbd2c1eccb8 Author: Adam Dickmeiss Date: Wed Aug 11 13:09:37 2010 +0200 Refactor ZOOM Z39.50 functions to zoom-z3950.c commit 9bc19cf107a572cfb533cf2c0505acdce4556540 Author: Adam Dickmeiss Date: Wed Aug 11 10:02:15 2010 +0200 Rename some functions to indicate Z39.50 handling commit 88c65669e62d0735931e64392b7c59129f6e68bc Merge: aca4eb8 b3b11da Author: Adam Dickmeiss Date: Wed Aug 11 09:27:40 2010 +0200 Merge branch 'master' into solr_client commit b3b11da5d7ad0d762d85ca912351351b7181d4d7 Author: Adam Dickmeiss Date: Tue Aug 10 15:46:38 2010 +0200 Avoid buffer[length] construct in yaz-ztest commit 5b2f8d46e7248f45b541500508f40959256e7421 Author: Adam Dickmeiss Date: Tue Aug 10 15:44:27 2010 +0200 Update Windows makefile for facets commit b9e418625581f4c56a7b47f7e29f541618d5e2fd Author: Adam Dickmeiss Date: Tue Aug 10 15:41:16 2010 +0200 Fix leak in parse_facet + compilation on Windows yaz_pqf_destroy not called. Constructs such as buffer[length] not supported on Visual Studio 2008. commit 96296b63bd2f5e471b05736910f7bb13984ea77e Author: Adam Dickmeiss Date: Tue Aug 10 12:29:21 2010 +0200 Revert recursive mutex patch We don't need recursive mutexes. Interestingly, PTHREAD_MUTEX_NORMAL and PTHREAD_MUTEX_RECURSIVE from man page pthread_mutexattr_settype are not defined in header pthread.h by default on my Ubuntu Linux (possibly others). Some defines may do trigger a definition of it, but what impact do they have then on other pthread-implementations? It crashed on FreeBSD - it could be fixed by using PTHREAD_MUTEX_NORMAL (rather than 0) for pthread_settype (normal mutex). commit f4294538bbeb77c910b083f1d385cf98d752e5b2 Author: Adam Dickmeiss Date: Mon Aug 9 14:29:09 2010 +0200 Daemon: make core files work if setuid is in use commit 08a57d6b7c0d759bf293fbad03d03363f1cb7bc5 Author: Adam Dickmeiss Date: Mon Aug 9 12:12:27 2010 +0200 GFS is using yaz_daemon commit 3dc0c503f9594142c8568fabb2c8e354377251ef Author: Dennis Schafroth Date: Sat Aug 7 12:00:22 2010 +0200 Fix wrapper function for creating standard mutex. Fix destruction of Mutex attribute. commit df1a0cf4e1b057630ead09d185ca9ef0deddda2e Merge: 9f11f34 8928d4a Author: Dennis Schafroth Date: Sat Aug 7 11:53:31 2010 +0200 Merge branch 'master' of ssh://git.indexdata.com/home/git/pub/yaz commit 9f11f349958f122419856006d9295eb0ce41274d Author: Dennis Schafroth Date: Sat Aug 7 11:53:07 2010 +0200 Add new mutex create where mutex attribute can be set commit aca4eb82b50d781d4ab636cfc15412a2aca3e903 Author: Adam Dickmeiss Date: Thu Aug 5 14:27:32 2010 +0200 yaz-client: seacrh and show for SOLR commit 8928d4a9d67be45d4c60b26a11bc672af3297a8f Author: Adam Dickmeiss Date: Thu Aug 5 11:24:54 2010 +0200 Rename a few Z39.50 specific funcs commit 5f651ec4278aac5bed07f258c879f8f2691cb1c0 Author: Adam Dickmeiss Date: Wed Aug 4 13:29:14 2010 +0200 yaz-client: mark priv funcs static commit 44f9af0d137755e7452711b517dd87f5da95ace2 Author: Adam Dickmeiss Date: Wed Aug 4 13:16:27 2010 +0200 Reformat commit b23a551976e442c5cbb0ee4aa46768904dd57ccf Author: Adam Dickmeiss Date: Wed Aug 4 11:20:22 2010 +0200 Move otherinfo facet stuff to facet.c Reshape functions a little.. No need to pass the facet OID when it is already given that this is facets etc.. commit 0ca041667b871556ef285fe708cf70c6acef64a7 Author: Adam Dickmeiss Date: Wed Aug 4 10:55:29 2010 +0200 yaz_oi_get_facetlist_oid: odr=0 for yaz_oi_update This is because we do not want otherinformation entries to be created by this call. commit 6f64e76889c37909ac321a6149cbe45777e7688c Author: Adam Dickmeiss Date: Wed Aug 4 10:38:21 2010 +0200 yaz-client: otherinfo missing if facet is in use Do not skip index 0 of user-defined otherinfos if facets is in use. commit b56b6242e4e9c0011b9a2dae6d67c3ef0789251f Author: Adam Dickmeiss Date: Tue Aug 3 13:32:54 2010 +0200 Rename attr facet specific functions commit 76b807cf7d5aeff484005ab3168f3193da110f1f Author: Adam Dickmeiss Date: Tue Aug 3 13:21:19 2010 +0200 Reformat. Add YAZ_END_CDECL commit 79e871ca9f4d35a123a8a0dddb60b4a8c8b62dbd Author: Adam Dickmeiss Date: Tue Aug 3 13:10:58 2010 +0200 Rename struct attrvalues to yaz_facet_attr This structure is facet specific and not a generic attribute container. commit 77d462db11123735e9779da5d7783c06457beb75 Merge: 12eae66 46ea0a6 Author: Adam Dickmeiss Date: Tue Aug 3 13:07:40 2010 +0200 Merge branch 'master' of ssh://git.indexdata.com/home/git/pub/yaz commit 12eae66114708ddcbb8e70add6ec6b46db822cb9 Author: Adam Dickmeiss Date: Tue Aug 3 13:03:10 2010 +0200 Add Copyright header and footer commit 8c9f54ecfc72ad52e773899df09170a7ab295a50 Author: Adam Dickmeiss Date: Tue Aug 3 12:59:03 2010 +0200 Avoid crash if facet use attribute is not supplied commit 46ea0a67951825a03cafc6c90cc6658cfbf40d75 Author: Adam Dickmeiss Date: Mon Aug 2 21:00:14 2010 +0200 Update expected MARC result due to upd message MARC results differ a little because warning about MARC directory has changed. commit 7e39a157bcf0419339fb279b9a64a8971b8a2151 Author: Adam Dickmeiss Date: Mon Aug 2 12:18:18 2010 +0200 MARC reader: more verbose if dir parsing fails commit b43711e9ef2aa51978eb3c6a7f403f43662ae785 Author: Dennis Schafroth Date: Fri Jul 30 17:16:39 2010 +0200 Avoid compile problem in eclipse commit 95a0f8e6ad2f79820c7a3cf2248c5c904b41a1e6 Author: Dennis Schafroth Date: Fri Jul 30 15:12:02 2010 +0200 Minor changes in build settings commit bed8863f24abfa980c56bf5841b67bb2d78c6fc5 Author: Dennis Schafroth Date: Fri Jul 30 15:08:48 2010 +0200 Add compile defines commit 247e4e69c61f39e8af636bd64cd09001ab4c0488 Author: Dennis Schafroth Date: Fri Jul 30 15:06:45 2010 +0200 Cosmetic plus fix of uninitialized variable commit 787368da704bbde501d20b8846b5fed3e3a81a9a Author: Dennis Schafroth Date: Fri Jul 30 12:05:33 2010 +0200 Fix LOG_* flags to YLOG_ flags. Uncomment unused functions commit 3442139fa753ec00fc988113a640fde46783db41 Author: Dennis Schafroth Date: Thu Jul 29 10:48:34 2010 +0200 Fix: missing init of descriptor and indirect_reference in externally defined commit 62a5a33362d50820f3ac509fa1412e946d576cff Author: Dennis Schafroth Date: Mon Jul 26 16:27:56 2010 +0200 Verbose debug logging on facets. Remove later commit 66490c4cd60228c4036596003a8f24373cbd0fd8 Author: Dennis Schafroth Date: Mon Jul 26 16:26:08 2010 +0200 ZOOM Facets. Fix: initialization of resultset.num_facets. Add some debug logging. commit fb91dfe5324b8492a8e90ec7c5dbfecad224c2a2 Author: Dennis Schafroth Date: Mon Jul 26 16:25:33 2010 +0200 Debug log on facet attribute limit commit be042bc51e825a53074dc1b586f1fff0a002ab0b Author: Dennis Schafroth Date: Mon Jul 26 11:27:47 2010 +0200 Support for skipping facet, if term count is 0. commit 848bd26348ba11c2dcc229cc7326d43dc9270e49 Author: Dennis Schafroth Date: Mon Jul 26 11:26:31 2010 +0200 helper for init. attribute values struct. Add some debug logging. commit f324699f321593c135a6bb3d858a29f7437cd72d Author: Dennis Schafroth Date: Mon Jul 26 11:25:31 2010 +0200 Add: method for initializing facet attributes helper struct commit 68a15f332deef91d6ace9f07c98ffbe3cf4aa2aa Author: Dennis Schafroth Date: Thu Jul 22 17:12:23 2010 +0200 Add missing facet function resultset_get_facet_field commit ddf3fefceb6290ce3da4d544f480f3bb72d2cf31 Author: Dennis Schafroth Date: Thu Jul 22 13:24:31 2010 +0200 Fix: Uninitialized member of Z_External when creating FacetList commit ca359fadd2bc021173109ad2e84a03f5e0f6a677 Author: Dennis Schafroth Date: Wed Jul 21 11:45:14 2010 +0200 Add help for facets commit d754c4d7836eb7ebe1accbb3620822d4a55c4df2 Author: Dennis Schafroth Date: Tue Jul 20 18:10:41 2010 +0200 Implementation of fake facets. Adding dummy facets to result if requesting facets in search. commit dfd9cdecdfc73057abe59c765f6ff24364aa7769 Author: Dennis Schafroth Date: Tue Jul 20 18:06:14 2010 +0200 Implemtation of ZOOM Facet API in zoom shell New option: set facets [AttributeList,]* : Defines the facets to be fetched, using comma-separated AttributeLists (@attr 1=title 2=0 3=0, @attr 1=author 2=0 3=0) New command: facets: shows the facets results commit 8d00bb643c800e61f47f7c26a5d489d4e6346229 Author: Dennis Schafroth Date: Tue Jul 20 18:05:13 2010 +0200 ZOOM Facet API implementation Implemented the facet API. commit 7c0b1d48b8192d2fa79f942d37c29d30a99c2fb6 Author: Dennis Schafroth Date: Tue Jul 20 18:02:57 2010 +0200 Fix: The facets_field variable was a pointer too much. Also not conditional on the ZOOM_RESULT_LIST representation. Add: Variables to hold numbers of facets_fields and the array of facets names. commit 81e8452cbfb569a63a07676b0dc7e32ea8343c5a Author: Dennis Schafroth Date: Tue Jul 20 18:01:52 2010 +0200 Fix: use the given OtherInformation. Also set the term when creating the Z_Term commit 544bbfdbc1da539b17542d740d25b154ebb4c182 Author: Dennis Schafroth Date: Tue Jul 20 17:56:59 2010 +0200 ZOOM Facet API changes ZOOM_resultset_facets returns a CONST array for interating over all facets. ZOOM_resultset_facets_names returns a constant array of names (char *) of the available facets returned in the search. commit 47776291269d5c75e61a6d2475d411c458f7bef5 Author: Dennis Schafroth Date: Tue Jul 20 17:56:17 2010 +0200 added helper functions commit ca1469bd104ff54c175f0ad25afc4cbf6d948551 Author: Dennis Schafroth Date: Tue Jul 20 09:33:43 2010 +0200 Using helper functions for facets commit ae61397330cc9b5ecb90c6f385dd6f22d4037021 Author: Dennis Schafroth Date: Tue Jul 20 09:32:28 2010 +0200 Fix: set the correct num elements on parsing error commit ac14cea20cab6607b203ec4d0e63b42008d70e6c Author: Dennis Schafroth Date: Tue Jul 20 09:28:12 2010 +0200 Helper functions for Facets. commit 85513aab61cd6a51f33bcf49cff49a124740b559 Author: Dennis Schafroth Date: Tue Jul 20 09:27:53 2010 +0200 Helper functions for Facets. commit 836e12246ca0e84c73f552d5aa5a0ca8d4978de9 Author: Dennis Schafroth Date: Mon Jul 19 17:25:28 2010 +0200 Add fake Facet list. Not yet working commit 7f7a775a9d2be4be61630cbdf4c54cf1d15e6e27 Author: Dennis Schafroth Date: Mon Jul 19 17:24:24 2010 +0200 Add facet structures commit 79b8802af30f0307dad1bd926d12580cb6d58bda Author: Dennis Schafroth Date: Mon Jul 19 17:23:27 2010 +0200 Add part of Facet API commit e4c68bbbfdfbfb44c4dbb62c3f528106ab65ffcf Author: Dennis Schafroth Date: Mon Jul 19 17:20:57 2010 +0200 Add yaz_parse_facet_list with helper functions commit 6ee6bd7baf9b8dccf3dffe2376b736a7d18c6791 Author: Dennis Schafroth Date: Mon Jul 19 17:18:23 2010 +0200 Add yaz_pqf_parse_facet_list commit 4c97c44fba095f26c8bee204fbdab63d1a249bc2 Author: Dennis Schafroth Date: Mon Jul 19 17:17:08 2010 +0200 Cosmetic commit eef7f890270dae6d226f3662395d67649d632122 Author: Dennis Schafroth Date: Mon Jul 19 17:08:57 2010 +0200 Add facets option commit 15cbfd594a64e997955bbecd1aeb95bc854a1217 Author: Dennis Schafroth Date: Mon Jul 19 17:06:35 2010 +0200 Refactor parsing of FacetList out (into pquery.c) Also need the parsing in the ZOOM API. commit f0476c98735293629895df18be7ad965146676f8 Author: Dennis Schafroth Date: Mon Jul 19 09:59:44 2010 +0200 Reworked as discussed. Keeping the optional for now. Perhaps adding the facet name iterator commit 3c0e13a17443542be86502796d95719d8414fd68 Author: Dennis Schafroth Date: Thu Jul 15 14:55:23 2010 +0200 Fix serious complaint from heikki Show Facets indented. commit 3fa5c310994e3449aac2926385f742fe34fb5757 Author: Dennis Schafroth Date: Thu Jul 15 14:46:07 2010 +0200 removed a stray s commit fe68107992cae293f6c2a3e2058ebfb5b09052a9 Merge: a508158 c2d4d24 Author: Dennis Schafroth Date: Thu Jul 15 14:41:09 2010 +0200 Merge branch 'master' of ssh://git.indexdata.com/home/git/pub/yaz commit a508158c2faf6e1bb96cd810d1d20f048eb01bae Author: Dennis Schafroth Date: Thu Jul 15 14:40:16 2010 +0200 Add FacetList name on external definition commit d2f977c26e0b16c544b69339c34ca9300b55b749 Author: Dennis Schafroth Date: Thu Jul 15 14:39:35 2010 +0200 Small reorder of code line for cosmetic commit b393fdf5e78549672d42e5292f99697c9d0feb76 Author: Dennis Schafroth Date: Thu Jul 15 14:38:21 2010 +0200 get Facet_List from OtherInformation commit f3328e07c858cad641f81bb4b758226d2d79da43 Author: Dennis Schafroth Date: Thu Jul 15 14:35:28 2010 +0200 Fix the FacetTerm. Remove the IMPLICIT on Term. Makes the decoder crash. commit df0a3ba592afe51a91a54152c3add5d1b51604a8 Author: Dennis Schafroth Date: Thu Jul 15 14:33:46 2010 +0200 New Facet helpers Use for extraction of values from the ASN.1 structures in C. commit 130d73eaa90fb40dd7d941b6a706036477ea8cdd Author: Dennis Schafroth Date: Thu Jul 15 14:30:30 2010 +0200 Support for printing of facets. - Rename display_term to display_term_info (as it is such a object it prints) - Extract display_term from display_queryExpression to display a term - Fully implement the display facet using new facet helpers. commit c2d4d247b3fe28f7c191fbc3644c8e011e1a4fea Author: Heikki Levanto Date: Thu Jul 15 11:09:07 2010 +0200 Fixed the asn1 for facets commit 1bb2934164457d2908fdceef0d415a52b704651b Author: Dennis Schafroth Date: Wed Jul 14 13:43:57 2010 +0200 Disabled the sending of a facet list (as Otherinformation) when (re)connecting commit 3472c8c6ca805adfe06e2e10a962e0467b5bdc18 Author: Dennis Schafroth Date: Wed Jul 14 13:06:02 2010 +0200 Eclipse files commit eb68779c8a1e2ea059b5cf1a790e5047e3190bf2 Author: Dennis Schafroth Date: Wed Jul 14 13:05:44 2010 +0200 Exclude eclipse build directory commit 558573d39acf41097935abebe06ba731d208e291 Author: Dennis Schafroth Date: Wed Jul 14 13:03:52 2010 +0200 New table entries for Facets commit 5a9b85ec05d3f3af1e4285be735bc9836aad2566 Author: Dennis Schafroth Date: Wed Jul 14 13:02:56 2010 +0200 Methods for encoding FacetLists commit a856c901f082e75a18f21734b47e89fa5534c8f7 Author: Dennis Schafroth Date: Wed Jul 14 13:01:22 2010 +0200 Add method for setting FacetList as Otherinformation commit be351d15fb835ad4d9d39b34016eef3cf3bf0c99 Author: Dennis Schafroth Date: Wed Jul 14 12:56:12 2010 +0200 Refactored to enable parsing of facets Facets is implementing as a Z_AttributeList Change the methods so the parsing of it can be done. commit b10a7695e0cd0a6f8a8db03388b10c5090522d0d Author: Dennis Schafroth Date: Wed Jul 14 12:52:03 2010 +0200 Facet suppport (partly) for Z39.50 Support for requesting facets using facets command. Sends the FacetList in the search request. Outstanding: Parsing of response. commit 5ee6205eb9bac20f3c6d033ff5926a7c1786a882 Author: Dennis Schafroth Date: Tue Jul 13 22:27:14 2010 +0200 Add facets to protocol commit 234a815c6258460f1746fe7ff92659f6639e72f9 Author: Dennis Schafroth Date: Tue Jul 13 22:26:36 2010 +0200 New method for parsing AttributeList used by facets. commit 15e7414994200ceccc20195f084a574f9b30ad1f Author: Dennis Schafroth Date: Tue Jul 13 22:24:26 2010 +0200 Added facet to external definition commit df84e4897abc4565fe11adead30b99d9634b41b1 Author: Dennis Schafroth Date: Tue Jul 13 22:22:31 2010 +0200 Fixed typo commit 78823e16ccc4715b60ba1ff4144b8e4d4611ae75 Merge: 120720e e8ca42e Author: Adam Dickmeiss Date: Fri Jul 9 17:18:03 2010 +0200 Merge branch 'master' of ssh://git.indexdata.com/home/git/pub/yaz commit 120720e0d9c4fb0bcb2dae04d925ce03c64ede68 Author: Adam Dickmeiss Date: Fri Jul 9 17:13:05 2010 +0200 GFS: Add search_info member for bend_search_rr This member holds the otherInfo from the SearchRequest. commit e8ca42e680c5e5a644481e5d0b75a0e57c6d3e92 Author: Adam Dickmeiss Date: Fri Jul 9 16:44:42 2010 +0200 Version 4.0.11 commit a158e7aca7ab8b71d75c9dcdf6fd9bc2d65d2fd0 Author: Adam Dickmeiss Date: Fri Jul 9 16:43:50 2010 +0200 Add bib1 (CCL config example from ccl_test) commit 3c1365fc355b4ee90cb841e66cdb9c933f871ed9 Author: Adam Dickmeiss Date: Fri Jul 9 16:31:57 2010 +0200 CCL fixes: bug 2895 and bug 3539 commit 89d7ade063c6c1ecd3aba012204bb6d9ec5b8792 Author: Adam Dickmeiss Date: Fri Jul 9 11:55:46 2010 +0200 Work on fixing CCL quote problem, bug #3539. commit 417c6a81ea12af107047bf5f5b28a840ae553183 Author: Adam Dickmeiss Date: Thu Jul 8 11:29:34 2010 +0200 z-facet-1.h part of dist commit 5cf76d0f27403990896771b870e833605a7f87f6 Merge: ae29bbe f5730a7 Author: Adam Dickmeiss Date: Wed Jul 7 10:45:07 2010 +0200 Merge branch 'master' of ssh://git.indexdata.com/home/git/pub/yaz commit ae29bbe388c3ac6a15d0024009705f89b6184d02 Author: Adam Dickmeiss Date: Wed Jul 7 10:44:59 2010 +0200 facet.asn part of dist commit f5730a77d7a6b2190f0457a56d220937004df964 Author: Dennis Schafroth Date: Wed Jul 7 08:15:12 2010 +0200 Added z-facet-1.c to GEN_FILES commit 3d3fb279dd89ab042856f500ad92d472da250deb Author: Adam Dickmeiss Date: Tue Jul 6 13:54:41 2010 +0200 Add OID Facet-1: UserInfo.1000.81.5. commit b371ad40aaba0a2000cc31fee8cd536f3d5caeab Author: Adam Dickmeiss Date: Tue Jul 6 13:36:04 2010 +0200 New UserInfoFormat-facet-1 The ASN.1 is both for facet request and facet response and is to be part of additionalSearchInfo for Search{Request,Response}. commit b50190f4e3656107b5e3613cd6aed9cbe59fc2df Author: Adam Dickmeiss Date: Wed Jun 30 15:22:05 2010 +0200 Remove etch, jaunty, intrepid, hardy commit 20f793c68cde25f0883e9ce2f016bd33088e2110 Author: Adam Dickmeiss Date: Tue Jun 29 14:42:05 2010 +0200 Bundle MSVCP90.dll - used by icuuc42.dll. commit d578239b6183460779d9d34d4feeff3129dcab68 Author: Adam Dickmeiss Date: Tue Jun 29 10:51:37 2010 +0200 GR1-display: add comma in display Comma was remove by mistake in version 4.0.0. commit 3d536728dae01844f9a2b89337eb3b3fdb759382 Author: Giannis Kosmas Date: Wed Jun 16 18:47:08 2010 +0300 Merge cookies on SRU redirects. commit a2a90fc5775ae4d90cdff3c636fadf42315db540 Author: Adam Dickmeiss Date: Tue Jun 22 10:57:20 2010 +0200 More useful user handle for GFS example commit e7e9d6ab325472e8f103409f34ba853cdb314f2e Author: Adam Dickmeiss Date: Tue Jun 22 10:35:44 2010 +0200 Return fixed hit count 24 for anything but RPN For anything but RPN queries (CQL, CCL) return a fixed hit count in the dummy server. For RPN throw a random hit count as usual OR if a fixed hit count if any term has what appears to be an integer. commit b445b6a509785454c8128b6a09f3ca3b6f246140 Author: Adam Dickmeiss Date: Fri Jun 18 10:51:57 2010 +0200 API new functionality commit d642e9f8a9d6f2bebb4a283ba1a2d20f3dc0584b Author: Adam Dickmeiss Date: Fri Jun 18 10:51:12 2010 +0200 Version 4.0.10 commit fada8596e6a8574bbe8e95f7d0c7c317c1c04464 Author: Adam Dickmeiss Date: Fri Jun 18 10:50:15 2010 +0200 Update NEWS commit cabcc9b01684fb0410d4323399262563c6e9dc83 Author: Adam Dickmeiss Date: Fri Jun 18 10:37:56 2010 +0200 Add ZOOM_resultset_release ZOOM_resultset_release releases a result set from a connection. The result set will be on its own thereafter; no operations on it will perform retrievals from a target. Only cached copies are returned. commit e137416de024bcc37cc35ecae1ce2079f188ac41 Author: Adam Dickmeiss Date: Thu Jun 17 15:39:58 2010 +0200 Fix case for http:close and SRU step (bug #3484) Fix case where servers responds with Connection:close and ensure that if there is a current task it is resumed (like fetching more records in a result set). commit 48934edc63895e9881924b11791da324c450b8a2 Author: Adam Dickmeiss Date: Thu Jun 17 15:38:04 2010 +0200 GFS: modify log for SRU search commit bdd905698804f35851e060a58290f722dd5cffa0 Author: Adam Dickmeiss Date: Thu Jun 17 11:16:44 2010 +0200 ztest: Last test MARC record in UTF-8 ;was Latin-1 commit bb6807db66cc4aa2a9ceb1a5ae7eb79f53716614 Author: Adam Dickmeiss Date: Thu Jun 17 10:28:27 2010 +0200 Remove YLOG_LOG msg commit 9cfa827b7d5e4ed02820dd60691cd25d61ee0a23 Merge: 23ed5d1 ec2de5f Author: Adam Dickmeiss Date: Thu Jun 17 10:27:03 2010 +0200 Merge branch 'master' of ssh://git.indexdata.com/home/git/pub/yaz commit ec2de5fe77b958d7dd00f8f0b030de368efe3619 Author: Adam Dickmeiss Date: Tue Jun 15 22:56:41 2010 +0200 ZOOM record render refactor commit 23ed5d17374725672f67e979a83b83c59c71eb66 Merge: 2d82f5e bfef45d Author: Adam Dickmeiss Date: Mon Jun 14 12:37:00 2010 +0200 Merge branch 'master' of ssh://git.indexdata.com/home/git/pub/yaz commit 2d82f5e172577a498d19396b210ca28553683310 Author: Adam Dickmeiss Date: Mon Jun 14 12:36:42 2010 +0200 Add CQL 1.2 / 2.0 YACC grammars commit bfef45d6390bfabffc0d5e4dc3cf1aaa877fdef6 Author: Adam Dickmeiss Date: Fri Jun 11 14:13:19 2010 +0200 GFS: timeout is 15 minutes / 900 sec commit dc380c5373145eb1fe4dc99e7d5558791d9ecfca Merge: 84be3c9 2b4785b Author: Adam Dickmeiss Date: Thu Jun 10 22:36:45 2010 +0200 Merge branch 'master' of ssh://git.indexdata.com/home/git/pub/yaz commit 84be3c9eb6775a6c9477e4bfaf462076b0653ec1 Author: Adam Dickmeiss Date: Thu Jun 10 22:36:08 2010 +0200 GFS: timeout may be given in seconds (suffix s) commit 2b4785b39a2bbb4affd77fb9e24aaabc0b2dd069 Author: Adam Dickmeiss Date: Fri Jun 4 13:23:11 2010 +0200 Minor PQF encoding and decoding changes; reformat PQF decoding: attribute values that contain any non-digits are treated as string attributes (previously decoding only checked for leading character ([0-9]). PQF encoding: attribute string values are not surrounded by double-quotes. commit 092628feccc4f8f8dfe05df785f0d474b73742ce Author: Adam Dickmeiss Date: Fri Jun 4 11:30:11 2010 +0200 PQF parser: use odr_atoi for Odr_int (not atoi) commit e727aa6892bf8c0cb188c7a26506cd4805fea0c0 Author: Adam Dickmeiss Date: Tue Jun 1 11:26:07 2010 +0200 GFS example: set output_format commit 6cdb773ed83a2bd43d07bcf60b2f20ec71209838 Author: Adam Dickmeiss Date: Tue Jun 1 11:23:41 2010 +0200 GFS fetch: issue warning if output_format is unset commit 324d1241b0e9b40c897659e7ab9dc71edde5b1b0 Author: Adam Dickmeiss Date: Fri May 21 11:56:44 2010 +0200 Version 4.0.9-2 commit a5c1b81fd6863cc11133588c8a93c115ea25fed9 Author: Adam Dickmeiss Date: Fri May 21 11:55:27 2010 +0200 Summarize news commit 4437d37d1844243b154c4323413e18c50e3b8779 Author: Dennis Schafroth Date: Thu May 20 16:26:52 2010 +0200 Support for timeout event in yaz_poll_select Timeout events does not have a valid file descriptor but is below 0. commit 21d73f362bc5a84885739838fb6695d6c60c1187 Merge: cd093c2 3c02165 Author: Dennis Schafroth Date: Thu May 20 16:25:31 2010 +0200 Merge branch 'master' of ssh://git.indexdata.com/home/git/pub/yaz commit 3c02165cdeb68fb7fc19637829f24e0952be7224 Author: Adam Dickmeiss Date: Thu May 20 14:15:32 2010 +0200 Add various #if HAVE_- for headers commit 7dc39ebcca4138d27f9a0e5082b2829a7c96375a Author: Adam Dickmeiss Date: Thu May 20 13:32:48 2010 +0200 Add socket pipe utility The socket pipe has same purpose as Unix pipe . Unfortunately Windows pipes do not work on select/poll. commit f3700fe68a59e969d9ef1f98e1748e10f4a80471 Author: Adam Dickmeiss Date: Wed May 19 16:11:02 2010 +0200 DLL export yaz_match_glob commit 89c5c3d0dcbbc3759604c4d5cd7b988a91cb64d5 Author: Adam Dickmeiss Date: Wed May 19 15:20:34 2010 +0200 Version 4.0.9 commit 1e957275de39799db9449c8d6c2f52359b494799 Author: Adam Dickmeiss Date: Wed May 19 15:14:43 2010 +0200 yaz_cond_create returns 0 if threads is unavail commit 7ceaeee4f1914d03c119340efc03e4b527240662 Author: Adam Dickmeiss Date: Wed May 19 14:39:48 2010 +0200 Make yaz_thread functions work on Windows commit 6779229aefba1c9ffce24a743a31ded066c12215 Author: Adam Dickmeiss Date: Wed May 19 14:39:34 2010 +0200 dirent.h: export DLL functions commit a4f3aed6537286535d1ea9962adb9ab77c528565 Author: Adam Dickmeiss Date: Wed May 19 13:43:01 2010 +0200 Add yaz_thread_{create,join,detach} These are simple wrappers for POSIX threads for now commit 7993bf125aa3ae6ac06e12a92209f54a863717c8 Author: unknown Date: Wed May 19 11:08:36 2010 +0200 Win makefile: omit /machine:i386 link option Conflicts on Win64 and is unnecessary on Win32. commit 6143ea31aa0013f8a835b979b8444ef691d0d208 Author: unknown Date: Wed May 19 10:52:46 2010 +0200 Fix retval check of SleepConditionVariableCS SleepConditionVariableCS of Windows returns non-zero on success; zero on failure (opposite of pthread_cond_timedwait). commit d29edd99352a6faa759d36867a6ebaa485012f25 Author: Adam Dickmeiss Date: Wed May 19 10:30:14 2010 +0200 Update doc/common (Unxutils URL) commit 20c7a39c2ac87673360f810b381b5798beaf2155 Author: Adam Dickmeiss Date: Wed May 19 10:30:12 2010 +0200 Make a link for Tcl commit 73608730730ad32ecdd61bb1f0790072d80d90e4 Author: Adam Dickmeiss Date: Mon May 17 13:41:59 2010 +0200 RPM libyaz4-devel: no *.la and less dependencies Because libyaz4-devel no longer includes *.la files we can remove the dependency to gnutls-devel and tcpd-devel commit 1925a433fb86d8f07cabd888b6f6ef697372c537 Author: Adam Dickmeiss Date: Mon May 17 13:40:22 2010 +0200 libyaz4-dev no longer depends on libgnutls-dev Because libyaz4-dev no longer include *.la files which screw things up. commit cd093c26605b9c436123e15c3a5989624e38831c Merge: a7eee1a f0a73bb Author: Dennis Schafroth Date: Mon May 17 12:38:49 2010 +0200 Merge branch 'master' of ssh://git.indexdata.com/home/git/pub/yaz commit f0a73bb9a6696231c37da9069c71f9e97cf6f933 Author: Adam Dickmeiss Date: Mon May 17 12:29:08 2010 +0200 zoomsh: show record do NOT render opac zoomsh's show command no longer renders "opac" by default. Only the one the user asks for; besides the buffered would be MANGLED because we were using two buffers from ZOOM_record_get at the same time (one would have to be copied first). commit a7eee1a2528940018127af361ba214b8688879f0 Merge: 1b81473 5f835d6 Author: Dennis Schafroth Date: Mon May 17 11:24:51 2010 +0200 Merge branch 'master' of ssh://git.indexdata.com/home/git/pub/yaz commit 5f835d6ad1c5afd2b2c2652eef50b1c1fca459ae Author: Adam Dickmeiss Date: Mon May 17 10:42:53 2010 +0200 4.0.8-2 (without *.la files) commit 3d5041247b024fd0926b40048433102d1db29019 Author: Adam Dickmeiss Date: Wed May 12 14:28:34 2010 +0200 Remove *.la files. http://wiki.debian.org/ReleaseGoals/LAFileRemoval commit 04ad59c6a693bf48e656acbe8a414bbbbbd86083 Author: Adam Dickmeiss Date: Tue May 11 13:35:20 2010 +0200 Fix typo in deb version commit 88e0a27c2807e2bd1f06999b7312e77b7abdeea5 Author: Adam Dickmeiss Date: Tue May 11 12:46:28 2010 +0200 Version 4.0.8 commit 1de4d4f448337afc077a922d467c5999d1b9b3d6 Author: Adam Dickmeiss Date: Tue May 11 12:33:55 2010 +0200 libyaz4-dev depends on libgnutls-dev again For Libtool applications using YAZ, the .la file still refers to libgnutls libraries despite the fact the application do not use it at all. commit 1b814737d1572a6fc4bec2a3d120d6954d12bdb1 Merge: db32b71 5b4b184 Author: Dennis Schafroth Date: Mon May 10 10:15:38 2010 +0200 Merge branch 'master' of ssh://git.indexdata.com/home/git/pub/yaz commit db32b7150acaf0e15dc6d33428f34bf49a1cc6d9 Author: Dennis Schafroth Date: Mon May 10 10:15:34 2010 +0200 Add detail logging of record create/destroy commit 5b4b18489c74c31ef915fef72621e8dcbfb4cdb3 Author: Adam Dickmeiss Date: Sat May 8 00:25:09 2010 +0200 ZOOM: resultsets not ref counted by connections Experimental code and revert to old behavior of result sets. ZOOM result sets are no longer ref counted by connections: it makes it very difficult to work with multiple result sets within one connection because connection would have to be destroyed before all its result sets are destroyed. It will also makes use of more result sets IDs on server than we need to - because ALL result sets in use will be still available (despite that ZOOM_resultset_destroy is called). This commit reverts to existing behavior: a result set is destroyed If ZOOM_resultset_destroy is used AND all operations on it are completed. commit 6244022fc260d3f35804ed690b1b2a4a466d0e51 Author: Adam Dickmeiss Date: Fri May 7 14:53:49 2010 +0200 Use shared WRBUF for returned record strings By sharing a WRBUF for a whole resultset for all records the number of allocations is reduced a lot. commit 6af53ed38e03e908a505cd059f436f4bab29cfdd Author: Adam Dickmeiss Date: Fri May 7 11:28:07 2010 +0200 Add header for shared pointer: shptr.h commit 24a138f8cd6c4c2c47d5c8d9b8efd7b19173b600 Author: Adam Dickmeiss Date: Fri May 7 11:21:02 2010 +0200 Add test_shared_ptr commit acb4c79e77bc112eabfa1f6a82f58cda507f4427 Author: Adam Dickmeiss Date: Wed May 5 11:26:11 2010 +0200 Extend description of ZOOM option 'proxy'. commit e1fa5ba09392c3bdd5c1bacac97d87d703ed1cf3 Author: Adam Dickmeiss Date: Wed May 5 11:20:32 2010 +0200 Document ZOOM option clientIP. commit 32edfa3b68ce3da45cb97375917764379b882767 Author: Adam Dickmeiss Date: Tue May 4 14:58:49 2010 +0200 ZOOM: scan number is 20 by default commit 0a24f02b05a021c6302f1ed340b049dd2f5576c8 Author: Adam Dickmeiss Date: Tue May 4 14:11:30 2010 +0200 Debian 4.0.7-1 commit 4ec0f264999f2cebbde404adaea140c081206e64 Author: Adam Dickmeiss Date: Tue May 4 14:10:41 2010 +0200 Version 4.0.7 commit cbf7cc9d4af4d1351fb8b1b99d37a8c069be6764 Author: Adam Dickmeiss Date: Tue May 4 13:56:21 2010 +0200 Add Ubuntu lucid commit 8a3b23f59f0d6558128f35b0973e08ec933fc012 Author: Adam Dickmeiss Date: Tue May 4 12:14:16 2010 +0200 record_conv: copy XML doc before passing to XSLT The record_conv reads the XSL file in two steps.. Reads XSL as XML Document.. Then passes that to XSL at each invocation to ensure the record_conv is multi-threaded. This patch ensures that XML document is copied before passed to XSL (instead of after). This makes at least one XSL transform behave differently (and correct). commit d0c99a160417bc4064050d23140516194352671c Author: Adam Dickmeiss Date: Tue May 4 10:45:32 2010 +0200 Fix check for xsltSaveResultToString commit 0bd27325c14ad88221c6909231682f0cf1e777fa Author: Adam Dickmeiss Date: Fri Apr 30 21:44:48 2010 +0200 Command line tool yaz-record-conv This is a simple program that allows testing of the record-conv utilities of YAZ (used by YAZ GFS and Metaproxy). commit 5d19a152f508dbd77d399c58c7e547118b1db636 Merge: 239ea37 d923469 Author: Adam Dickmeiss Date: Thu Apr 29 13:50:23 2010 +0200 Merge branch 'master' of ssh://git.indexdata.com/home/git/pub/yaz commit 239ea37674040241e9567bd5c6c2b9c24ad32198 Author: Adam Dickmeiss Date: Thu Apr 29 13:48:22 2010 +0200 Debian 4.0.6-1 commit 617970be7b1544c55e1268fd14093f6b2160c0f6 Author: Adam Dickmeiss Date: Thu Apr 29 13:47:53 2010 +0200 Version 4.0.6 commit d923469e9f7acda378bcf9564d7d7f64581313fc Merge: fd82926 d4e1baf Author: Adam Dickmeiss Date: Thu Apr 29 13:46:16 2010 +0200 Merge branch 'master' of ssh://git.indexdata.com/home/git/pub/yaz commit fd8292660a22b62a4b2c6c1ef8482e639975e592 Author: Adam Dickmeiss Date: Thu Apr 29 13:45:14 2010 +0200 yaz-config: dont list SSL libs for shared libyaz commit d4e1baf0308848e2dadc5b55b46b0bbd4b936270 Author: Adam Dickmeiss Date: Thu Apr 29 11:18:09 2010 +0200 Debian 4.0.5-1 commit 3e842bc7f9d59df80805e96913bc7076d824f848 Author: Adam Dickmeiss Date: Thu Apr 29 11:17:23 2010 +0200 Version 4.0.5 commit bea6426b234d13fd4066de81599d71be9481f6c5 Author: Adam Dickmeiss Date: Thu Apr 29 11:15:41 2010 +0200 No need to YAZ_EXPORT timeval struct decl commit 363b51dfb7445d41b7a8c622f61d64736ce82eb4 Author: Adam Dickmeiss Date: Thu Apr 29 11:09:39 2010 +0200 Forward decl timeval. Include sys/time.h in source commit fe8b76d75847dfc7f9dac3d1382c2eb0ab28dec0 Author: Adam Dickmeiss Date: Thu Apr 29 11:00:11 2010 +0200 Declare timeval in mutex.h commit 5296093913444ee1a459e1342080c1b951e909b0 Author: Adam Dickmeiss Date: Thu Apr 29 10:54:48 2010 +0200 Omit use of local var lyaz commit 4a140e0b8cdecd8e80eec749153e8c4defe56436 Author: Adam Dickmeiss Date: Thu Apr 29 10:12:44 2010 +0200 yaz-config: List SSL libs for static mode The static mode is for apps that don't use Libtool. commit 28413a9ed5e61dc0da5ef34e3e96af116cda4890 Author: Adam Dickmeiss Date: Wed Apr 28 15:40:46 2010 +0200 yaz-config: don't list SSL/GNUTLS libs by default The yaz-config --libs output no longer lists SSL libs . Only if argument 'ssl' is supplied to yaz-config it will list those used to link with YAZ. This is to avoid having a dependency on libgnutls-dev for libyaz4-dev. commit 99f1879827d5be93a6363b5adbc83b824135dd88 Author: Adam Dickmeiss Date: Wed Apr 28 15:38:47 2010 +0200 TCPD libs only used in libyaz's LIBADD The TCPD libs (wrappers) are no longer put in to the LIBS make variable. This is to avoid a dependency on the libwrap development library for libyaz4-dev. commit e451bf7fd4bf5738731e6abe1452ac8f97ae46a3 Merge: 0903a18 2ee1aec Author: Adam Dickmeiss Date: Wed Apr 28 14:36:20 2010 +0200 Merge branch 'master' of ssh://git.indexdata.com/home/git/pub/yaz commit 2ee1aecfd1ccbf2cd68bf4e4f4e69b30cb0bfd2d Author: Adam Dickmeiss Date: Wed Apr 28 14:35:47 2010 +0200 POSIX thread conf check: preserve LIBS commit 0903a184ec89d2706a3d667e0a1641a61faba85c Author: Adam Dickmeiss Date: Wed Apr 28 14:03:00 2010 +0200 Debian 4.0.4-1 commit bda8349bc60d3a56197826c6b8095dda26d7b4f6 Author: Adam Dickmeiss Date: Wed Apr 28 14:02:36 2010 +0200 Bump to 4.0.4 commit e12005bd727ec3c5cf78dbeb10631bf066518691 Author: Adam Dickmeiss Date: Wed Apr 28 14:02:31 2010 +0200 4.0.4 NEWS commit 754e3b76f2ba650c5f18a0c2a8518986c7965000 Author: Adam Dickmeiss Date: Wed Apr 28 13:53:52 2010 +0200 Update m4. commit 25a6ea02602402282c3dd58ec922a792d4aa055f Author: Adam Dickmeiss Date: Wed Apr 28 13:50:31 2010 +0200 Doc: update ICU YAZ DLL to vers 4 commit 92bb2c69ec4cfdad9134b859932250ddc704f769 Author: Adam Dickmeiss Date: Wed Apr 28 13:49:36 2010 +0200 List new DLL yaz_cond4 commit b82cf50ef426bb3be1abe4260e5a1715e2c0603d Author: Adam Dickmeiss Date: Wed Apr 28 13:46:41 2010 +0200 Doc: update Windows library names (version 4) commit df00da5a3dbba000c75781fbb709e3e1cfb0a927 Author: Adam Dickmeiss Date: Wed Apr 28 13:35:52 2010 +0200 Condition variable functions in separate DLL The condition variable functions are in a separate DLL on Windows - named yaz_cond4.dll (release), yaz_cond4d.dll (debug). The split is done because Condition Variable functions is only supported in Vista or Windows Server 2008 or later. commit e2ee7361cc2ac8d8d00bbf4e74c46a77ccef1911 Author: Adam Dickmeiss Date: Wed Apr 28 13:13:48 2010 +0200 Automake updates for new gettimeofday source commit a60cfb6333496199c7c1d52d67ab8a3835597b48 Author: Adam Dickmeiss Date: Wed Apr 28 13:11:16 2010 +0200 Updates for Windows WRT timing and condition vars commit e45adb79ab73280e963c849927707089d4031040 Author: Adam Dickmeiss Date: Tue Apr 27 15:59:21 2010 +0200 Simple test of yaz_cond_wait commit e8be0a844a4301118fad33bd953b4a1d4044c575 Author: Adam Dickmeiss Date: Tue Apr 27 13:03:02 2010 +0200 Condition variable wrappers Add functions yaz_cond_{create,destroy,wait,signal,broadcast}. commit 11bd8b21620d78c0399387a501ec2277e85a2f47 Author: Adam Dickmeiss Date: Tue Apr 27 13:01:56 2010 +0200 Doxygen fixes commit cd082c414a5e15f800bc6070be0224fe9d4fc048 Author: Adam Dickmeiss Date: Tue Apr 27 13:01:27 2010 +0200 Fix Doxygen \file commit 355d07b69c11cad30ad0e5fb5e62c9abbb5f4658 Author: Adam Dickmeiss Date: Wed Apr 21 13:58:50 2010 +0200 Cosmetic: use symbolic names for two diagnostics commit 0518ff4b2713b8d219ae1e31ba92562f9e89f97b Author: Adam Dickmeiss Date: Wed Apr 21 13:53:51 2010 +0200 GFS: Fix nextResultSetPosition for dropped record commit b8295086e8dec1933af2f31b3f26893f67c6d88c Author: Adam Dickmeiss Date: Mon Apr 19 10:56:09 2010 +0200 Add mutex around resultset reference counter commit 5ba7734cc97eef6688596180b7faf535ee249976 Author: Adam Dickmeiss Date: Mon Apr 19 10:53:47 2010 +0200 Added mutex to resultset commit 8535dd99e47effa0d28f0a4b5f2357b0290bc7df Author: Adam Dickmeiss Date: Mon Apr 19 10:46:18 2010 +0200 Introduce ZOOM resultset list The ZOOM result set list - maintained by the ZOOM connection - is a smart pointer; before a connection was back referenced by the result set destroy call. commit 6f2f82e34ee173a0626432b57ebcbb8375e83a68 Author: Adam Dickmeiss Date: Fri Apr 16 15:04:18 2010 +0200 yaz_log: Log level tid logs thread ID Add new utility yaz_thread_id_cstr to return human-readable ID of current thread. At this stage pthread_self is used. This can be misleading because pthread_t (pointers presumably) are reused between thread creations. commit 3e6398d15008d68aa36b0b985a18f142fcfa9a8f Author: Adam Dickmeiss Date: Fri Apr 16 12:26:25 2010 +0200 libyaz.la (whole source) is compiled with threads If thread support is enabled enabled, all source of YAZ is compiled with treading support. This allows core utilities such as yaz_log to use thread facilities. Previously (YAZ 3 and YAZ 4 releases), only libyaz_server.la was using thread utilities. This commit moves mutex utilities (mutex.c) from libyaz_server.la to libyaz.la. commit a606039bceb5fb70f8ea8cfd88261f6f25ccc736 Author: Adam Dickmeiss Date: Sun Apr 11 11:49:36 2010 +0200 Do not return value in a void func commit 8fc5b2c281ffb8dcb97af9816aabbe04c37a8599 Author: Adam Dickmeiss Date: Fri Apr 9 14:05:02 2010 +0200 Properly encode JSON strings commit 14a92b63a016b6cc96c857cad8283efda91ea867 Author: Adam Dickmeiss Date: Fri Apr 9 13:40:31 2010 +0200 yaz-json-parse displays leading text until error commit 4e01ee252ae4ec86534061e905eb5d2a3ddb386b Author: Adam Dickmeiss Date: Fri Apr 9 13:39:27 2010 +0200 Add json_parser_get_position and json_parse2 commit c4d75ce92b9dbd5acc9348788cacffabcc526840 Author: Adam Dickmeiss Date: Fri Apr 9 12:26:16 2010 +0200 Spell fix commit 4c345cce4f4917ea0428c084a2d55b83d8e92d76 Author: Adam Dickmeiss Date: Fri Apr 9 12:22:32 2010 +0200 The IDMETA file as used by our pbuilder scripts commit 7b5205fa8cc74d5d17334216a5cd616296edb1a9 Author: Adam Dickmeiss Date: Fri Apr 9 11:33:28 2010 +0200 Verson 4.0.3 commit 732cf4e1fbb015bc2090a8dd43dd16bd88d3ffc2 Author: Adam Dickmeiss Date: Fri Apr 9 11:32:35 2010 +0200 Update WIN32 makefile for renamed tests commit 4e627aa761e0b91b240f703173eeb82462ee8409 Author: Adam Dickmeiss Date: Fri Apr 9 11:31:16 2010 +0200 Use srand rather than less portable srandom commit 7ae9aaa8123320e37aad3eb492890266f68a251c Author: Adam Dickmeiss Date: Fri Apr 9 11:27:43 2010 +0200 Include windows.h(WIN32) commit 6efe941c2ccde0e5a7895ab63d4b876fd6396bfc Author: Adam Dickmeiss Date: Fri Apr 9 11:25:47 2010 +0200 ztest delay: select(Unix) or Sleep(Win32) commit 53f20e62abbeeef515177b06c20922f50c8eea1c Author: Adam Dickmeiss Date: Fri Apr 9 11:10:42 2010 +0200 Document using TurboMARC from ZOOM C commit d9af31fa7067266b3bad4a734c0b61ac6bc5d67d Author: Adam Dickmeiss Date: Fri Apr 9 10:47:04 2010 +0200 yaz-client: show uses last position if omitted The show command has always used last position if omitted - except that this was messed up in YAZ 4.0.2. commit ad4b64e5b3ab9ebc4b2e8184a3782b10962f7d3d Author: Adam Dickmeiss Date: Thu Apr 8 14:37:49 2010 +0200 ZOOM C: handle HTTP redirect for SRU GET commit 5a0cf1c72149bbd2b40c766910d3196309bc5b46 Author: Adam Dickmeiss Date: Wed Apr 7 15:50:27 2010 +0200 Update TurboMARC namespace TurboMARC namespace is now: http://www.indexdata.com/turbomarc commit fb276eb339f39e6233de8e7540c4408089e8d3b3 Author: Adam Dickmeiss Date: Wed Apr 7 15:43:44 2010 +0200 Update TurboMARC definition and document it Document TurboMARC in the tools chapter of the YAZ manual. Update definition format mode to YAZ_MARC_TURBOMARC. The string as used in yaz-marcdump and other tools is called "turbomarc". Rename function yaz_marc_write_turbo_xml to yaz_marc_write_turbomarc. commit 5b61e9a2d6be8eddb62af8cc626dc1e98596cc7f Author: Adam Dickmeiss Date: Wed Apr 7 13:37:26 2010 +0200 Make ZOOM_connection_exec_task public This function, unlike ZOOM_connection_process and ZOOM_event_nonblock, do not process any events. commit f3027244f210c7014b46dc564e868bbdf10560e2 Author: Adam Dickmeiss Date: Tue Mar 30 15:45:15 2010 +0200 yaz-ztest: complete database delay arguments Fixed and random delays for yaz-ztest may be given as database options. Documented in code and man page for yaz-ztest. commit d180c9a6dfd641974a84e5107fc759f57e7b2d63 Author: Adam Dickmeiss Date: Tue Mar 30 12:51:08 2010 +0200 yaz-ztest: Work on database options Database parameters - URL style - ?n1=v2&n2=v2 .. are being parsed in ztest now. This will eventually allow us to specify delays for searching and other things that will make a fake search or retrieval to similate real systems. commit b0180cb3c16e1c9e4de0697dba03337204a27a51 Author: Adam Dickmeiss Date: Wed Mar 24 11:24:37 2010 +0100 MUTEX log: precede delay value with blank Was preceded with a =-sign before.. Easier to awk/grep with a blank. commit 263231600cbe7a49190b38fc724199fe2e69f7dd Author: Adam Dickmeiss Date: Tue Mar 23 15:39:58 2010 +0100 yaz_mutex_enter logs waiting time for lock commit 055ee272576c3f33a842adf5a9fdbe00c2c422f0 Author: Adam Dickmeiss Date: Tue Mar 23 13:04:38 2010 +0100 MARC test: Skip write using Libxml2 if unsupported commit d623f3970b7ddba573bef16f752966c6e93e14ba Author: Adam Dickmeiss Date: Tue Mar 23 13:03:26 2010 +0100 yaz-marcdump: exit(4) if write using Libxml2's bad commit 79c68f7855e83d0a9c641dadb8a0a378cf343c92 Author: Adam Dickmeiss Date: Tue Mar 23 11:28:38 2010 +0100 Documentation for mutex util commit 83bf5a83b9296d6fe16e55d2c54209c35d2fa20b Author: Adam Dickmeiss Date: Tue Mar 23 11:28:16 2010 +0100 Add one call to yaz_mutex_destroy in test commit 6bc9db9f9f6944f86f1337a9a4f1e232678afc7b Author: Adam Dickmeiss Date: Tue Mar 23 11:12:48 2010 +0100 Add mutex test commit 68bc4fc5d306d65ce2f9404626b9c627509a3e91 Author: Adam Dickmeiss Date: Tue Mar 23 11:12:06 2010 +0100 Extend yaz_mutex_set_naem with log level commit db70647849fbccb07d6feed7b7870fbac6cf07fb Author: Adam Dickmeiss Date: Mon Mar 22 15:39:37 2010 +0100 Minor adjustments and reformat of dummy MARC commit 50680214cefa3d57c9e49db3524c4d5497d99365 Author: Adam Dickmeiss Date: Mon Mar 22 15:39:31 2010 +0100 Reformat commit 15401488340849487c2d7782121bef66dd19e961 Author: Adam Dickmeiss Date: Mon Mar 22 15:31:19 2010 +0100 yaz-ztest: use built-in array for MARC always yaz-ztest no longer attempts to read dummy-records file. commit f4aef846d5972b8a2fafda28ceb99eeedaf21208 Author: Adam Dickmeiss Date: Mon Mar 22 15:28:09 2010 +0100 ZOOM: More informative surrogate diagnostic commit 17c29c7ff55b762c4e35e54e043a04b33fe35369 Author: Adam Dickmeiss Date: Mon Mar 22 12:57:00 2010 +0100 Do not mess with databaseName for HTTP redirect commit f5f832b061784c7a1a996f377ddb27e58fd8311e Author: Adam Dickmeiss Date: Fri Mar 19 15:50:41 2010 +0100 yaz-client: handle HTTP redirects commit 23b8fd79b9b42dd8655bcd2e0af8a3905348f059 Author: Adam Dickmeiss Date: Fri Mar 19 13:33:07 2010 +0100 MARC line reader: allow control fields of size 1 commit ae80b3d484b49ba877cb79f792fd217e1b7e9ffd Author: Adam Dickmeiss Date: Fri Mar 19 13:30:15 2010 +0100 Do not URI encode SRU database This reverts SRU URI handling back to YAZ 3.0.50 behavior. commit 4ee50d09c7df145666ba4c1d6bcc893349101770 Author: Adam Dickmeiss Date: Tue Mar 16 10:15:57 2010 +0100 tmarcxml tests files part of dist commit 2b80c10f9e398cb35212f147e9f792dc24e82bb1 Author: Adam Dickmeiss Date: Mon Mar 15 22:49:35 2010 +0100 Various clean ups of tmarcxml commit 56fae7ba6f0af88da829afa064908009c106fea6 Author: Adam Dickmeiss Date: Mon Mar 15 22:49:22 2010 +0100 Reindent commit 6835889492d68a285d59cfb1a156517a34937130 Author: Adam Dickmeiss Date: Mon Mar 15 19:51:56 2010 +0100 Reindent - including tabs -> spaces. commit 01f73e12327022619d6ca45d6624abd8de947552 Merge: 0836f7a b98d4fb Author: Dennis Schafroth Date: Mon Mar 15 15:11:46 2010 +0100 Merge branch 'turbomarc' commit 0836f7a70cff4b7a8edc2c2a2fd1b3cb2c6588cc Author: Adam Dickmeiss Date: Fri Mar 12 14:44:49 2010 +0100 Add yaz_mutex_set_name to debug a MUTEX When yaz_mutex_set_name is used, each lock/unlock operation will be yaz_log'ged. Remove YAZ_GNU_THREADS portions, since they are no not in use. The yaz_mutex_destroy now calls pthread_mutex_destroy if YAZ_POSIX_THREADS is on. commit b98d4fb5660adbcdbc981d01d1f028dc4ce46153 Author: Dennis Schafroth Date: Thu Mar 11 16:48:11 2010 +0100 Result of binmarc -> xml -> binmarc (utf-8) commit ec9d3fa5bfe410f39f5ec005a980c79be080468d Author: Dennis Schafroth Date: Thu Mar 11 16:45:22 2010 +0100 Updated with last fixes on code attribute commit c0a7048ecd7a2dd9bede0edb27dbe1547be2e9d4 Author: Dennis Schafroth Date: Thu Mar 11 16:36:14 2010 +0100 Fixed: double writting of code value commit cef8180172d07b7ba5e224beacac981083f2f283 Author: Dennis Schafroth Date: Thu Mar 11 15:35:15 2010 +0100 Updated to new format for non-valid characters in element names commit e92d8c8a0069412663e86b03ce1d87368118f532 Author: Dennis Schafroth Date: Thu Mar 11 15:33:19 2010 +0100 Added echo statement, but commented out commit 74d0b36793d64daf9c69a2a383a64ef49e17e159 Author: Dennis Schafroth Date: Thu Mar 11 15:30:04 2010 +0100 Re-implemented the element name encoding as Adams suggestion: when the values is not suited for element name commit f15418ee295542935d616a2163377b71e40ce04f Author: Dennis Schafroth Date: Thu Mar 11 15:29:21 2010 +0100 Re-implemented the element name encoding as Adams suggestion: when the values is suited for element name commit eb7eb1c9a8e4979c5a783393be7b74fd92a04c54 Author: Dennis Schafroth Date: Thu Mar 11 13:11:53 2010 +0100 Found a new place to add turbo marcxml element name "r". commit 209618d338385f6af442b6bf329bb4052eb02f4c Author: Dennis Schafroth Date: Thu Mar 11 12:41:37 2010 +0100 Result of converting (using libxml2) marc to xml back to marc commit af1da643dbc225f7cbb0a2f8c53c02f7eea8b9c5 Author: Dennis Schafroth Date: Thu Mar 11 12:33:04 2010 +0100 Added turbo marcxml record and a test for it commit df5c44e0977db702ebc177790d0e4ad87b73f8bd Author: Dennis Schafroth Date: Thu Mar 11 12:32:07 2010 +0100 Changed the add_datafield_turbo_xml to match indicators as attributes commit 73546e0de845d238d169531dfabc4590b080713f Author: Dennis Schafroth Date: Thu Mar 11 12:30:42 2010 +0100 Fixed: reading indicators as attributes, no longer sub elements. Added XML format detections (xml, turbo marc) based on record/r element. commit 26ae2d92619d0aba5a1e6e4a73412526acc3f1d6 Merge: d36517a fec0414 Author: Dennis Schafroth Date: Thu Mar 11 09:47:26 2010 +0100 Merge branch 'master' into turbomarc commit d36517ad4b5054144bfcddf221c546cb61af9ea0 Author: Dennis Schafroth Date: Wed Mar 10 22:38:17 2010 +0100 Added new non-libxml2 tmarc. fixed naming so it matches non-libxml2/libxml2 commit eb5f027da754b8786e12dd6c7551fa551bc2e3ca Author: Dennis Schafroth Date: Wed Mar 10 22:33:40 2010 +0100 Result of libxml2 turbo marc conversion commit 653561fa749dbd5c0a438f249f2927ea33d5843c Author: Dennis Schafroth Date: Wed Mar 10 22:31:47 2010 +0100 Now non-libxml2 in tmarc*.xml commit 08c9e64c371cf2a25fbe682fc273a328a43a38a8 Author: Dennis Schafroth Date: Wed Mar 10 22:21:56 2010 +0100 Fixed: element_name_encode log statetment log statement messed up. commit 1d1a480fa1fc743cc5d471ffbd1fad81ff23192d Author: Dennis Schafroth Date: Wed Mar 10 16:36:53 2010 +0100 Commented out the marc -> xml -> marc compare. Fails due to leader/09 (character set) commit c54a5790984e8bd597a8ccd4d1d2d0cae6da8af3 Author: Dennis Schafroth Date: Wed Mar 10 16:34:45 2010 +0100 Extracted element name encoding into function. Moved indicators back as attributes to element commit 4a382949b64be5373386506e4b6f6c1e7c553d3d Author: Dennis Schafroth Date: Wed Mar 10 14:14:03 2010 +0100 Fixed: Generating correct xml after intro of turbo xml commit a83a2555fe95266031b6f3043e344eb1c1abd193 Author: Dennis Schafroth Date: Wed Mar 10 13:44:16 2010 +0100 Able to make valid turbo marcxml not using libxml2. commit fec04146c50098096daab3c22095f7174b2aa84c Author: Adam Dickmeiss Date: Wed Mar 10 11:27:49 2010 +0100 Fix EXTRA_DIST due to rename of tests commit f450fc48c1ab271aa0bd45d96e46dd2e0f2d9523 Author: Dennis Schafroth Date: Wed Mar 10 10:31:54 2010 +0100 Added support for turbo format in new function. Need testing commit 3107ce3a34993d2f784387f227a50343fff83bbc Author: Adam Dickmeiss Date: Tue Mar 9 15:37:11 2010 +0100 Rename C-based tests commit ed31c923f03ec124060972f5351b8b33e07a2e13 Author: Adam Dickmeiss Date: Tue Mar 9 15:13:48 2010 +0100 Use PTHREAD_CFLAGS for all test sources At this stage only tst_icu_I18N use threads. commit e5c00c8cfb4a34c9d2dde1e9d8ffa29817b38b7e Author: Dennis Schafroth Date: Tue Mar 9 13:50:12 2010 +0100 Removed redundant turbo_format commit 5e240678f83361786067bdb9741ad5302b5bc5d7 Author: Dennis Schafroth Date: Tue Mar 9 13:49:27 2010 +0100 Support for turbo marcxml commit 7c862e68f8fd3de440db2498bd5619f7f70ad43d Author: Dennis Schafroth Date: Tue Mar 9 13:49:05 2010 +0100 Support for turbo marcxml commit 7b4adcc54d64c9196a8c19a7f69c850774b8776b Author: Dennis Schafroth Date: Tue Mar 9 13:48:14 2010 +0100 Removed duplicate variable for turbo marcxml (using_turbo_format). Now works in zoomsh: show 0 1 txml commit 45092b952efe25cbb98ff928da8047a3e141036c Author: Dennis Schafroth Date: Tue Mar 9 13:46:43 2010 +0100 Updated eclipse settings commit 9527043ce026bae5a1ea8bb5fdca0f8d5f06f98d Author: Adam Dickmeiss Date: Tue Mar 9 09:55:41 2010 +0100 Deb 4.0.2-1indexdata commit 7dbe4b2f7fd95de64d15029e10d2ea04c8c1f46a Author: Adam Dickmeiss Date: Tue Mar 9 09:53:45 2010 +0100 Version 4.0.2 commit 055f23ee3692349a03f681ef1a0d5fd70c0cc770 Author: Adam Dickmeiss Date: Tue Mar 9 09:53:07 2010 +0100 wrbuf_destroy allows NULL WRBUF passed to it commit 387f22c564289db77315c0d6914e127fc99774bc Author: Adam Dickmeiss Date: Mon Mar 8 21:04:48 2010 +0100 icu_iter_get_token_number returns int commit 4adfba7e638623bfdca78c454d274174f7d1e01e Author: Adam Dickmeiss Date: Mon Mar 8 11:27:20 2010 +0100 Add tests for CCL qualifier aliases commit 3f02a85787de9b5340914aec0738f9eb46e89d79 Author: Adam Dickmeiss Date: Mon Mar 8 11:24:41 2010 +0100 CCL: Allow qualifier aliases to be defined in XML ccl_xml_config may now read CCL qualifier aliases as well, eg: commit 9773a01f6dae65e5f9c424b3f2bc7454b8270cfc Author: Adam Dickmeiss Date: Mon Mar 8 11:20:51 2010 +0100 CCL: fix parsing of ccl qualifiers aliases The configuration specification for CCL qualifier aliases is now parsed correctly. commit dc0ea3eaeb38d04f10118bfe62cd8e6c80033ce6 Author: Dennis Schafroth Date: Fri Mar 5 16:11:24 2010 +0100 Test files for libxml2 output commit 315dd387088f407f397ed5aa789e9ffadbcbbd80 Author: Dennis Schafroth Date: Fri Mar 5 16:09:46 2010 +0100 Ignore temporary test data commit cad33850686850356e9c7da4591abf9cab3193a2 Author: Dennis Schafroth Date: Fri Mar 5 16:09:19 2010 +0100 Added turbo marc data files (generated from marc format) commit ec6494bdb7c628db3b19c523db32d11a44225f79 Author: Dennis Schafroth Date: Fri Mar 5 16:07:04 2010 +0100 Updated to handle libxml2 and tmarcxml as well. Adding new check whether the conversion is reversible commit cde148647135f1a06f5b5ebf769430a9615d86bc Author: Dennis Schafroth Date: Fri Mar 5 16:05:24 2010 +0100 Fixed memory alloction errors. Added new function for turbo marcxml format. Handling decoding of subfield as hex number commit 0de835ef3a1c6e188718fe84d4f9a6a46312ab0b Author: Dennis Schafroth Date: Fri Mar 5 13:38:44 2010 +0100 Reverted manual changes in marcxml commit 77f27a99f17bdd5e6fc4d8a202ecc6da4ef95660 Author: Dennis Schafroth Date: Thu Mar 4 17:10:12 2010 +0100 Added turbo marcxml read and write commit f03f934986cd3ff1fbb98f8b1432d70c46f6809e Author: Dennis Schafroth Date: Thu Mar 4 17:09:09 2010 +0100 Added turbo marcxml format commit 21663da3c7047798632fbfe2871c242aa3a3a7cc Author: Dennis Schafroth Date: Thu Mar 4 17:08:23 2010 +0100 change some indicators to one commit 66632b7fb00f84ddc2a00a3a46ac459eb35e052e Author: Dennis Schafroth Date: Tue Mar 2 17:10:30 2010 +0100 Added turbo marcxml format. Added check for output error commit ba9dd475d02ebbebde75d82b23fa0b0c4631288e Author: Dennis Schafroth Date: Tue Mar 2 17:09:18 2010 +0100 Added turbo marcxml to output commit 7e32bf45764375a4485c359b8bc8c3c518a36680 Author: Dennis Schafroth Date: Tue Mar 2 17:04:00 2010 +0100 Added turbo marcxml format to output commit 5c0e243664a63c8522d400abbda6dc892cae4349 Author: Adam Dickmeiss Date: Tue Mar 2 13:44:15 2010 +0100 GFS: fix sizeof: saved by the bell commit 92e360a6e22fc5fda22d7f6a6449c3c8f0ee8fb9 Author: Adam Dickmeiss Date: Tue Mar 2 13:41:54 2010 +0100 GFS present: Deal with number of recs <= 0 commit 46f5205bdb8e837ab305644839451949916e40cb Author: Adam Dickmeiss Date: Tue Mar 2 12:30:03 2010 +0100 yaz-client: fail bad show args commit f2891d8771cb23cc70d973c6785bec20e31f511e Author: Adam Dickmeiss Date: Tue Mar 2 12:29:46 2010 +0100 Add odr_strtol (strtol for Odr_int). commit 1d81a9a4f7d31634552e8f93912b778527bcff00 Author: Dennis Schafroth Date: Mon Mar 1 16:05:31 2010 +0100 Working in progress: refactor the xml_write to handle two formats commit c27504bf04bb54c2744367d414358a11cf5ac84e Merge: 6c0318a 0e9d616 Author: Adam Dickmeiss Date: Tue Feb 23 12:41:32 2010 +0100 Merge branch 'master' of ssh://git.indexdata.com/home/git/pub/yaz commit 6c0318aa24f63e5a4e09953207691280c3964225 Author: Adam Dickmeiss Date: Tue Feb 23 12:40:51 2010 +0100 4.0.1-2indexdata for testing ZOOM_connection_close commit f49f756835c48c2d083ef5f2b24bbaf499ebd98e Author: Adam Dickmeiss Date: Tue Feb 23 12:39:26 2010 +0100 Add ZOOM_connection_close commit 0e9d6161b51ba5335ae4afa911e9f174b23a4b46 Merge: 401c6a4 4e64103 Author: Adam Dickmeiss Date: Wed Feb 10 22:32:51 2010 +0100 Merge branch 'master' of ssh://git.indexdata.com/home/git/pub/yaz commit 401c6a437dd1cfd9103d9e4a71133365c53feeff Author: Adam Dickmeiss Date: Wed Feb 10 22:32:34 2010 +0100 Fix url.icu entity ref commit 4e641034b013c43b20922f66258f5daf8ac3ce59 Author: Adam Dickmeiss Date: Wed Feb 10 10:42:15 2010 +0100 yaz-client's auth command also works for SRU Until now the auth command and option -u would only work for Z39.50. commit 1958bfea3355304f47bd6dd2cc20b58b8c4b0f3e Author: Adam Dickmeiss Date: Tue Feb 9 14:51:10 2010 +0100 No fixed size buffers for ZOOM shell - bug #3257 commit 46a5c887dd9e559be988094bae9b7ca1bb1a6c24 Author: Adam Dickmeiss Date: Fri Feb 5 14:39:32 2010 +0100 tstodr: make it work on s390 Fix ODR test to make it work regardless of whether char is unsigned or signed by default (most platform's char is signed, s390's char is unsigned). commit 9efa074e7621acf1a41b8382567a40e9b0fccbfd Author: Adam Dickmeiss Date: Tue Feb 2 16:33:19 2010 +0100 Bump version to 4.0.2 commit fbb0389c468253ae678c1169fe0d7a8d8d54e8cb Author: Adam Dickmeiss Date: Tue Feb 2 13:54:07 2010 +0100 New icu_iter-functions The new icu_iter-functions makes it possible to use ICU chains from many threads. commit 399eedc05492646adc53a92193652aeae44deb1d Author: Adam Dickmeiss Date: Tue Feb 2 13:27:47 2010 +0100 Introduce icu_iter_first commit c16ca7db71f13d0dba5002a4d9c28438c18c06f7 Author: Adam Dickmeiss Date: Tue Feb 2 12:26:50 2010 +0100 Enable icu_chain_step_clone commit 7265cad51feddec535b81f94e644712618b76ecf Author: Adam Dickmeiss Date: Tue Feb 2 12:26:20 2010 +0100 Fix icu_tokenizer_clone (ubrk_safeClone) commit b71d00d4e1c65d134664f37502d62fcfa8136d76 Author: Adam Dickmeiss Date: Tue Feb 2 12:25:12 2010 +0100 ICU transform: init ICU status commit 527a008f2f3b1a19a968a7a1275132a04aa4d945 Author: Adam Dickmeiss Date: Mon Feb 1 16:32:38 2010 +0100 Working on cloning / thread safety for ICU stuff commit ded9dadedab82a379e0e52d78a61fe9632ac870c Author: Adam Dickmeiss Date: Mon Feb 1 15:05:44 2010 +0100 ICU test refactor. Hide icu_tokenizer struct. commit 4a44a7d9061b6d132ca1c6c50980fca5ad8e196a Author: Adam Dickmeiss Date: Mon Feb 1 14:17:44 2010 +0100 Use yaz_log rather than printf for ICU test commit 7d677757bffcf4cc8f30d69053004d50d8408e55 Author: Adam Dickmeiss Date: Tue Jan 26 15:17:39 2010 +0100 Fix home page for YAZ in Windows Menu commit 4cd30fbad4b8505f8f5b83f4f7ed6a22889f57bc Author: Adam Dickmeiss Date: Tue Jan 26 14:57:51 2010 +0100 Bump version to 4.0.1 commit ca56262b1976c7a55c406b44e730570fb70de418 Author: Adam Dickmeiss Date: Tue Jan 26 14:35:30 2010 +0100 yaz-json-parse part of Deb + RPM commit 4bd71a8e6144a4f1778e10311c407c66ab462c7c Author: Adam Dickmeiss Date: Tue Jan 26 13:59:53 2010 +0100 yaz-json-parse man page commit a6d42174fde823c89a661c17be2165bce0d94870 Author: Adam Dickmeiss Date: Tue Jan 26 13:39:37 2010 +0100 Add yaz-json-parse utility program commit 76d513fc3b7e7e267875fd965023dda71a635e1d Author: Adam Dickmeiss Date: Tue Jan 26 12:58:42 2010 +0100 dirent wrapper. Use yaz_file_glob for XML include commit de82e7fd43191fc2ae0d8eab9781c59c595c343a Author: Adam Dickmeiss Date: Tue Jan 26 12:19:47 2010 +0100 File globbing functional commit 39c353b281dd91c145e122110d516fce7bbde8c6 Author: Adam Dickmeiss Date: Mon Jan 25 16:30:14 2010 +0100 Start work on file_glob . commit 271a9c838f01dfb263d2bb13a7ef098def7e8f0f Author: Adam Dickmeiss Date: Mon Jan 25 13:46:48 2010 +0100 Not so dummy WRT result-sets yaz-ztest now do proper result-set handling. commit 419e0de8e395a9b43263d669eb83dc5bef0734a0 Author: Adam Dickmeiss Date: Mon Jan 25 13:45:41 2010 +0100 Fix spelling commit 20c8193263e5ada5c0aef97e1b0f6ec02fd7004d Merge: 16cec0c 8f81448 Author: Adam Dickmeiss Date: Mon Jan 25 11:59:29 2010 +0100 Merge branch 'master' of ssh://git.indexdata.com/home/git/pub/yaz commit 16cec0c7730f9ae5ce52a12a66d139e02cb806c0 Author: Adam Dickmeiss Date: Mon Jan 25 11:59:19 2010 +0100 All databases with prefix db allowed commit 2ce9902d5541bf71521587a073a9c09d36d4c3da Author: Adam Dickmeiss Date: Mon Jan 25 11:59:04 2010 +0100 Allow any range for dummy MARC commit 8f81448d9f3cbedaec633184c3a181b72de65c71 Author: Adam Dickmeiss Date: Mon Jan 25 10:45:39 2010 +0100 NSI: rephrase comment commit f51b5b23754da0f2446ade88c176939baffc64f9 Author: Adam Dickmeiss Date: Fri Jan 22 23:02:46 2010 +0100 XML Include: do not substitute root node Do not substitute root node .. The node parameter is simply xmlNode* - not xmlNode **. commit d3a3f3ed2d1b77d048e4ba0c7befebaa4b7671b8 Author: Adam Dickmeiss Date: Fri Jan 22 23:02:08 2010 +0100 Add test of XML Include commit 437cd481214b73c9dd33f86966f1edf244ffa4c4 Author: Adam Dickmeiss Date: Fri Jan 22 22:30:22 2010 +0100 One COMSTACK test program commit 3ead2151da31877742d79172250deb016682961b Author: Adam Dickmeiss Date: Fri Jan 22 22:21:13 2010 +0100 Header for Adding XML Include utility The header, xml_include.h, should have been part of previous commit. commit bc34bd42eb228125be6ff9143d9f98dbe11889a0 Author: Adam Dickmeiss Date: Fri Jan 22 15:38:32 2010 +0100 Adding XML Include utility (not W3C's include) commit 510bacff7df017db33072de7bc204d22a6b5535d Author: Adam Dickmeiss Date: Fri Jan 22 15:17:25 2010 +0100 Embarrassing commit 3498164f9058a807e5e25de88ecce61b97df2d14 Author: Adam Dickmeiss Date: Thu Jan 21 16:11:04 2010 +0100 Avoid mixed stmt/var declare commit f90459f4bb32ee8537edf31ea29fb59ae987d685 Author: Adam Dickmeiss Date: Thu Jan 21 13:18:18 2010 +0100 ZOOM_record_get: pretty xml format (bug #3182) ZOOM_record_get supports new parameter "format" which makes it pretty format XML record content. commit 6158d7465f3e832a18554c3e1157c12faaa7828e Author: Adam Dickmeiss Date: Thu Jan 21 09:22:47 2010 +0100 yaz-client: ctrl-d print \n before exiting Some small things just matter much. commit 8a6e1b377726cca5f60ce249b1a5bfcb6616bdab Author: Adam Dickmeiss Date: Wed Jan 20 15:05:19 2010 +0100 Fix JSON parser WRT start symbol The start grammar symbol (referred to as JSONText in ECMA-262) is JSONValue, not JSONObject. commit 8d297aab170c07e64ed6d1c0b817e13399f068d2 Author: Adam Dickmeiss Date: Wed Jan 20 10:35:10 2010 +0100 Fix ODR/NMEM proto WRT size_t in doc commit 0576c95614b10d6ede71b5b66651d9796a7d83e5 Author: Adam Dickmeiss Date: Wed Jan 20 09:53:51 2010 +0100 Version 4.0.0-2 commit ffe862e36b8b60b1197b223cec0b78482cbd7763 Author: Adam Dickmeiss Date: Tue Jan 19 22:34:30 2010 +0100 Add casts for signed/unsigned ints commit 4b178f16795cbdd5693abc705e5bdd4a17016672 Author: Adam Dickmeiss Date: Tue Jan 19 22:34:08 2010 +0100 Remove p_query_scan (not in use anywhere) commit c5a81c4eb35bcab571d42f4e02a69e4ed76dc20b Author: Adam Dickmeiss Date: Tue Jan 19 21:36:47 2010 +0100 Fix print in logrpn commit 31216a13d9e767800206f612fd14c408357fdafd Author: Adam Dickmeiss Date: Tue Jan 19 19:56:54 2010 +0100 Dont include removed header libxml2_error.h commit f037b7c90a9cae1c9fe35b589a1c1b9320d6e3ce Author: Adam Dickmeiss Date: Tue Jan 19 15:28:27 2010 +0100 Update NEWS for YAZ 4 changes commit e5c44d40aa8c2f5ab2dc7ad1e0b15d67eaca78c1 Author: Adam Dickmeiss Date: Tue Jan 19 15:23:23 2010 +0100 Reformat commit 99045261c60b0b3b93e3553ee01b90b2ba59cfc4 Author: Adam Dickmeiss Date: Tue Jan 19 15:13:49 2010 +0100 Update NEWS for 3.0.52 commit 46767b31f38d6b9a1964319c5473c948dbb10c1d Author: Adam Dickmeiss Date: Tue Jan 19 14:38:12 2010 +0100 RPN log: change some types to Odr_int commit 2d93f6df5a0d595628e2a61304ad0024a54775dd Author: Adam Dickmeiss Date: Tue Jan 19 14:37:47 2010 +0100 Add safe cast commit 002e8d5e6cdb9f188fd91df930b6cc763f50f96d Merge: f786c24 80fee38 Author: Adam Dickmeiss Date: Tue Jan 19 14:16:08 2010 +0100 Merge branch 'master' of ssh://git.indexdata.com/home/git/pub/yaz commit f786c24ecec337c9055586cca0507c7e7bbe81f3 Author: Adam Dickmeiss Date: Tue Jan 19 14:13:13 2010 +0100 GFS: step_size, term_position, statuses type int Members step-size, term_position from bend_scan_rr changed from Odr_int to int. Member statuses from bend_delete_rr changed from Odr_int to int. commit 80fee38926477efd73c739731c5670d59c5d1bf7 Author: Adam Dickmeiss Date: Tue Jan 19 13:54:54 2010 +0100 More odr_int casts commit d758b64a40725394de0b05bdcf108948bf13ee49 Merge: efb222d 1122ba7 Author: Adam Dickmeiss Date: Tue Jan 19 13:43:29 2010 +0100 Merge branch 'master' of ssh://git.indexdata.com/home/git/pub/yaz commit efb222d1aa3e4d12802ecc5c8dfdf1969085da65 Author: Adam Dickmeiss Date: Tue Jan 19 13:41:40 2010 +0100 Controlled conversion from Odr_int to int Some Odr_int values do not fit in the backend.h structure which still uses int for some things such as start and number (record positions). The conversion from Odr_int to int is performed by a utility odr_int_to_int in GFS now. commit 7cc2958d8f7877fa54a120cbc218ece03a8c0bcf Author: Adam Dickmeiss Date: Tue Jan 19 13:39:59 2010 +0100 Reindent commit 1122ba757b75750168f0ee748748b3bdc20dcd8b Author: Adam Dickmeiss Date: Tue Jan 19 13:12:39 2010 +0100 WIN32: dont mess with peer address For some reason we never got accept on Windows to return a peer address. This change just ensure we don't work with it (uninitialized variable addr). commit 03a8e03467d0085ffa2e34d885118fb8fe447149 Author: Adam Dickmeiss Date: Tue Jan 19 12:48:05 2010 +0100 WIN32: yaz-version.h depends on configure.ac commit c8ec7f23c5eaf841978968d8d9f85d459960a01f Author: Adam Dickmeiss Date: Tue Jan 19 12:17:09 2010 +0100 Fix VS 9 path commit 469a4f338acca4b3185548eedb03e07d36f26a48 Author: Adam Dickmeiss Date: Tue Jan 19 12:09:31 2010 +0100 Win32: use manifests by default commit 43849124700caab5cd76369c0fea934ca756e3a7 Author: Adam Dickmeiss Date: Tue Jan 19 12:09:12 2010 +0100 Use VS 2008 for NSI commit 606d0755a0441402d35cc597f1c85896d554898e Author: Adam Dickmeiss Date: Tue Jan 19 11:05:42 2010 +0100 log.h: Doxygen-friendlier commit d1b7e8b23770a100ae1baa74da31b0b2fd8ea0b2 Author: Adam Dickmeiss Date: Tue Jan 19 10:47:54 2010 +0100 log: strerror is always there commit 155ca4a5ebeb7827e1dd280dbd64e56f40e3bb4b Author: Adam Dickmeiss Date: Tue Jan 19 10:45:44 2010 +0100 Remove LOG_-defines (obsolete for >5 years) commit 2ca7419e15fc506b3ec2dcff3b288861a328793d Author: Adam Dickmeiss Date: Tue Jan 19 10:42:31 2010 +0100 Doc MARC utils. Remove yaz_display_OPAC commit 604f5efb41a53b29bad89178873572110a90c645 Author: Adam Dickmeiss Date: Tue Jan 19 10:06:08 2010 +0100 Make some zget_-func static. Functions such as zget_InitRequest, zget_InitResponse, .. are now static. They were never part of a public header - except zget_Close used by GFS. All these are used by public function zget_APDU. commit ff9ef529da0b40f6aa6ff73954933beb93c08186 Author: Adam Dickmeiss Date: Tue Jan 19 09:56:16 2010 +0100 GFS: Use zget_APDU rather than zget_Close Use zget_APDU rather than zget_Close.. Because zget_Close should not be public and because using zget_APDU is shorter. commit 1aac63eecd76d5d060da84037a355c153d747ca7 Author: Adam Dickmeiss Date: Tue Jan 19 09:45:06 2010 +0100 Remove redundant function libxml2_error_to_yazlog Function libxml2_error_to_yazlog is redundant and not in used by applications other than YAZ itself. yaz_log_xml_errors does the same - and is used at least by Pazpar2. commit d68f051b434a3a6171e56f12c798fd499e9abbbb Author: Adam Dickmeiss Date: Tue Jan 19 09:31:25 2010 +0100 yaz_log_xml_errors: use log level given Fix yaz_log_xml_errors to use the log_level given.. Instead of YLOG_WARN. commit 97193c4445d3dca23f65c4b517801f148da5a512 Author: Adam Dickmeiss Date: Tue Jan 19 09:25:44 2010 +0100 Document . Remove if/endif section commit c2e2ad215f5b5f76265f2651d1f326e160a8b5c2 Author: Adam Dickmeiss Date: Tue Jan 19 09:21:59 2010 +0100 Revert "Remove obsolete Z_-definitions" This reverts commit 1d2f32707c0d46f1fe11826fadbb2537fd90fac7. We keep various definitions to preserve backwards compatibility. commit 0923be02856667003bcef6b22a43dc18614e74ba Author: Adam Dickmeiss Date: Thu Jan 14 16:17:25 2010 +0100 Update m4 commit 2db517d64ac08da1f812f33812cf58f6aeb905e3 Author: Adam Dickmeiss Date: Thu Jan 14 16:16:54 2010 +0100 Comment WRBUF. Remove wrbuf_vputs commit 59569d48f6841cff9489858744e738fcc2dc3703 Author: Adam Dickmeiss Date: Thu Jan 14 16:16:20 2010 +0100 Mention timing commit 2da4a703da966708bb2e2bd4115ee9c348397667 Author: Adam Dickmeiss Date: Thu Jan 14 16:16:05 2010 +0100 Comment timing util commit ee2000792b8f11a3ada8b3cd7f197ac6c7fa7d67 Author: Adam Dickmeiss Date: Thu Jan 14 12:51:22 2010 +0100 Use size_t for local commit 7c9bef6a8e73fe722c2de81e76f56afc8d7f3cd3 Author: Adam Dickmeiss Date: Thu Jan 14 12:51:10 2010 +0100 Change type of cs_-masks commit 88d3bedf772316f87e1996f655ccf8d1e2589755 Author: Adam Dickmeiss Date: Thu Jan 14 12:39:12 2010 +0100 Bump copyright year commit ea7a73ee213b9dc8316f064628a8540313097a62 Author: Adam Dickmeiss Date: Thu Jan 14 12:33:57 2010 +0100 Fix comment commit ebd8274bfd15776ce3fec3ce41a835aedfa73f58 Merge: dec1c4b 1564539 Author: Adam Dickmeiss Date: Thu Jan 14 12:31:11 2010 +0100 Merge branch 'master' of ssh://git.indexdata.com/home/git/pub/yaz commit dec1c4b71c8bb7a0d78efee541eeac07782bff73 Author: Adam Dickmeiss Date: Thu Jan 14 12:30:19 2010 +0100 WRBUF: size_t for sizes, void funcs. For size parameters for WRBUF size_t is now used .. Used to be int in some cases. Many wrbuf_-functions used to return an int indicating some length.. These return values were never used. And so they are now void. commit d7cf0285e21b40c1fba6259d57bdabae94571bd5 Author: Adam Dickmeiss Date: Thu Jan 14 11:08:38 2010 +0100 odr_malloc,odr_total uses size_t commit 070438f9027bec2411d0d3ec4491a6aa6651093a Author: Adam Dickmeiss Date: Thu Jan 14 11:07:41 2010 +0100 ASN.1 comp: Put blank in if stmt commit b5d18f0aff317a648757c41b9ebe49cc95be8d83 Author: Adam Dickmeiss Date: Thu Jan 14 10:58:34 2010 +0100 Add cast commit 82a298086b4a8f1988e45aeb8e52494f05ebc3e7 Author: Adam Dickmeiss Date: Thu Jan 14 10:58:13 2010 +0100 MARC table: offset type size_t commit 6006e6ad14bd76d1c57b1bc1d9044a321fe4aa26 Author: Adam Dickmeiss Date: Thu Jan 14 10:16:39 2010 +0100 Log: mostly local changes WRT size_t commit 25939454743eb1f58641b854b32f2235107ba4f2 Author: Adam Dickmeiss Date: Thu Jan 14 10:04:02 2010 +0100 Change local var type to size_t commit 14a3ce42903ba830cb2b838f5a6a7dd2afe93bd6 Author: Adam Dickmeiss Date: Thu Jan 14 10:03:24 2010 +0100 Update yaz_strerror to use size_t commit 2e7534d6db2aa45913384abf945475ebb08a021f Author: Adam Dickmeiss Date: Thu Jan 14 09:55:21 2010 +0100 Reformat commit 4e50d9461c89fb538b1826f9cecf4475deaeed3b Author: Adam Dickmeiss Date: Thu Jan 14 09:52:20 2010 +0100 NMEM: Update API to use size_t for sizes commit b0f1c1366ae428139ead8584c8c7e423aad7e0b3 Author: Adam Dickmeiss Date: Thu Jan 14 09:31:18 2010 +0100 RPN parsing: simplify and make some funcs static. Remove unused parameters and make functions p_query_scan_mk, p_query_rpn_mk static (they were never present in public headers anyway). commit abf8266c39394f5d3b182cfba09c4b3f64584e4a Author: Adam Dickmeiss Date: Thu Jan 14 09:30:51 2010 +0100 Remove redundant assert commit 6b75f79da659328925dbe37b9ce1dd3e95ba2122 Author: Adam Dickmeiss Date: Thu Jan 14 09:30:31 2010 +0100 Remove unused tcpip_getsockopt commit 38c840f98f5f85fdd0d4553d2ef2ea0f0d7fb1f0 Author: Adam Dickmeiss Date: Thu Jan 14 09:28:54 2010 +0100 MARC tables: avoid warning due to tail init Explicitly initalize last entry of flat table to avoid GCC warning. commit f1717bac2bc62456bcd4fa5f727f9a74d12122d1 Author: Adam Dickmeiss Date: Thu Jan 14 09:28:15 2010 +0100 Change type of idx=i to size_t commit 156453970cdd305bd535d2d08fd8a7eeab40bcc8 Author: Adam Dickmeiss Date: Thu Jan 14 08:58:53 2010 +0100 Bump year in copyright stmts commit edd37c41056b43c4be57887a0d87b6071144fd08 Author: Adam Dickmeiss Date: Thu Jan 14 08:58:39 2010 +0100 Update for YAZ4 DLL commit 21475478343527287499dada4b21e0366bf7e94e Author: Adam Dickmeiss Date: Wed Jan 13 16:02:29 2010 +0100 RPM: bump to libyaz4 commit c95af8bed6fc734e8007de756d7fd5a3ed892848 Author: Adam Dickmeiss Date: Wed Jan 13 16:00:37 2010 +0100 Add json.obj commit 0c2402d46da75fbba213cd43b2cfa60e346a5b3b Author: Adam Dickmeiss Date: Wed Jan 13 15:59:58 2010 +0100 Bump YAZ DLL names from 3 to 4 commit bf4af27e54345e280223257161448ace0f0b1d67 Author: Adam Dickmeiss Date: Wed Jan 13 15:44:10 2010 +0100 More JSON utilities New functions json_get_object, json_detach_object, json_get_elem, json_count_children, json_parser_subst, json_append_array. commit 8cd41e6a09e7279587dc29774669fbc13685566d Author: Adam Dickmeiss Date: Tue Jan 12 22:37:31 2010 +0100 Add JSON encoder and decoder commit 38f02127971c08e53bc65dcc4a54ef5c1396708e Merge: 1d2f327 eceac7b Author: Adam Dickmeiss Date: Tue Jan 12 21:38:47 2010 +0100 Merge branch 'master' of ssh://git.indexdata.com/home/git/pub/yaz commit 1d2f32707c0d46f1fe11826fadbb2537fd90fac7 Author: Adam Dickmeiss Date: Tue Jan 12 21:38:39 2010 +0100 Remove obsolete Z_-definitions commit eceac7b7869288887b1b14212208e73ab54116db Author: Wolfram Schneider Date: Mon Jan 11 11:18:19 2010 +0100 document timeout option commit 770b156ad12cf75c816cdbe7f935493b812d6b5c Author: Adam Dickmeiss Date: Tue Dec 29 11:02:26 2009 +0100 Comment on conversion commit b97d1c530d7e111f3a4f9cfbb14220cc64561753 Author: Adam Dickmeiss Date: Fri Dec 25 23:00:01 2009 +0100 BER int: Operate on 64-bit regardless of Odr_int commit 086df1e70187914316d4755f9219335c92e6779d Author: Adam Dickmeiss Date: Fri Dec 25 22:59:23 2009 +0100 Only perform 64-bit int test in 64-bit mode commit 7c9a6eb7f59592b49669a456e0b66b46c81cd33e Author: Adam Dickmeiss Date: Fri Dec 25 22:58:45 2009 +0100 Update example for size_t args (scan) commit 1bc4f08eaac49e38f91a6bba89bf3092c1a60568 Author: Adam Dickmeiss Date: Fri Dec 25 01:11:56 2009 +0100 Fix uninit var in ber_decinteger commit 0988d80d70a06b9694664141f7068966d91caf3d Author: Adam Dickmeiss Date: Fri Dec 25 01:11:11 2009 +0100 Fix constant (-2^31) commit 552662f6f80c211b5b4ab81b8ea7afc2ba44f58a Author: Adam Dickmeiss Date: Tue Dec 22 14:55:15 2009 +0100 yaz-client: show operate on Odr_int commit 7acd2f2e64ad017d39c4aeb9c96882db1639d1d9 Author: Adam Dickmeiss Date: Tue Dec 22 14:49:12 2009 +0100 Testing of ber_integer commit 26fa70744fab926619fefa6aa50813e689d97981 Author: Adam Dickmeiss Date: Tue Dec 22 14:48:02 2009 +0100 BER: 64-bit codec for INTEGER. commit 1abd0885ceca8da4cf9c73d606b9681458f38d3a Author: Adam Dickmeiss Date: Thu Dec 17 23:35:13 2009 +0100 yaz-client: New command, 'url' which does HTTP GET commit 0b4aa2a134665d7161782db8e24f19e911178b1c Author: Adam Dickmeiss Date: Thu Dec 17 23:32:57 2009 +0100 Refactor HTTP chunk decoding to separate func commit dcac3690d8c478532eeb077233f93e8a791709a3 Author: Adam Dickmeiss Date: Wed Dec 16 13:31:15 2009 +0100 DB: Remove @id from YAZ book commit 202c86ec645b0ec72aa9123dcdd8f735153114ea Author: Adam Dickmeiss Date: Thu Dec 17 15:13:56 2009 +0100 clone_z_type: fix leak; occurred for enc failures commit b4dbbd7c2fa1a6ca687f589f895e1fe1e7addeed Author: Adam Dickmeiss Date: Thu Dec 17 13:57:42 2009 +0100 XML records printed as is (not forced to 7-bit) Some octet aligned records, such as XML, HTML, are now just printed as is.. They are not being displayed with \Xii-sequences for anything beyond chars 1-126 (decimal). This is becauase most terminals these days are UTF-8 encoded anyway. commit 8981acaf5c0aaf34a70f01178f22591bb8b3e19d Author: Adam Dickmeiss Date: Mon Dec 7 22:44:04 2009 +0100 Reformat, simplify commit 663c43bdba2dde816bb4d89df3daa0c323077e88 Author: Adam Dickmeiss Date: Mon Dec 7 22:29:47 2009 +0100 Remove socket (int *fd) from search_rr handler The socket descriptor ptr is a facility that allowed a search handler to supply a socket which would serve as a callback - when search was complete. This facility has now been in use for years .. Has not been tested for years and so probably does not work anyway. commit 84567c573de4d4b9822d9f2dd9caf8e97d864118 Author: Adam Dickmeiss Date: Mon Dec 7 22:12:39 2009 +0100 Remove bend_request definition from backend.h commit f170b856174b48f66a2cecb6ff6b4d02e02973fa Author: Adam Dickmeiss Date: Mon Dec 7 22:08:15 2009 +0100 Remove unused local commit f00d2bb50f84184c7682bd31a5361648a909f9f6 Author: Adam Dickmeiss Date: Mon Dec 7 22:03:52 2009 +0100 Remove unused GFS bend_request functions Remove some public GFS functions that operate on bend_request - bend_request_send, bend_request_mk, bend_request_destroy, bend_request_getid, bend_backend_response, bend_request_setdata, bend_request_getdata. commit 8965b9ad303ed2ef26f55db2224860745a0a5128 Author: Adam Dickmeiss Date: Mon Dec 7 21:51:25 2009 +0100 Doxygen frindly comments commit 4a9cbf62bc7a294f1782386997e09d2dd4ba9671 Author: Adam Dickmeiss Date: Fri Dec 4 13:50:43 2009 +0100 COMSTACK API changes: cs_stackerr, cs_addrstr. COMSTACK method cs_stackerr removed. It is not implemented by tcpip or unix COMSTACK, perhaps for ISO SR which was removed 7 years ago. COMSTACK macro / method cs_addrstr now returns 'const char *' rather than 'char *. The returned string is read-only and should not be modified by applications. COMSTACK cs_close is now a void function - it no longer returns int. No applications check for the value and the implementations has always returned 0. commit a1b50c5a7968be1cf039719da62c59bb89683253 Author: Adam Dickmeiss Date: Fri Dec 4 13:38:56 2009 +0100 Add COMSTACK example/test commit 4e50eccc10dbfb82098c72089c3b840813b71505 Author: Adam Dickmeiss Date: Fri Dec 4 13:36:46 2009 +0100 Make a working COMSTACK example commit c2317ad6444bd2a90a45fd519f286a7cef49c776 Author: Adam Dickmeiss Date: Fri Dec 4 13:23:58 2009 +0100 Update COMSTACK chapter WRT diagnostics commit 57b3990d07f7ed994884bc61504eb5a1962526eb Author: Adam Dickmeiss Date: Fri Dec 4 12:52:41 2009 +0100 Update ZOOM scanset doc commit 7dbee1f341772642df14925d639f03aec2eb3355 Author: Adam Dickmeiss Date: Fri Dec 4 12:29:47 2009 +0100 zoomsh: Refactor command show commit 5207f60678397943900b4e5f41d563335bf745d1 Author: Adam Dickmeiss Date: Fri Dec 4 11:59:54 2009 +0100 ZOOM: use size_t for scan hit counts and str size Functions ZOOM_scanset_term and ZOOM_scanset_display_term have changed, so that occ (hit count) and len (string length) are now of type size_t pointer rather than int pointer. This is to be able to represent large hit counts and to also just to use the proper type for string length (strlen result). commit a04475ec83719455dc7344a542eccc441095ff76 Author: Adam Dickmeiss Date: Fri Dec 4 11:08:10 2009 +0100 Fix yaz_logf formatting commit b56aa5c8101fb7474791acd8aedfec0801e57049 Author: Adam Dickmeiss Date: Thu Dec 3 23:19:05 2009 +0100 ZOOM: resultset size (hit count) is type Odr_int commit 96891b4d5a0681c2c9bc03f211639f0d98970796 Author: Adam Dickmeiss Date: Thu Dec 3 23:18:09 2009 +0100 Use odr_atoi to decode fake hit count (in term) commit d6dd2c2d762c1715d0733a0cb7afebc706a77b17 Author: Adam Dickmeiss Date: Thu Dec 3 23:16:12 2009 +0100 SRW/SRU decodes integers using odr_atoi Function odr_atoi is used instead of atoi. commit 6278ee39573b69b59333a876c52671d0ebbca320 Author: Adam Dickmeiss Date: Thu Dec 3 23:15:15 2009 +0100 Add odr_atoi - like atoi but returns Odr_int commit dc930d3eab99757f146e76ae5535c270f7d12dc1 Author: Adam Dickmeiss Date: Thu Dec 3 22:27:40 2009 +0100 Spell fix for package description This fixes Debian bugs: http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=557679 http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=557681 commit feebcc6b56911df135856c5d3475b617dd1c9eae Merge: e790adb c82f99e Author: Adam Dickmeiss Date: Thu Dec 3 22:24:02 2009 +0100 Merge branch 'master' of ssh://git.indexdata.com/home/git/pub/yaz commit e790adb21d9a2f892e9d49bf9f39985928474b44 Author: Adam Dickmeiss Date: Thu Dec 3 22:19:21 2009 +0100 Add libyaz.la to yaz-icu's LDADD list yaz-icu uses libyaz.la symbols - not only libyaz_icu.la. This should fix Debian bug: http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=556768 A similar problem was present for yaz-ztest, IDs bugzilla #3036. commit c82f99e98f3b27c06d68eac02871a9b92486a89d Author: Adam Dickmeiss Date: Thu Dec 3 15:55:01 2009 +0100 Use _strtoui64 on Windows commit aff89a8d3531bee9e51bcdb9a244ff9b38fc1c6d Author: Adam Dickmeiss Date: Thu Dec 3 14:54:06 2009 +0100 Fix Doxygen comment commit ee12d78cea5ed5f277f869151a918c8b606887e4 Author: Adam Dickmeiss Date: Thu Dec 3 13:36:29 2009 +0100 Fix uninit-var bug in tcpip_straddr. A local variable ai was uninitialized in the case of getaddrinfo failing. It is not set to 0 (NULL) as it should. This bug was introduced in YAZ 3.0.51 when a leak for getaddrinfo resources was fixed. commit 7571b40f44e348f1b7d14f8747c9168bbd538444 Author: Adam Dickmeiss Date: Thu Dec 3 09:37:05 2009 +0100 yaz-ztest: fake hits based on Odr_int (not int) commit 0c5aa5100f29ca832bf6428d8ec92618a0fc027f Author: Adam Dickmeiss Date: Thu Dec 3 09:35:03 2009 +0100 GFS: Avoid piggyback for hits < 0 from backend If a backend returns negative hit count, then avoid comparisons against smallSetUpperBound and largeSetLowerBound. Otherwise a negative size in call to odr_malloc will occur. commit 804d3e0f68b6d6e1f6eb4c47499e547d92c4f334 Author: Adam Dickmeiss Date: Thu Dec 3 09:34:17 2009 +0100 Use ODR_INT_PRINTF to print Integer commit 8f826c92f2bfb303409fbfc67cd8e34049caa125 Author: Adam Dickmeiss Date: Tue Dec 1 16:17:54 2009 +0100 ICU: Remove dead code (non-iterator code) commit e662834ae7643141ab51c887afdbc40038494b1b Author: Adam Dickmeiss Date: Tue Dec 1 16:11:49 2009 +0100 ICU: using icu_iter for existing interface commit 3a98cd4b508df847d4aa2b7ed7c1a7213766bad3 Author: Adam Dickmeiss Date: Tue Dec 1 15:30:16 2009 +0100 ICU: iterator type commit 1cc0965c730ec9e2a9c9ccf45bb0d31cea8c1329 Author: Adam Dickmeiss Date: Tue Dec 1 15:28:36 2009 +0100 Reformat. Remove unused variable commit 5f15a8d9071bf901861d332e7d512109df57bea3 Author: Adam Dickmeiss Date: Tue Dec 1 10:52:28 2009 +0100 Reformat commit 87be3734a81ab7521e72524e2636b07a73cae345 Author: Adam Dickmeiss Date: Tue Dec 1 10:49:49 2009 +0100 Fix switch label commit a4d2915e5cdeb4da4a48c0e23793ce8bb82ad88b Author: Adam Dickmeiss Date: Tue Dec 1 10:40:17 2009 +0100 Remove TCP optim. for Solaris. Bug #3116. commit 9c0e939209ea21db376876168faa4e6563d3ac16 Author: Adam Dickmeiss Date: Mon Nov 30 15:14:49 2009 +0100 Add const modifier for two ICU utils commit 6b386515fef2b226ae495c72f1af983148b98211 Author: unknown Date: Mon Nov 30 14:58:10 2009 +0100 Add include for u_strToLower and others commit d4a367800a3abe5e9d88ab58062880e06ab3f5d2 Author: unknown Date: Mon Nov 30 14:57:55 2009 +0100 Update WRT to new sources for ICU commit 4adcf3fecf9b8d2880ee0b671c9f9d20da18ca49 Merge: 691a433 54bd147 Author: Adam Dickmeiss Date: Mon Nov 30 14:21:24 2009 +0100 Merge branch 'icu_refactor' into yaz4 commit 54bd147d353f7f340a48a9da5c6a568446223371 Author: Adam Dickmeiss Date: Mon Nov 30 13:59:45 2009 +0100 Split ICU wrapper library into several sources commit f0b1f63415168bbc1a12f0eb3a1f03511b82c1ec Author: Adam Dickmeiss Date: Sun Nov 29 22:31:56 2009 +0100 ICU: icu_chain_step_next_token is internal commit 1d9b17a1ce08fbe1ca82ccf79a7fd847ee4f5323 Author: Adam Dickmeiss Date: Sat Nov 28 17:25:50 2009 +0100 More teformat commit 4226453c62566c807ef457f2262acb2a1b92fe71 Author: Adam Dickmeiss Date: Sat Nov 28 17:24:24 2009 +0100 Reformat commit 691a433ec15d5a3e113f2712956d2a14347a5bd2 Author: Adam Dickmeiss Date: Sat Nov 28 14:12:53 2009 +0100 Use __in64 type for 64-bit YAZ on Windows commit 5e547a006fbbdbc217b244818dcf92bc7310faef Merge: 10c562b fc66745 Author: Adam Dickmeiss Date: Sat Nov 28 14:03:41 2009 +0100 Merge branch 'master' into yaz4 Conflicts: configure.ac debian/changelog commit fc66745b60adb55d6b9f998c0bb9d8f607953e51 Author: Adam Dickmeiss Date: Sat Nov 28 13:59:53 2009 +0100 YAZ on Windows uses newer Libxml2/Libxslt, ICU YAZ on Windows uses Libxml2 2.7.6, Libxslt 1.1.24, ICU 4.2. commit 2f577ad544711be46b63dd24fde4564d6e55d90d Author: Adam Dickmeiss Date: Fri Nov 27 22:21:29 2009 +0100 Remove unused function icu_utf16_from_utf8 commit c7959fac4deeda671f525c6e2ef47c3fc5e88759 Author: Adam Dickmeiss Date: Thu Nov 26 13:59:53 2009 +0100 Bump version to 3.0.51 commit 10c562bc3ccaaa440189f279ca562327612f87c6 Author: Adam Dickmeiss Date: Thu Nov 26 09:49:58 2009 +0100 Dont enable 64-bit on Windows commit 8b6adc336947fae13652d275d133ca3615368eed Author: Adam Dickmeiss Date: Wed Nov 25 22:02:21 2009 +0100 Bump major so version lib to 4 commit 776d524afd260ab0d671f1048ee6160ea2bc2bfd Author: Adam Dickmeiss Date: Wed Nov 25 21:04:02 2009 +0100 Update Debian package to version 4 commit 8b7d8579cda1772ab488813e3e639c6709948db1 Author: Adam Dickmeiss Date: Wed Nov 25 20:57:40 2009 +0100 GFS: remove member hits from bend_present_rr Member hits was probably added in bend_present_rr by a mistake. No applications should be using it. commit e6139770a5e990b966f7704137588f5e9cedaf25 Author: Adam Dickmeiss Date: Wed Nov 25 20:55:30 2009 +0100 64-bit BER integer commit 1141af3a859ba06226d7b3dd19eb3f83fa2f8753 Author: Adam Dickmeiss Date: Wed Nov 25 20:54:09 2009 +0100 Bump version to 4.0.0 commit 950a4ac3bd94072bb5cf880f0f411bb2c8dc80bd Author: Adam Dickmeiss Date: Wed Nov 25 16:50:31 2009 +0100 Fix description of update command commit 7996f8a4fcb85b0b7d5e8fad636e240904707a90 Author: Adam Dickmeiss Date: Tue Nov 24 14:14:57 2009 +0100 Win32 makefile: dist depends nsi commit 5ba0bc49a8588ea1df229f4f1d60a8629acf71cf Author: Adam Dickmeiss Date: Mon Nov 23 15:31:51 2009 +0100 tcpip comstack: fix leak for getaddrinfo commit 86c4a75e2ed9282be2202d9202be7f6a07dd3410 Author: Adam Dickmeiss Date: Mon Nov 23 14:53:54 2009 +0100 encode_uri_char: encode blank as %20 commit 54dc5b4629da5b10c2f3d4e3bdb7cb70c46669a5 Author: Adam Dickmeiss Date: Mon Nov 23 14:34:53 2009 +0100 URI component encode/decode SRU database Encoding of SRU database is performed by yaz_encode_sru_dbpath_odr or yaz_encode_sru_dbpath_buf. Now used by yaz-client and the ZOOM API. Decoding of SRU "path" database is performed by private function yaz_decode_sru_dbpath_odr . This in turn is used by yaz_srw_decode and yaz_sru_decode in server applications, GFS, yazproxy, metaproxy. commit b9db9bc681a9c78da31d0cb89c50f103197cfb65 Author: Adam Dickmeiss Date: Mon Nov 23 10:35:58 2009 +0100 yaz-client: honor base command for SRU Change when database setting is applied for SRU and ensure it is kept when a connection is reset. Change also the way errors are displayed for SRU (decoding of pacakges). commit c6b8edd2312a4606cc014738266059a20e3b6e61 Merge: fa4ce73 42bf8d7 Author: Adam Dickmeiss Date: Mon Nov 23 10:25:58 2009 +0100 Merge branch 'master' of ssh://git.indexdata.com/home/git/pub/yaz commit 42bf8d7d53e41f6165e0eb889a7377d3482aeabd Author: Adam Dickmeiss Date: Sat Nov 21 09:27:46 2009 +0100 Refactor URI utils to uri.c commit fa4ce7352686da3893b47fde6e295cd4f558f014 Author: Adam Dickmeiss Date: Fri Nov 20 13:49:25 2009 +0100 HTTP response error, doctype + YAZ URL commit e719ab5b27bcf89d9741bbc78f6b4c372dc18e9b Author: Dennis Schafroth Date: Fri Nov 6 11:40:12 2009 +0100 removed tmp file from git commit 69c2dee55aa204cab368989b8385eda8b83bf2e2 Author: Dennis Schafroth Date: Fri Nov 6 11:38:38 2009 +0100 Added tests for pql2cql using relation and truncation. commit 43769ae204a1033190b8c044f0faa5e2341140c2 Author: Dennis Schafroth Date: Thu Nov 5 15:13:54 2009 +0100 Fixed: Removed the server option which was remedy from the copied function. Returning 0 on parse error. Returning equal on none. Added: Parsing the Truncation attribute: Left, Right and Both. No implementation of the 100 and above. commit f550c0a0456eae7e4450b3f2ed9bf6aa25eece30 Author: Dennis Schafroth Date: Thu Nov 5 09:17:56 2009 +0100 Attempt to get eclipse working commit 04a74288b3dc52703d09528428842f186ec78e43 Author: Dennis Schafroth Date: Thu Nov 5 09:15:05 2009 +0100 Fixed comment commit 7cf71345284c3f31dee1c1102a9fcc32c41480f2 Author: Dennis Schafroth Date: Wed Nov 4 16:15:23 2009 +0100 Comment fixes only commit e5ae7bef1ef7d79a07a89f329e6b603d40a44c7f Author: Dennis Schafroth Date: Wed Nov 4 15:42:50 2009 +0100 For phonetic, stem and relevance return no operator Was returning questionmarks commit 9f16968f01f8ffc7421be4bda437c69ee7e11eba Author: Dennis Schafroth Date: Wed Nov 4 15:33:58 2009 +0100 Addded a lookup of relation in the attributes. Not supporting the phonetic, stem and relevance as these are not listed on the CQL web page. commit b851307962ccc99ac9cc0c8a66b652d0afbb1ae9 Merge: 8007b02 66809e6 Author: Dennis Schafroth Date: Wed Nov 4 15:28:40 2009 +0100 Merge branch 'master' of git://git.indexdata.com/yaz commit 8007b02f1f71539935da4895cea16fac3422e64c Author: Dennis Schafroth Date: Wed Nov 4 13:55:24 2009 +0100 Added break in reverse/'r' option check, or it would scan for iteration number. commit 66809e641d809eaa821a74db209c47deb3590f11 Author: Adam Dickmeiss Date: Mon Nov 2 22:38:30 2009 +0100 Use website for upload doc commit 9d63e51087691087c5adb6b2c6265b07e8ca0224 Author: Adam Dickmeiss Date: Mon Nov 2 14:24:31 2009 +0100 Version 3.0.50 commit 6e3d70edfadd110351b71466c51632e288e31773 Author: Adam Dickmeiss Date: Tue Oct 27 14:27:58 2009 +0100 Better support for extra data for SRU codecs and GFS The Z_SRW_PDU structure has two new members extraResponseData_{buf,len} for extra data response buffer and length. For the GFS, both request and response data (XML) is carried in extra_args and extra_response_data for the search handler. Patch by Ko van der Sloot. commit 5d493e5a4ce6300660debe3e2ad82c21592039ca Author: Adam Dickmeiss Date: Tue Oct 20 11:14:54 2009 +0200 ZOOM reject queries that cannot be char converted For queries that cannot be converted to the specified rpnCharset, ZOOM now returns a diagnostic on the client-side ('invalid query' / 10010). This fixes bug #2113. commit 3a3d99725a71801f9fc5308e21a4d7f7a325cbdd Merge: 93645ab a158bd5 Author: Adam Dickmeiss Date: Thu Oct 15 13:07:36 2009 +0200 Merge branch 'master' of ssh://git.indexdata.com/home/git/pub/yaz commit 93645abd509e3ee6b6ecb5fee2abee0e12ac7d5d Author: Adam Dickmeiss Date: Thu Oct 15 13:07:17 2009 +0200 Fix do_nothing_useful example commit cad8970eb81efaf793ba96e576b09c47d141d0ea Author: Adam Dickmeiss Date: Thu Oct 15 13:06:55 2009 +0200 Fix odr_bool definition commit a158bd53b7a6c959772645e7e62c60a87dc8d733 Merge: dfcd482 b381ade Author: Adam Dickmeiss Date: Thu Oct 8 23:01:38 2009 +0200 Merge branch 'master' of ssh://git.indexdata.com/home/git/pub/yaz commit dfcd482cb9c615dd3f0410d20f5d9a398e701ade Author: Adam Dickmeiss Date: Thu Oct 8 22:57:43 2009 +0200 Fix SEGV for quit command in cmdfile If cmdfile is passed to yaz-client (option -f) and that cmdfile included a 'quit' command that would result in a memory violation. commit b381adee85c9f65bca8cb0c69eaaea0e3947d640 Author: Adam Dickmeiss Date: Thu Oct 8 13:53:23 2009 +0200 MARC21 to Endnote: omit text garbage. Match on text nodes to omit text garbage.. Makes this stylesheet work on OPACXML (with MARC21 embedded) as well. commit 5107068a489f5ea7923841d855a2145b0db94de1 Author: Adam Dickmeiss Date: Thu Oct 1 16:29:16 2009 +0200 More field mappings. Only consider surname authors. Map secondary title, call number, pages, volume, abstract. commit a796493ae0e9e16702b2a375aeb2bd2c02ab736b Author: Adam Dickmeiss Date: Thu Oct 1 15:34:05 2009 +0200 Use printfield everywhere commit 8a6fcb337caf230d1a9a674155630a659ac2719c Author: Adam Dickmeiss Date: Thu Oct 1 14:45:49 2009 +0200 Start work on MARC21 to Endnote import commit 8a980f7051e22ca1e4fac0395ed7f8647cd9eda3 Author: Adam Dickmeiss Date: Thu Oct 1 10:20:51 2009 +0200 Version 3.0.49. Update news. commit b2b333d62406d7497da3b8af5fb3a4e8f0a7b505 Author: Adam Dickmeiss Date: Tue Sep 29 15:08:49 2009 +0200 Optimize trie look for char conv. The lookup function now saves one function call for every character - to improve performance for conversion from/to MARC8. commit 1a67af25185515c813771b8f9e4d9efb020e9056 Author: Adam Dickmeiss Date: Tue Sep 29 15:07:00 2009 +0200 Optimize wrbuf_iconv_write. Use bigger temporary conversion buffer for wrbut_iconv_write.. This increases performance a bit. commit fe70606b0cc57dd49506de5d57aa4eab585fe6bd Merge: 1ccca65 a37f819 Author: Adam Dickmeiss Date: Tue Sep 29 13:01:29 2009 +0200 Merge branch 'master' of ssh://git.indexdata.com/home/git/pub/yaz commit 1ccca650a133358c268ab3d0f9da58c621a663dc Author: Adam Dickmeiss Date: Tue Sep 29 13:00:17 2009 +0200 Allow Slow database wait to be set. The dummy Database Slow may be followed by an integer.. This integer specifies the time for an operation to execute - in seconds. commit a37f819598462f7ecc85b28bd56190e87e761bce Author: Adam Dickmeiss Date: Tue Sep 29 13:00:17 2009 +0200 Allow slow database wait to be set. The dummy Database Slow may be followed by an integer.. This integer specifies the time for an operation to execute - in seconds. commit a5ebdfbdd3845ef01e1c2e8d19daae12fc2f036e Author: Adam Dickmeiss Date: Tue Sep 29 12:58:40 2009 +0200 ZOOM_record_get returns 0 for bad MARC. ZOOM_record_get returns 0 pointer if a MARC record can not be decoded - unless type desired is "raw". This will prevent type "xml" from returning ISO2709 .. Which obviously can not be XML parsed. commit 5a945d96cd9da92cc3e37025d30dbee9d6f1d96e Author: Adam Dickmeiss Date: Sun Sep 27 21:21:06 2009 +0200 Dummy database Slow waits 3 seconds. commit 80be3d0580fa837e436b911e76c707e74ff9d14a Author: Adam Dickmeiss Date: Thu Sep 24 13:40:31 2009 +0200 Leak fixes for xmlquery stuff commit 4cdc954013878a64caac253e1275a5ca80782206 Author: Adam Dickmeiss Date: Thu Sep 24 13:14:24 2009 +0200 Make som internal functions static. Make a number of functions defined in xmlquery.c static. These have never been declared in a public header file (yaz/xmlquery.h) and was made public by mistake. commit dd6da3de6292dd8d087eac67c0c9a7eced8b88de Author: Adam Dickmeiss Date: Wed Sep 23 17:56:53 2009 +0200 Fix leak for odr_print of ZOOM connection. Calls to ZOOM_connection_connect would odr_print memory each time if option apdulog=1. commit f73e1241af0466a21445531a7ee442464a62e7e1 Author: Adam Dickmeiss Date: Wed Sep 23 17:51:41 2009 +0200 Updated m4 + doc/common. commit d6b903caaf638336e114be4d29e3e585330eb68a Merge: ebececd 2316d38 Author: Mike Taylor Date: Fri Sep 18 17:47:45 2009 +0100 Resolve commit 2316d384aec77ec59fa137edb6782053f325b6b4 Author: Adam Dickmeiss Date: Fri Sep 18 12:33:54 2009 +0200 GFS logs HTTP requests commit 643f3c67b24a03ea12d0d3420d78a734aedf5b1d Author: Adam Dickmeiss Date: Fri Sep 18 11:06:20 2009 +0200 Log session timeout. Reenable ASSOC_UP. The association_state ASSOC_UP was last used in YAZ 2.0.30. It was probably removed by mistake. We enable it - but for Z39.50 sessions only, so that when a timeout occurs we can send a Z39.50 close PDU again. The session timeout is now also logged at "session" log level. commit 9d01070e0ac3b559b13c76e1cd0f1b0ef17f03c0 Author: Adam Dickmeiss Date: Thu Sep 17 13:27:05 2009 +0200 Skip zero-length subfields for ISO2709. Skip zero-length subfields when decoding ISO2709. This rare case happens if a record has two FS characters in a sequence. Without this patch there would be a reference beyond char array in using_code_len fragments in marcdisp.c. commit a29cb625a72a11d5a65ee3cb423dc35193b5ca79 Author: Adam Dickmeiss Date: Wed Sep 16 13:58:26 2009 +0200 Fix install doc rule for Automake 1.11 commit ed14ef71dd40c863ee3b581bf5835406bd0ed3ea Author: Adam Dickmeiss Date: Tue Sep 15 10:18:06 2009 +0200 Link add libyaz.la to yaz-ztest (fix #3036). commit fa45ad3fa8a1dae7d030efd16ce6371777566813 Author: Adam Dickmeiss Date: Thu Sep 10 09:13:18 2009 +0200 Fix yaz-marcdump -n (bug #3028). commit 4bed35ab0329789b94620258dc57db5db37bfe02 Author: Adam Dickmeiss Date: Thu Sep 10 09:13:06 2009 +0200 MARC checkout output: No ()s in comments commit df76df087008d3d53a68958b31a018a3e292791a Author: Adam Dickmeiss Date: Wed Sep 2 17:36:14 2009 +0200 Add debian make rule commit 273716ada4a96213fb99182df2a3ee22509437b0 Author: Adam Dickmeiss Date: Fri Aug 28 14:46:21 2009 +0200 Fix quoting for upload.sh commit 1c7397ef1885c5c758ab0b6d22ed2ee45e2e24f8 Author: Adam Dickmeiss Date: Fri Aug 28 12:44:15 2009 +0200 Upload doc+dox script commit 7abc9bb8bc2dbc218e400aa7fbf635ea8257a24b Author: Adam Dickmeiss Date: Fri Aug 28 11:01:41 2009 +0200 Version 3.0.48 commit e90835e4a81a15a3f62e904f7e7771493bac9a2e Author: Adam Dickmeiss Date: Fri Aug 28 10:56:42 2009 +0200 Omit tkl rules for documentation commit 131f137354647cefe2e3494bdb946d77b8c2e959 Author: Adam Dickmeiss Date: Fri Aug 28 10:53:35 2009 +0200 zoomsh's shows 1 record by default commit 6d60541cbd1b81b23872214ad2d8ea11a54544ac Merge: 1d20ff8 30b68ac Author: Adam Dickmeiss Date: Fri Aug 28 10:39:43 2009 +0200 Merge branch 'master' of ssh://git.indexdata.com/home/git/pub/yaz commit 1d20ff81983715581b6a2cbed74878dd40895985 Author: Adam Dickmeiss Date: Fri Aug 28 10:35:44 2009 +0200 Mention new type for show command commit 30b68ac32ab0516934cee67a076b53b0cb85c6d9 Author: Adam Dickmeiss Date: Thu Aug 27 22:05:29 2009 +0200 Extend zoomsh's show command WRT type zoomsh's show command takes a new 3rd optional parameter which is the type as passed to ZOOM_record_get. Default is "render". commit ebececdef03b9ab5d4398f938fc4cc2fd5ebbaa1 Merge: c1f940f 6985b22 Author: Mike Taylor Date: Thu Aug 20 09:16:05 2009 +0100 Merge branch 'master' of ssh://git.indexdata.com/home/git/pub/yaz commit 6985b22c1da4a0c4d4182a6b0570df490a913403 Author: Adam Dickmeiss Date: Wed Aug 19 21:00:27 2009 +0200 New tests cases for CQL to RPN conv commit 35a1937624d302f2a53618958036a41a88b70388 Author: Adam Dickmeiss Date: Wed Aug 19 20:56:58 2009 +0200 RPN to CQL: no use attr is treated as serverChoice commit 173f78f50536784bdc6a59d4586ba409b2b69182 Author: Adam Dickmeiss Date: Fri Aug 14 15:35:57 2009 +0200 RPN to CQL conv may use USE string attributes (bug #2978). In conversion from RPN to CQL (function cql_transform_rpn2cql_).. USE string attributes are used as a fallback if there is no match in the CQL transform (properties) lookup. Also change behavior so that unsupported use attribute if there is no match .. Ie if there is a numeric use attribute in a query and that is not matched anywhere. commit b9d525dc1bec0fb8da16a810f7115b656d4b328c Author: Adam Dickmeiss Date: Fri Aug 14 15:31:21 2009 +0200 Allow empty CQL transform in cql2pqf (and reverse) If value dash (-) is tiven as properties name, the cql2pqf program will use no properties file.. Ie just cql_transform_create rather than cql_transform_open_fname. This allows us to test RPN to CQL conversion with no properties file (-r). commit d90c4c6db3c30cabdabed5abe139f0fe13eb7c24 Author: Adam Dickmeiss Date: Fri Jul 31 15:07:20 2009 +0200 Add link to MARCXML and MarcXhange Web content commit de5a52bf8d9f21d9296ede827daf07e60a3882e7 Author: Adam Dickmeiss Date: Fri Jul 31 15:07:12 2009 +0200 Mention ISO25577 commit 1275cf769e414508b48ea85369458bb5d09a1757 Author: Adam Dickmeiss Date: Fri Jul 31 14:59:30 2009 +0200 MarcXchange NS is now info:lc/xmlns/marcxchange-v1 commit 8bb4b0631ee0f06de1cf065541bbf9537c04d726 Author: Adam Dickmeiss Date: Wed Jul 29 09:38:26 2009 +0200 Extend z_External to handle all extended services Extend z_External to handle all extended services persistentQuery, periodicQuerySchedule, exportSpecification, exportInvocation. Patch by Rustam T. Usmanov. commit c1f940fdcffa885b1336c932c624aa6f062bad38 Author: Mike Taylor Date: Tue Jul 28 10:28:09 2009 +0100 Rolling commit a85b5049b2c0e12a281695fe32bff10ef4901acb Author: Mike Taylor Date: Tue Jul 28 10:27:39 2009 +0100 Better message when receiving an unrecognised userInformationField. commit 124d3ef158982998fec69c091a35702223ab4616 Author: Adam Dickmeiss Date: Mon Jul 13 10:58:20 2009 +0200 Remove obsolete Doxygen setting commit 0046d7d79f79cbf9d03de7272d5069159aa92c24 Merge: 70db3b5 eda96f8 Author: Adam Dickmeiss Date: Thu Jul 9 16:31:51 2009 +0200 Merge branch 'master' of ssh://git.indexdata.com/home/git/pub/yaz commit 70db3b5fb3e8310c587dd8ba95866f1cadf69608 Author: Adam Dickmeiss Date: Thu Jul 9 16:31:33 2009 +0200 Update to new ID URLs commit eda96f8cca72ec56811eff40f23b881b339afa56 Author: Adam Dickmeiss Date: Wed Jul 8 22:28:42 2009 +0200 Describe option -V of yaz-config commit 91a6395012ede2909078cdedea29a8d9efe60229 Author: Adam Dickmeiss Date: Wed Jul 8 14:06:08 2009 +0200 Version 3.0.47 commit e00da6d48d63d7ece2d2515ba9a9f422cf24c366 Author: Adam Dickmeiss Date: Fri Jul 3 16:20:26 2009 +0200 Allow yaz_xml2query to throw a certain diagnostic Function yaz_xml2query allows a diagnostic element in the PQF XML representation .. diagnostic@code and diagnostic@addinfo is diagnostic code and additional info respectively. commit e709ab8b395212d2d3d12ad215a3aa2272654c62 Merge: 8356ea5 82b56be Author: Adam Dickmeiss Date: Thu Jun 18 15:47:48 2009 +0200 Merge branch 'master' into longint commit 8356ea58313ee1f350226172cf99bfb0b7c5583c Author: Adam Dickmeiss Date: Thu Jun 18 14:09:21 2009 +0200 Introduce type for BER BOOLEAN/INTEGER . The BER BOOLEAN is now the integral type Odr_bool which still happens to be an 'int'. The BER INTEGER which used to be a plain 'int' is now typedef'd to Odr_int. This is still an integral 'int', but it may be changed to 64-bit via a one-liner in nmem.h (NMEM_64=1). The documentation, ASN-1 compiler as well as programs has been updated to use the new types. commit 82b56be0c22f75d8d40f295e09ca8b7c628fa530 Author: Adam Dickmeiss Date: Tue Jun 16 12:53:17 2009 +0200 CQL sortby parsing, no semantics yet commit 2cc3fc3eb644f09db82f30906e8d9a09601f544e Author: Adam Dickmeiss Date: Tue Jun 16 11:01:24 2009 +0200 Add type casts for tests for C++ compile commit 0d42bb835c37442eeffa77f24ad2fdf876f8f4da Author: Adam Dickmeiss Date: Tue Jun 16 10:59:41 2009 +0200 Add type casts to make YAZ C++ compile commit 6b76baf0fb5d0d437caedd8076f77f372d775758 Author: Adam Dickmeiss Date: Tue Jun 16 10:43:48 2009 +0200 64-bit BER integers. Fixes bug #114. Introduce a new type, odr_int_t, which is equivalent to 'long lont int' This type is pretty much available everywhere.. was introduced in C99. This change makes YAZ non-backwards compatible .. both source-wise and binary wise. However, it is expected to be fairly trivial to update applications. commit ae1c6f1a0a5fb745b1a5fa315869161d7480c6f7 Author: Adam Dickmeiss Date: Tue Jun 9 22:12:55 2009 +0200 Avoid #if inside macro expansion commit 6deb7e33545e987a7d3e3a090eefcd0cfc71805b Author: Adam Dickmeiss Date: Tue Jun 9 10:25:03 2009 +0200 CCL: test case for bug #2895 commit 135acd59310ef3892e9b86b70e3ead32e53eeabb Author: Adam Dickmeiss Date: Tue Jun 9 09:12:23 2009 +0200 Rename frontend.xml to server.xml commit 50910e85f05204a853e7e6975b1e3ef0adf1dbe6 Author: Adam Dickmeiss Date: Tue Jun 9 09:12:09 2009 +0200 Ignore program tstxmalloc commit bdf169109f6afec0588dcac3dbc35d961b073105 Author: Adam Dickmeiss Date: Tue Jun 9 09:07:16 2009 +0200 Fix unix socket example and reformat commit 0d8c31b34cd1bcf78c44ad669242f3967c76b379 Author: Adam Dickmeiss Date: Mon Jun 8 15:49:18 2009 +0200 Version 3.0.46 commit 18968faa568a744d9d1ce1421202f03e8905ae1a Author: Adam Dickmeiss Date: Mon Jun 8 15:48:31 2009 +0200 Version 3.0.46 commit c526818a49e2d8e469137afd50ee85e683484496 Author: Adam Dickmeiss Date: Mon Jun 8 15:45:26 2009 +0200 Summarize news commit 55bc5787ba3e68ae7e130866f95e70af6b98c6d8 Author: Adam Dickmeiss Date: Mon Jun 8 15:37:22 2009 +0200 ZOOM_record_get only returns OPAC record if present commit 43454d6c60e8f2d0d7d6208ec2436c55a6a67a0c Author: Adam Dickmeiss Date: Mon Jun 8 14:45:13 2009 +0200 Refactor wrbuf tmps for ZOOM_record_get commit 88c261910ace93cd45d25bfbb21ad32f8225ece1 Author: Adam Dickmeiss Date: Mon Jun 8 14:41:40 2009 +0200 Remove unused local member wrbuf_opac commit 486ea665463289f7ffb5eeabdf9c80dab3e07ee8 Author: Adam Dickmeiss Date: Mon Jun 8 14:35:10 2009 +0200 Refactor ZOOM record render code and fix #2892. Refactor code for ZOOM_record_get. The "xml" render for OPAC records now renders the full OPAC. Previously only the MARCXML bibliographic part was rendered (the bibliographic record). Pazpar2 relies on this functionality and this should fix bug #2892. commit b4f634a3359a330e6f74c51365c9c62d0c5039b2 Author: Adam Dickmeiss Date: Wed May 20 11:08:16 2009 +0200 post/postrun calls ldconfig commit 7657c9ac7c3d4555dd0bd1043a7b0d475e74e342 Author: Adam Dickmeiss Date: Wed May 20 10:09:52 2009 +0200 Fix RPM build for RHEL 5.3 RHEL 5.3 does not have package tcp_wrappers-devel . Only tcp_wrappers which includes both run-time and lib/headers. Fedora core 9 differs from RHEL 5.3 in that respect. commit d3bfd05c8ad9e4f9b6f58a9510778079eab446fc Author: Adam Dickmeiss Date: Wed May 13 09:21:41 2009 +0200 yaz-config -V shows version + SHA1 (Bug #2829) commit cf6e35300ec51e0bad1424aba7e83225fd168f8b Author: Adam Dickmeiss Date: Thu May 7 20:55:04 2009 +0200 Prefer IPV6 addresses over IPV4 - should refix bug #2350. commit 3ceb91da546fb4ef66bbea57b0ef219b3af21f65 Author: Adam Dickmeiss Date: Tue May 5 13:29:32 2009 +0200 Small fix for encoding of advancegreek commit 72942b6650af98632103a0908882b71c4113e153 Author: Adam Dickmeiss Date: Fri May 1 11:00:54 2009 +0200 buildconf.sh uses only Libtool flags when present commit 63ae67e43ae6770d77e5d8b925d71dd2e4e28ee1 Author: Adam Dickmeiss Date: Fri May 1 09:48:52 2009 +0200 Avoid double display of SRU/SRW records (bug #2798). commit 29b3b3213c4c8ad38bab054b56f8b70f1b14d67a Author: Adam Dickmeiss Date: Thu Apr 30 10:02:39 2009 +0200 Doxygen comments for xmalloc utils. Reformat commit 3594baeb76423dcee4a138f54bc1d5b5b4477fe3 Author: Adam Dickmeiss Date: Thu Apr 30 09:04:34 2009 +0200 Added xstrndup (similar to strndup) commit 16ae6b899b1eb60c570650b7acc8e673531f5510 Author: Adam Dickmeiss Date: Wed Apr 29 11:44:06 2009 +0200 Option auto_reconnect=on really reconnects. commit 19a9c4f58563f2bb28d69647096491ae965fd377 Author: Adam Dickmeiss Date: Wed Apr 29 10:43:34 2009 +0200 Fix bug #2770 - avoid length limit for auth parameters. commit 4fc0e0c70a077abd8009e139315a54a0e0ddd293 Author: Adam Dickmeiss Date: Tue Apr 14 11:44:03 2009 +0200 Avoid GCC warning about conversion from integer to ptr. Add intermediate cast to size_t from int to avoid GCC warning: cast to pointer from integer of different size . commit ac63793036c6d830d002241a750691b26235b3e1 Author: Adam Dickmeiss Date: Mon Apr 6 23:30:44 2009 +0200 Avoid null ptr ref for for yaz_poll errors. When yaz_poll returns error (-1) and errno is not EINTR the code previously assumed seshigh IOCHAN (client_link) and called cs_close.. In the mother process, however, the IOCHAN data is not this type. Code now prints a warning and resumes processing and does not use iochan_getdata. commit 62f4f43aa7b97890d7c4bf776e3749f25b2e1c5a Author: Adam Dickmeiss Date: Tue Mar 31 21:44:42 2009 +0200 Avoid redundant dependency commit 782dc736e899db69b72d388a747623a78fc90b17 Author: Adam Dickmeiss Date: Tue Mar 31 21:19:13 2009 +0200 Version 3.0.45 commit 859fd203f5075cca7d000ac4558795c662c9ba07 Author: Adam Dickmeiss Date: Mon Mar 30 16:23:56 2009 +0200 Update news commit 19411dcc2419807b0b81e7ad05f63880eba58d22 Author: Adam Dickmeiss Date: Sun Mar 29 21:02:07 2009 +0200 Reindent commit bd3fc10785d649f854929dfab90d8a002d55572c Author: Adam Dickmeiss Date: Sun Mar 29 21:01:55 2009 +0200 Reindent commit 4e3f7be8266559e07dc01ae5d6aba31d30b8bd44 Author: Adam Dickmeiss Date: Sun Mar 29 20:53:05 2009 +0200 Fix doc WRT ZOOM opts start, doc (bug #2198) commit 9748d1f21b8a1c8c6f14ef9384c0e4fdb2d41585 Author: Adam Dickmeiss Date: Sat Mar 28 08:00:09 2009 +0100 Fix trace prints for buffer ptrs commit 5fedb171148c114f2488f5bff941942226b31eef Author: Adam Dickmeiss Date: Sat Mar 28 07:51:24 2009 +0100 Fix bug #2709: TCP connect returns Invalid argument. The getaddrinfo result (struct addrinfo) is now properly updated in the sp->ai member .. Hence socket and connect uses same address. The poking for IPV6 address types, bug #2350, is now useless. commit 625aa16bd5f85153e468ddbfb8d213937890dd30 Author: Adam Dickmeiss Date: Thu Mar 26 14:25:12 2009 +0100 Add yaz_clone_z_RecordComposition. commit 4af16c3b47e4d3f6192345d27248cffe87aa02ec Author: Adam Dickmeiss Date: Thu Mar 26 11:29:36 2009 +0100 Bump version to 3.0.45 due to new functions. commit de9864f98c5fec785fb0e4cb05cf9db1e7a7e4af Author: Adam Dickmeiss Date: Thu Mar 26 11:27:24 2009 +0100 Rework copy/clone of ASN.1 type utilities. The copy/clone of a type, such as Z_RPNQuery, is implemented as a macro. The following funcions are defined at this stage: yaz_clone_z_{Query,RPNQuery,NamePlusRecord}. commit 3f316a4c208765a38b34e19704450cf0f34adef7 Author: Adam Dickmeiss Date: Wed Mar 11 22:22:35 2009 +0100 Fix compilation for mingw. Two sources files failed to compile on GCC mingw (Minimalist GNU for Windows). For oid_db.c the problem was that GCC reported 'initializer element is not constant'. And the fix is to use initialize (use) at run-time. For timing.c the problem that HAVE_SYS_TIME_H and WIN32 was both defined - and the code was not prepared for that. commit d16f37add45152d0d3b786a4676577a57e4f4139 Author: Adam Dickmeiss Date: Tue Mar 10 14:47:06 2009 +0100 Include yaz/errno.h in source that uses YAZ' errno utils. commit 13356a0cb532b646421e0169aef11d1bd25e89f8 Author: Adam Dickmeiss Date: Tue Mar 10 12:02:07 2009 +0100 Moved errno utility declarations to errno.h. commit f0128dd11d08d79384a97a13e44476769b061f4f Author: Adam Dickmeiss Date: Tue Mar 10 11:19:39 2009 +0100 Error utils in separate file and _REENTRANT mode. The functions yaz_errno / yaz_set_errno / yaz_strerror is defined in errno.c rather than nmem.c. Also _REENTRANT is always set to ensure that access to errno is thread-aware. commit 1428270503079d0ceb1ea113e3ec2aa175a0e52a Author: Adam Dickmeiss Date: Tue Mar 10 09:02:54 2009 +0100 Updated m4. commit 588dde23995415ad84f97e50194ef943fadce6a9 Author: Adam Dickmeiss Date: Tue Mar 10 09:00:20 2009 +0100 Honor charset for raw records (ZOOM_record_get). For MARC and string records (octet aligned and SUTRS) the charset option now takes effect (if given). commit 4efb9de61a4284830d3dde10a992a42067879c84 Author: Adam Dickmeiss Date: Fri Mar 6 15:34:48 2009 +0100 Fixed args passing with blanks for Windows Service commit 0e3cbe2d2a8508c66059eae870b15a65d0059a4a Author: Adam Dickmeiss Date: Mon Mar 2 05:23:07 2009 +0100 Output to real file rather than .tmp commit 1fb26db29805d4822763c205358f394725b0f02c Author: Adam Dickmeiss Date: Mon Mar 2 05:18:58 2009 +0100 Output file generated at very end rather than at beginning. Output is produced to a temporary file (.tmp) and then renamed at very end if operation is succesful. commit 2ffab517f033bf6c35de72616de5c05e0b43319f Author: Adam Dickmeiss Date: Mon Mar 2 05:17:25 2009 +0100 Doxygen comment fixes commit 64d15b4ed1a24c3064f4fa3c50668ea99b58111b Author: Adam Dickmeiss Date: Sun Mar 1 23:27:34 2009 +0100 Note about icu_I18N.h being unstable commit 47db800079d3df8e8adfd93b466795d0803dabe8 Author: Adam Dickmeiss Date: Sun Mar 1 23:26:46 2009 +0100 Document a little. commit dd44ae98149d0a96ca8c601a0c46cd17b1eb6c83 Author: Adam Dickmeiss Date: Sun Mar 1 23:06:51 2009 +0100 Function icu_chain_create is now private. This function is internal to ICU. It is now declared in icu_I18N.h rather than icu.h. commit 6cec9293846dc1aba8c0e2f5e46fc029a727f4ed Author: Adam Dickmeiss Date: Sun Mar 1 23:04:09 2009 +0100 Document yaz_errno utils commit 840854a00aa5c59f4a492f9e002e0396ba52ba45 Author: Adam Dickmeiss Date: Mon Feb 23 23:58:53 2009 +0100 Removed redundant statement commit f6a9c895dedabe8cbaaca0377cf9dbbfdf05368e Author: Adam Dickmeiss Date: Mon Feb 23 17:10:57 2009 +0100 Updated doc/common. commit 30be9a32fd26a2d08aa4413942408500c93ad4a3 Author: Adam Dickmeiss Date: Sun Feb 22 13:10:53 2009 +0100 Disable YAZ' own log rotate by default (no 1 GB limit). The variable l_max_size which specifies the log file limit is set to 0 (DISABLED): This is due to the fact that YAZ is most often deployed using logrotate. Also YAZ can not perform log rotate because of unsufficient permissions (setuid). commit d1c53252793e37efda0b7432b18a7c79b9810d86 Author: Adam Dickmeiss Date: Tue Feb 17 14:33:26 2009 +0100 Update version in NEWS commit 6c935519b45ef77520aad76aa0ec8d3fb6540057 Author: Adam Dickmeiss Date: Tue Feb 17 14:28:30 2009 +0100 Version 3.0.44. commit fee4224d6897ad849d74587d99a1a0f7e137128e Author: Adam Dickmeiss Date: Tue Feb 17 14:11:26 2009 +0100 Fixed bug #2530: yaz listener broken on Vista. The two remaining arguments to accept is now NULL ptrs.. The arguments (for Unix) makes the accept call return an error about invalid supplied pointers. commit 442f9815fa99344367af117cba29f2c0e209a0cf Author: Adam Dickmeiss Date: Mon Feb 16 23:05:31 2009 +0100 Dont assume error if fgets returns NULL commit 7a85a44b7f83777704755a13923df36b62ff0257 Merge: e32b8a7 4320117 Author: Adam Dickmeiss Date: Fri Feb 6 08:36:49 2009 +0100 Merge branch 'master' of ssh://git.indexdata.com/home/git/pub/yaz commit e32b8a753ae6ce8847c4b5307e726178e4ee3bc7 Author: Adam Dickmeiss Date: Thu Feb 5 15:14:24 2009 +0100 Fixed typo in transliterate rule commit 4320117d5dfc1cca841025c4ceb086c92c206524 Author: Adam Dickmeiss Date: Wed Feb 4 22:09:09 2009 +0100 One more redundant line. commit 6c8a66665c0c64572b5461a3050b4215240dab43 Author: Adam Dickmeiss Date: Wed Feb 4 22:04:12 2009 +0100 Removed unused file. commit b4ddd82f2554fd155ab38b078428cc4b0a519ee4 Author: Adam Dickmeiss Date: Wed Feb 4 22:04:02 2009 +0100 All debian build ignores in debian/.gitignore commit 9a93f996a29da6535a581a7278019e72ee07d188 Author: Adam Dickmeiss Date: Wed Feb 4 14:33:51 2009 +0100 Spell fix commit 25294d937c02e665569c37d3dd90e459bc363a2d Author: Adam Dickmeiss Date: Wed Feb 4 14:30:43 2009 +0100 List danmarc as supported encoding commit 2f13c9a407fe345dfe13ef8647ebba02ca519089 Author: Adam Dickmeiss Date: Wed Feb 4 13:55:12 2009 +0100 Describe character set semantics a little more commit abc5fc91e4340a8afe42c80ad0baec86dbe76c3a Author: Adam Dickmeiss Date: Wed Feb 4 13:54:42 2009 +0100 Refer explicitly to yaz-iconv man page commit 7fb420029552be59a80c8deadb638b4b8780d5d8 Author: Adam Dickmeiss Date: Wed Feb 4 13:39:58 2009 +0100 Update NEWS commit 890968dfc0149a8f59f4afb8055e18a0ff734595 Author: Adam Dickmeiss Date: Wed Feb 4 13:39:44 2009 +0100 Fixed reference to yaz-iconv man commit 0e1c21de5892acadabc0e1b01606245091c4d275 Author: Adam Dickmeiss Date: Wed Feb 4 13:39:06 2009 +0100 fixed list of encodings (added listitem tags) commit aca553f92283c93d9014be9d77b4b7481738e0df Author: Adam Dickmeiss Date: Wed Feb 4 10:56:45 2009 +0100 Removed unused source file. commit 49e8c1a3167e2ea965d1787b89e3ac731b590ad9 Author: Adam Dickmeiss Date: Wed Feb 4 10:56:27 2009 +0100 List encodings supported by YAZ. Bug #2513. commit e5babaef0f0a438f4372ee4373c90d37fdc7ff1e Author: Adam Dickmeiss Date: Wed Feb 4 10:56:08 2009 +0100 yaz-marcdump refers to yaz_iconv commit a05d96bd6dd1151bac4f0194f2bcc44e8771b558 Author: Adam Dickmeiss Date: Wed Feb 4 09:02:53 2009 +0100 Update NEWS. commit ded3889a5c015e8adbb3addb0a5ebbd85fe20bc2 Author: Adam Dickmeiss Date: Wed Feb 4 09:00:44 2009 +0100 Revert "Removed OID record syntax application-xml." Since applications might have used this symbol we keep it to avoid a so-name change. This reverts commit 9507c6ac14596ef68763e7ec8c08e92838ac44da. commit a19321599ba751f65f655a69c73ac05c72be22b3 Merge: df8b0a8 ecc54f1 Author: Adam Dickmeiss Date: Tue Feb 3 16:56:53 2009 +0100 Merge branch 'master' of ssh://git.indexdata.com/home/git/pub/yaz commit df8b0a83e237b1f7ff6722a2f10add5cafceeb9d Author: Adam Dickmeiss Date: Mon Feb 2 13:41:57 2009 +0100 Update news. Version 3.0.42. commit 860f937a09351b59294bd9b6ed97be8762e77ab0 Author: Adam Dickmeiss Date: Mon Feb 2 13:32:20 2009 +0100 Bump year to 2009 commit f0dcc975f66dc2e17e356497419b09cc94baddba Author: Adam Dickmeiss Date: Mon Feb 2 13:29:10 2009 +0100 Bump year commit ecc54f133ed87dee5854f87c771eaa75c2ab8fc7 Author: Adam Dickmeiss Date: Fri Jan 30 19:47:29 2009 +0100 Fixed missing SSL libs for --libs output commit 0f88139455a3aeffeca0a5650ca5d3d99abc1c17 Author: Adam Dickmeiss Date: Thu Jan 29 10:09:57 2009 +0100 Added member named_result_sets for init handler struct for the GFS. This allows a server to disable named result sets. Until now all negoation was handled exclusively by the GFS(server) and the client. The server implementation had no way to tell the system that it does not handle named result sets. commit 9507c6ac14596ef68763e7ec8c08e92838ac44da Author: Adam Dickmeiss Date: Thu Jan 29 09:12:59 2009 +0100 Removed OID record syntax application-xml. The OID record syntax application-xml was added 1998 probably because it was registered somewhere. It is no longer registered and of no use. commit 5b5d2ba5455538ccc356e208476dc7aeb3703421 Author: Adam Dickmeiss Date: Tue Jan 20 16:45:06 2009 +0100 Added support for rule-based transliterator for ICU wrapper of YAZ commit 362a3c56893f05cb1417cc23e24fc165303486dc Author: Adam Dickmeiss Date: Tue Jan 20 15:50:47 2009 +0100 Rename normalize to transform commit 13dbac38d069fe6c5ebe3e224e6a12bac907c140 Merge: 36f0d15 0aca0f8 Author: Adam Dickmeiss Date: Tue Jan 20 13:07:51 2009 +0100 Merge branch 'master' of ssh://git.indexdata.com/home/git/pub/yaz commit 36f0d152f5f2b4d6ef4bcb01a041f4c16c1deaf8 Author: Adam Dickmeiss Date: Tue Jan 20 13:07:39 2009 +0100 Fixed bug #1902: yaz-icu XML output commit 5dd6d2f41f8db534e05a86632bdc78b6d4186435 Author: Adam Dickmeiss Date: Tue Jan 20 12:58:01 2009 +0100 Print ICU error when ICU can not be configured commit 8be4cad726760fbc18b83b1ae8af3790dcf31c81 Author: Adam Dickmeiss Date: Tue Jan 20 11:44:50 2009 +0100 Make YAZ checks Emacs friendly commit 0aca0f8f0d5849d6ed040f864713b8ac7d696304 Author: Wolfram Schneider Date: Mon Jan 19 09:46:36 2009 +0000 Docu update: When building from Git, you need the debian package 'pkg-config' as well. commit bf0ac0c751ab677318e0a92a8e40145e0e4623b9 Author: Adam Dickmeiss Date: Fri Jan 16 15:55:13 2009 +0100 BITSTRING value shows value. Bug #2346 commit 379504a233e3e2cc85bca1e7b6d864f1395aec7c Author: Adam Dickmeiss Date: Thu Jan 15 13:31:20 2009 +0100 Updated footer comment commit 4a23f09ebdcc59ef94e50d385cc5b17f42d8845d Author: Adam Dickmeiss Date: Thu Jan 15 13:06:06 2009 +0100 ISO2709 decoding: skip control characters from indicator data ISO2709 indicators that hold control characters are marked invalid and the control characters are now skipped. commit 6135f5d048a8bbbc29d14deb9512202c777bd6bc Author: Adam Dickmeiss Date: Tue Jan 13 15:59:17 2009 +0100 Omit sort key by default in yaz-icu's output Omit sort key by default in yaz-icu's output. It may be enabled with option -s. The sort key was used in previous tests. But since it is encoded differently between ICU version we omit it in our tests. commit 98f7557d475021fb087f75423468226c2ce3df20 Author: Adam Dickmeiss Date: Tue Jan 13 15:55:20 2009 +0100 Cosmetic commit 210462cd20476ec54208ccf3a65f15a32fad5bcc Author: Adam Dickmeiss Date: Tue Jan 13 15:54:56 2009 +0100 Cast integer to long for print commit 0edd22d3d3fb9bafa8795815517e9ad51d51641f Author: Adam Dickmeiss Date: Tue Jan 13 15:53:51 2009 +0100 Allow combined single char options (again) commit 3a54a02da2f546427c4e5fe57f952c97f54437ea Author: Adam Dickmeiss Date: Tue Jan 13 11:53:02 2009 +0100 More requirements for libyaz3-devel commit 3fe8d724fd45258f340a8396877aa93bd0a93d00 Author: Adam Dickmeiss Date: Tue Jan 13 09:14:58 2009 +0100 Removed yaz.spec.sles commit ad75101cb137ab43f2b7e6a0dab7b1efe30b02a7 Author: Adam Dickmeiss Date: Mon Jan 12 22:33:04 2009 +0100 Fixup for BuildRequires: tcpd-devel or tcp_wrappers-devel commit b3d1527a6d94b1af17bf36c7781be9679c3fbfc9 Author: Adam Dickmeiss Date: Mon Jan 12 18:52:44 2009 +0100 Utility yaz-marcdump got option to display YAZ version (-V) commit 2788a4851b551e1a3efb320a2878b809f2d8a9d7 Author: Adam Dickmeiss Date: Fri Jan 9 14:38:14 2009 +0100 Happy new year commit e91219e4b27bbd16a13c3f41012317c002e8d17b Author: Adam Dickmeiss Date: Thu Jan 8 15:52:30 2009 +0100 Added RPM spec for SUSE Linux Enterprice Server commit f8ac262931df40154fdae9629eba68c4ea3d5699 Author: Adam Dickmeiss Date: Thu Jan 8 15:52:16 2009 +0100 TODO no longer part of dist commit 8526300b58a12ecbb6e48b320839e28e4460a925 Author: Adam Dickmeiss Date: Thu Jan 8 15:50:45 2009 +0100 Allow YAZ to use ICU 3.4 commit f1e17f8a159c3536d122ff78c799bac16c298d39 Author: Adam Dickmeiss Date: Mon Jan 5 12:04:44 2009 +0100 Updated to use VERSION_HEX rather than YAZ_VERSION_HEX commit 83ba04bfd14a9089745f91ed45d8817339794e5e Author: Adam Dickmeiss Date: Mon Jan 5 11:19:32 2009 +0100 Renamed AC var YAZ_VERSION_HEX to VERSION_HEX commit 125918b4266de689eeee8067074a7da24c92e4e1 Author: Adam Dickmeiss Date: Tue Dec 30 14:31:18 2008 +0100 Ignore tst_rpn2cql generated test program commit ca68610f410cfe2134cf9e6a2437df7b2ea3abdf Author: Adam Dickmeiss Date: Tue Dec 30 14:29:34 2008 +0100 Added new ICU test case which illustrates removal of diacritics commit 32f85d9c71d4fd3d8ab44bd1651c77ddae55fbe6 Author: Adam Dickmeiss Date: Tue Dec 30 14:27:48 2008 +0100 Added other test text 'Carre' + combining acute accent commit 638b4a01b1bf9e1306b215dc0b400b0696631e15 Author: Adam Dickmeiss Date: Tue Dec 30 14:24:47 2008 +0100 Name .diff file differently commit 06fcbb2ac6af85e8a659ff9b000e16455a5cb847 Author: Adam Dickmeiss Date: Tue Dec 30 12:24:32 2008 +0100 Reformatting commit e8fb3033342e237ed26a45aa2147e1aacd96b4dd Author: Adam Dickmeiss Date: Tue Dec 30 11:57:48 2008 +0100 Beef up test a bit commit d9b58094a0cf30748e32337fa9f460f8f0273826 Author: Adam Dickmeiss Date: Tue Dec 30 11:57:33 2008 +0100 Removed set -x commit b58a6230156eca8cf241de17c2eb3b33057c102d Author: Adam Dickmeiss Date: Tue Dec 30 11:54:52 2008 +0100 Added new regression test using yaz-icu commit e8d49a7dea8eec8a8d588fca7464f29f4db5e838 Author: Adam Dickmeiss Date: Tue Dec 30 11:36:50 2008 +0100 yaz-icu returns exit code 3 if ICU is not present. commit 4e27827b16b9820a74e494a2b0c78bc7f3b21618 Author: Adam Dickmeiss Date: Tue Dec 30 11:04:02 2008 +0100 Updated doc/common. commit 8b373aba10e874dc00f5020cb40f490dbb930a88 Author: Adam Dickmeiss Date: Tue Dec 30 11:00:56 2008 +0100 Updated to latest doc/common. commit 22e07fa6a2c78af783e584a3002f6d61848f57aa Author: Adam Dickmeiss Date: Tue Dec 30 11:00:40 2008 +0100 Debian 3.0.41-1. commit 9fc92ab4c14e951aa91c545fee1aac5037979f8d Author: Adam Dickmeiss Date: Mon Dec 29 20:36:52 2008 +0100 Updated doc/common. commit 13a673b4f079ff0ba43b76cd07c1e34c3c932a2a Author: Adam Dickmeiss Date: Mon Dec 29 16:54:52 2008 +0100 Version 3.0.41. commit 9fdcce5bf33b647a635631f96f295394d729df7b Author: Adam Dickmeiss Date: Mon Dec 29 16:53:09 2008 +0100 Fixed test that makes VERSION_SHA1 appear on dist versions too. commit 22dca6e3b2a29f15ddbd3c2489e67aef608c3545 Author: Adam Dickmeiss Date: Mon Dec 29 10:53:41 2008 +0100 Version 3.0.40-1. commit 9f4ccf4f01cb18cc7e18f1db22e81be12fbe71be Author: Adam Dickmeiss Date: Mon Dec 29 10:53:29 2008 +0100 Added bib1-attr to RPM commit 394286df42e6e2c01e5b1b446ae1cf8d0b117f35 Author: Adam Dickmeiss Date: Mon Dec 29 10:51:08 2008 +0100 Changes commit 773a2092c54343d97a0315efa65ebcc75da7e122 Author: Adam Dickmeiss Date: Sun Dec 28 11:03:01 2008 +0100 Added bib1-attr manpage commit aee1a87eeda33b4b049e9fc0a0a826b9c14018cc Author: Adam Dickmeiss Date: Sun Dec 28 10:59:53 2008 +0100 Bib-1 man entry is now called bib1-attr (7) commit 6aabd5dc6f4ed207efe6ba163ddd01c32589673d Author: Adam Dickmeiss Date: Thu Dec 25 23:48:06 2008 +0100 Added Bib-1 Attribute Set man page. commit 01377b739732c93e763a767076768f0b6589c42a Author: Adam Dickmeiss Date: Thu Dec 25 23:47:17 2008 +0100 Removed synopsis from yaz man page commit ccdfc2c2b70849ee395f741ba7de1c1c92b5b9cf Author: Adam Dickmeiss Date: Thu Dec 25 23:46:23 2008 +0100 API libs version 3.0.39 commit a041518cb98067d3f7c7130258b09de83cde8821 Author: Adam Dickmeiss Date: Thu Dec 25 21:31:24 2008 +0100 Use ZOOM_EVENT_MAX for size of ZOOM event array commit df4b0f88de7de6ffcba31c26a0f0c94a15cbf2f8 Author: Adam Dickmeiss Date: Thu Dec 25 21:30:54 2008 +0100 Define ZOOM_EVENT_MAX (max event ID) commit 8bc333b208e7afd5a95ea6f553ae5681814b30d7 Author: Adam Dickmeiss Date: Thu Dec 25 15:41:09 2008 +0100 Debian 3.0.39-1. commit d65313c102154dc9f28a8b4dbbbee0278c2bd1cc Author: Adam Dickmeiss Date: Thu Dec 25 15:24:39 2008 +0100 Bump version to 3.0.39 commit 68398183c3b25120b484681482f461a1da4c6a36 Author: Adam Dickmeiss Date: Thu Dec 25 15:20:45 2008 +0100 Function icu_chain_xml_config allows certain obsolete elements. Function icu_chain_xml_config allows certain obsolete elements which was present in first version of ICU wrapper made for Pazpar2. The elements 'index' and 'sortkey' are ignored and a warning is issued. The element 'normalize' behaves as 'transform' but a warning is issued. commit 83178ddb2e40a3c9dbde8b7b3e6cf5e8918da990 Author: Adam Dickmeiss Date: Thu Dec 25 15:20:00 2008 +0100 Missing icu lib in static mode for --libs commit edc84a7af5e2b8e3f937fae5fd894f1a0054a96c Author: Adam Dickmeiss Date: Thu Dec 25 13:30:54 2008 +0100 Call autoheader when needed commit 98db267fe0117e2bff00e044ccbee8f37dd69548 Author: Adam Dickmeiss Date: Thu Dec 25 13:04:43 2008 +0100 Mention Git instead of CVS. Use [ instead of test where appropriate. commit 76f5f8bd7124c8643be25e0d9838e5897e19df8a Author: Adam Dickmeiss Date: Thu Dec 25 12:58:10 2008 +0100 Fixed check for custom cflags commit 11698a8c1cce5556f3c4dc803c94d2c1f3b60b23 Author: Adam Dickmeiss Date: Thu Dec 25 12:55:30 2008 +0100 Disabled read_iso5426s because it is not in use commit 3c03c66fdcf640bbf4c611a48bf8c74989d077f6 Author: Adam Dickmeiss Date: Wed Dec 24 01:15:14 2008 +0100 Added a few type casts to avoid warnings. commit f2b3c045e79a30c889ffdddb408d9d08ab8d7e01 Author: Adam Dickmeiss Date: Wed Dec 24 01:15:11 2008 +0100 Changed type to avoid warning commit c92a1e74838a25214df478878806c7fb48167db5 Author: Adam Dickmeiss Date: Wed Dec 24 01:13:42 2008 +0100 Removed unused variable commit dda6b9f4ca21d43c68d4c667b4d8e6d1bdaba095 Author: Adam Dickmeiss Date: Wed Dec 24 00:58:54 2008 +0100 Refactor getting subfield length to separate function. commit 4ce7bffcae2b1faaa0fb5d74eca9aeeb7f6d0c6e Merge: a5ac9b8 d96ec51 Author: Adam Dickmeiss Date: Wed Dec 24 00:43:52 2008 +0100 Merge branch 'master' of ssh://git.indexdata.com/home/git/pub/yaz commit a5ac9b8b5662012c69c5e7e5287c5ffc0c7a1f25 Author: Adam Dickmeiss Date: Wed Dec 24 00:36:05 2008 +0100 Fixed bug #2352: yaz-marcdump crashes for certain record. commit d96ec51bf86e8c38213abf5df1812de901f60bfa Author: Adam Dickmeiss Date: Mon Dec 22 14:40:43 2008 +0100 Choose IPV6 over IPV4 addrany addresses (bug #2350). commit f34dd5fd60d0e7433f6f5ed46effdd8c8758b269 Author: Adam Dickmeiss Date: Mon Dec 22 14:40:35 2008 +0100 Extract static/private stuff too commit a679666e56f9f6ea19e4c22e36089ccb3716dd0f Author: Adam Dickmeiss Date: Tue Dec 16 14:39:05 2008 +0100 Include sys/socket.h, arpa/inet.h commit 4e58607ee6ef2a5d183262b9a87415fed2311c85 Author: Adam Dickmeiss Date: Mon Dec 15 15:41:34 2008 +0100 Added Danmarc character set decoder (bug #2345). commit 8377081b9917f820ae91f17e24743c84ef0cfc4d Author: Adam Dickmeiss Date: Fri Dec 5 11:45:19 2008 +0100 Fixes for sys/stat.h on Windows. commit b3b89ab95e626286ad2fe9ccf5b589f153e5aa37 Author: Adam Dickmeiss Date: Fri Dec 5 11:34:45 2008 +0100 More explicit use of #if HAVE_...header's. commit 97bc202a55195296178a5ca9f2cb10e8b6de5ddd Author: Adam Dickmeiss Date: Fri Dec 5 11:34:20 2008 +0100 Set AC_INCLUDES argument for AC_CHECK_HEADERS commit 838af985fb73373d559a3445f07d88109afbfd51 Merge: 5a3a3e3 0e7513f Author: Adam Dickmeiss Date: Mon Dec 1 09:48:29 2008 +0100 Merge branch 'master' of ssh://git.indexdata.com/home/git/pub/yaz commit 5a3a3e3534d174cbc3b500a499611150bef8fc30 Author: Adam Dickmeiss Date: Mon Dec 1 09:46:10 2008 +0100 Simplified ZOOM C's implementation strings a bit. The implementationId (81) is no longer repeated, i.e. 81 instead of 81/81 but it may still be set by an application. The implementationVersion no longer includes CVS Revision. The Git SHA1 will do. commit 0e7513faa0f309121e7800827685f9bdccd2eeb9 Author: Mike Taylor Date: Thu Nov 27 16:10:09 2008 +0000 Ignore some files generated by the Debian-package build process. commit a624e2e9e2271292147cb432411464bd5eab8da6 Author: Mike Taylor Date: Thu Nov 27 16:07:23 2008 +0000 Add notes on required packages and building for Debian. commit e6c9d928f6626a7eea0588684f6ec0908604d0e4 Author: Adam Dickmeiss Date: Tue Nov 25 09:05:18 2008 +0100 Summarize more changes commit 50606c10e645308dddb9c8d0e676b33ce38f1df8 Author: Adam Dickmeiss Date: Mon Nov 24 12:13:48 2008 +0100 Disable xslt/exslt if --without-xml2 is given commit 355f20f785e6cd738a738da688ea038ac232a87b Author: Adam Dickmeiss Date: Mon Nov 24 12:07:38 2008 +0100 Updated to latest m4. commit 66c99e7681fc1922a5b2e662a6d37720c4f4bac9 Author: Adam Dickmeiss Date: Mon Nov 24 11:32:33 2008 +0100 Updated to latest m4 master. commit ab1058c9b1c86b6364e38e5bd47bfaf4eba7354c Author: Adam Dickmeiss Date: Mon Nov 24 11:29:25 2008 +0100 Updated to latest m4. commit a98ae0230792c8fba1df2e91cc0b3417ea2b144f Merge: 0fd57a3 3a36217 Author: Adam Dickmeiss Date: Mon Nov 24 10:07:22 2008 +0100 Merge branch 'master' of ssh://git.indexdata.com/home/git/pub/yaz commit 3a36217ed64fc7c30c3c886d85d4f337fe2f9282 Author: Adam Dickmeiss Date: Mon Nov 24 10:07:10 2008 +0100 Got rid of a few warnings WRT signed/unsigned types commit 4936dff1c451bc76df80ddad8557c2396526f843 Author: Adam Dickmeiss Date: Mon Nov 24 09:57:31 2008 +0100 Using fwrite rather than write commit 0fd57a348f3f789eae517a19ee83c34b5812636a Author: Adam Dickmeiss Date: Thu Nov 20 13:49:12 2008 +0100 Updated news about ISO5426 support. commit a71313f1155a0e635be2263f4bbec94bb8b3a05b Author: Wolfram Schneider Date: Wed Nov 19 14:53:28 2008 +0100 Workaround for tréma <-> umlau, map / U+034F COMBINING GRAPHEME JOINER (CGJ) For the Latin script, the Unicode Standard does not distinguish identically appearing diacritical marks with different functions. commit 7887bf02371157d3db6e769506e57c13b7b076cf Merge: 2e9b1a9 7a050af Author: Wolfram Schneider Date: Tue Nov 18 23:48:47 2008 +0100 Merge branch 'master' of ssh://git.indexdata.com:222/home/git/pub/yaz commit 2e9b1a9f5eb9aa8524241772704e9828bd0de420 Author: Wolfram Schneider Date: Tue Nov 18 23:45:34 2008 +0100 cleanup & tidy commit ecc1ee5b177fdc11ed531dfe13b5c3aae52b2843 Author: Wolfram Schneider Date: Tue Nov 18 23:40:52 2008 +0100 charconv.tcl does not like multi-line comments commit 6758be8d15b9d0b14e06f4cbbb3a76ff645d280c Author: Wolfram Schneider Date: Tue Nov 18 23:32:50 2008 +0100 Implement real ISO546 character set, first version. commit 7a050afbba1b2daf9a1ab6d6c4bbae9ba674a705 Author: Adam Dickmeiss Date: Tue Nov 18 23:28:29 2008 +0100 Fixed creation of marc8.c / marc8r.c. commit 966500e45f2753898b99ccef92ed7d501a1f5e72 Author: Wolfram Schneider Date: Tue Nov 18 23:00:24 2008 +0100 don't create a broken *.c file if charconv.tcl failed commit 16b381fc13f2177874ca8e8be1441e0b0c91521b Author: Wolfram Schneider Date: Tue Nov 18 19:00:52 2008 +0100 remove non-latin character sets commit 645683e5223cb8c122c3d3ba565a46d07d53dca3 Author: Adam Dickmeiss Date: Tue Nov 18 12:33:35 2008 +0100 Deb pkg libyaz3-dev depend on libgnutls-dev. commit 19cf1d0612ee516241c2e4846756e47a16852b8e Author: Adam Dickmeiss Date: Tue Nov 18 12:23:46 2008 +0100 Use awk as found by configure commit 3489c6eaceb7ab7f4e8298a2f898dda0c3d0a09c Author: Adam Dickmeiss Date: Tue Nov 18 09:36:11 2008 +0100 Updates for the ISO5426 source. commit 9bf84c30a3d0e3e1d4b9136aee9c0a4b8ae769d2 Author: Adam Dickmeiss Date: Tue Nov 18 09:30:32 2008 +0100 Use mk_version.tcl to generate yaz-version.h commit 7e6b7d710c5a78caca338b63198efd9ac11320cb Merge: 32e16c3 fff1d63 Author: Adam Dickmeiss Date: Tue Nov 18 09:28:13 2008 +0100 Merge branch 'master' of ssh://git.indexdata.com/home/git/pub/yaz commit 32e16c37ce5b2d1ed0b3e6edfb48fd5ae1ec24b3 Author: Adam Dickmeiss Date: Tue Nov 18 09:27:13 2008 +0100 Added script to auto-generate version-info on Windows. commit fff1d63445d5910aa5b5a73ee37e4b94f52de9ad Author: Wolfram Schneider Date: Tue Nov 18 09:05:44 2008 +0100 add -t option sync manual page with usage string commit 735479544d1cadf6a29722a3dfca7b3fd263cca0 Author: Wolfram Schneider Date: Tue Nov 18 08:42:38 2008 +0100 typo in comments commit 2ff562123d8043bf8e29c172a92c5da45268d786 Author: Adam Dickmeiss Date: Tue Nov 18 00:53:09 2008 +0100 Make codetables-iso5426.xml part of dist. commit e5d5336d0321fcc680a88f6db476223c5e507d91 Author: Adam Dickmeiss Date: Tue Nov 18 00:48:15 2008 +0100 Ignore generated file version.nsi. commit c9f14d1b54f5e094112153e473ed015c1542affb Author: Adam Dickmeiss Date: Tue Nov 18 00:47:56 2008 +0100 Ignore generated file iso5426.c. commit a62e3b3f79675a2b67d6e60dd2f96fbccce02dd6 Author: Adam Dickmeiss Date: Tue Nov 18 00:11:34 2008 +0100 Document version identifiers commit e5a6a3f08564436f90fcb8537d8f32e6685c176e Author: Adam Dickmeiss Date: Tue Nov 18 00:05:47 2008 +0100 Removed definitions of YAZ_OS and YAZ_DATE. Removed definition of YAZ_OS. It is not used by other parts of YAZ and is probably not to be used by other applications. The YAZ_DATE is also not of use. Was used to detect API changes for YAZ 2 series. commit 3185557b9c4f422e12f79a930a89a35b4cac6cfe Author: Adam Dickmeiss Date: Tue Nov 18 00:02:10 2008 +0100 Document yaz_version commit e97610b3e0040428e2cb74f846ade31a0194074e Author: Adam Dickmeiss Date: Tue Nov 18 00:00:37 2008 +0100 yaz-client's version info includes SHA1. commit 6f7757087a49db5fb3fa4f3b12b8b67ebbbe3aa3 Author: Adam Dickmeiss Date: Mon Nov 17 21:11:43 2008 +0100 Return SHA1 version for YAZ in yaz_version. commit f1ddcf0aca55660d122a40046a13483c4a06f922 Author: Adam Dickmeiss Date: Mon Nov 17 20:00:15 2008 +0100 Fixed awk stmt - which was apparently gawk only commit 7cf3484c8f09f224b5758798e746b1061b4a7437 Author: Wolfram Schneider Date: Mon Nov 17 16:30:03 2008 +0100 set ISOcode="42" commit 99eee17dbb3ef0d81d44b01d9072e3405f326595 Author: Wolfram Schneider Date: Mon Nov 17 16:13:53 2008 +0100 still learning using GIT, some changes were not committed: fake support for decoding ISO5426 -> utf8 commit 919e3dd6d63e3371053b5be495ee4c0b74ef2e13 Author: Wolfram Schneider Date: Mon Nov 17 16:12:52 2008 +0100 add ISO 5426 reference documentation commit 4d3388f14854ea6e6ad1b5d9722c7ad2c6dbc7ac Merge: a36b22f b7ef3b5 Author: Wolfram Schneider Date: Mon Nov 17 15:41:35 2008 +0100 Merge branch 'master' of ssh://git.indexdata.com:222/home/git/pub/yaz commit a36b22f2bb95b76a003041eed871fbc6f40834fa Author: Wolfram Schneider Date: Mon Nov 17 15:40:42 2008 +0100 fake support for decoding ISO5426 -> utf8 commit b7ef3b5b8eeb39b408065eaf0f77a978bd911e69 Author: Adam Dickmeiss Date: Mon Nov 17 15:33:09 2008 +0100 TODO no longer present. Check for distdir/win already being present. commit e6d6af3d3fe9fca9fa78dfc62f5c6887778744ba Author: Wolfram Schneider Date: Mon Nov 17 15:17:16 2008 +0100 add copy of iconv_decode_marc8.c commit 85e7aad7167c848ae654bacd378403894f2f889b Author: Wolfram Schneider Date: Mon Nov 17 15:15:17 2008 +0100 add copy of iconv_encode_marc8.c commit 5213b25de9ca4e1f7aa52540260233c4f5a2e8b7 Author: Wolfram Schneider Date: Mon Nov 17 15:12:39 2008 +0100 add function yaz_iso5426_decode commit c15bc44e2038d3555bbc44aacfd8f0c2f55594cd Author: Adam Dickmeiss Date: Mon Nov 17 15:04:01 2008 +0100 Removed this because it no longer has useful info commit 6c24a7636cfb5c6609061e8f4bb696ad8f1607d1 Author: Adam Dickmeiss Date: Mon Nov 17 14:43:38 2008 +0100 Version now propagated to yaz-version.h + NSI installer. commit 9397bf54a2ddb4e0fe8a73d5f753eee23a10601c Author: Adam Dickmeiss Date: Thu Nov 13 02:38:19 2008 +0100 Generate yaz-version.h from configure.ac (except YAZ_VERSIONL) commit f3cc474450a7c6be9c583b5b60e7fac51d1f4fc5 Author: Adam Dickmeiss Date: Thu Nov 13 02:38:16 2008 +0100 Generate yaz-version.h from configure.ac (except YAZ_VERSIONL) commit 5787f1e881be090f6bdfe708e179f9f466356bc8 Author: Wolfram Schneider Date: Mon Nov 17 12:23:06 2008 +0100 Add alias ANSEL -> MARC-8 for decoding to UTF8 commit efe945f2dbfdbb92fb21067da236b3edae146466 Merge: af11171 7ef1b50 Author: Adam Dickmeiss Date: Fri Nov 14 20:15:02 2008 +0100 Merge branch 'master' of ssh://git.indexdata.com/home/git/pub/yaz commit 7ef1b50f481cda83d012cc3d69d83f9313836f1f Author: Adam Dickmeiss Date: Fri Nov 14 15:17:22 2008 +0100 Fixes for gcc warnings - mostly WRT check of returns values commit 1ffd6698cc631866391bf0d646f58907c32ab086 Author: Adam Dickmeiss Date: Fri Nov 14 14:00:22 2008 +0100 Re-format and check of return value from fread. commit 6178e716786433db7de986b6b6cdb694ed57834d Author: Adam Dickmeiss Date: Fri Nov 14 12:35:02 2008 +0100 Re-format commit af111711048b01f1ab94a6f100f34161ba8ff1be Author: Adam Dickmeiss Date: Mon Nov 10 18:13:14 2008 +0100 Updated doc/common. commit 5ba78554cf0c142fd6ff29f608e31eb30a83cd1f Author: Adam Dickmeiss Date: Mon Nov 10 17:14:25 2008 +0100 Fixed dox file comment commit 0b133751e275a00455d2f68fcc04960d6417def2 Author: Adam Dickmeiss Date: Mon Nov 10 16:50:11 2008 +0100 No longer executable (-x). commit 07af4a097fe9091a43232fa201e0833b330d21de Author: Adam Dickmeiss Date: Mon Nov 10 16:45:34 2008 +0100 Version 3.0.38. commit 89b120a18d5481e2b354accd07e07bc74816cfc9 Author: Adam Dickmeiss Date: Fri Nov 7 13:59:23 2008 +0100 Supports C++ compilations as well commit e579d2c5f9886c3929513a15724bd745ae4bacac Author: Wolfram Schneider Date: Fri Nov 7 12:01:57 2008 +0100 Set libtoolize on a MacOS commit 185932b6ae28e68c77e270196cd96a379fc775b6 Author: Adam Dickmeiss Date: Fri Nov 7 11:55:02 2008 +0100 Fixed include of matchstr.h. commit 9098839cb8361648d70d1708c6e1f4e05b9836ae Author: Adam Dickmeiss Date: Thu Nov 6 17:48:18 2008 +0100 Updated news commit ae309395bf5f5511c2eee751151a2962726f745a Author: Adam Dickmeiss Date: Thu Nov 6 14:14:21 2008 +0100 Renamed match-str.h to matchstr.h. commit 6ce7e4adc2de42e4b422558985468547c5a4423f Author: Adam Dickmeiss Date: Thu Nov 6 12:48:21 2008 +0100 DEBUG=0 for YAZ commit 4aee8993113119c95924d9be4ed2707d5034348c Author: Adam Dickmeiss Date: Sat Oct 25 22:08:47 2008 +0200 Added yaz_encode_pqf_term to encode PQF strings. Added yaz_encode_pqf_term to encode PQF strings. This function is used by yaz_rpnquery_to_wrbuf and CCL to PQF conversion utilities (ccl_pquery, ccl_pr_tree). commit 9c6dc183308e2e99b53871c4aea3c6a760d2db54 Author: Adam Dickmeiss Date: Sat Oct 25 20:32:12 2008 +0200 Include header for matchstr functions. commit 3a3c0ef92f785ff123069ea51ba0f8711b23dbf7 Author: Adam Dickmeiss Date: Fri Oct 24 16:45:22 2008 +0200 Ignore generated program gfs-example. commit 887e4b6664dee7210816744f92802b4d924d9a3a Author: Adam Dickmeiss Date: Fri Oct 24 08:54:10 2008 +0200 For ZOOM, ensure ZOOM_EVENT_SEARCH is only fired once per search task. commit 5a1156a0d8d50aa07af3eec75e939ed2065d3880 Author: Adam Dickmeiss Date: Thu Oct 23 17:15:49 2008 +0200 Honor databaseName option for ZOOM connection as path (SRU "database"). commit 93f4285bbf2ed5a42fe62f92c7c4618df5f20583 Author: Adam Dickmeiss Date: Thu Oct 23 09:14:03 2008 +0200 Smaller example GFS. Added match-str.h for string match functions. commit bc4b50939a936dbb214c783c18a44039ea048fdd Author: Adam Dickmeiss Date: Tue Oct 21 15:56:21 2008 +0200 Removed debug-like msg. commit ec4b6d4fd36351c38f76596c9e21197b7536cd00 Merge: 2ba84b1 29cc5fa Author: Adam Dickmeiss Date: Tue Oct 21 15:30:05 2008 +0200 Merge branch 'master' of ssh://adam@git.indexdata.com/home/git/pub/yaz commit 2ba84b155219d5d18eed5ba4d929c12abdb88f14 Author: Adam Dickmeiss Date: Tue Oct 21 15:29:42 2008 +0200 Fixed log message trunction on Windows. commit 29cc5faecbd855b9c3ad7bf2749c7fcd1a393704 Author: Adam Dickmeiss Date: Mon Oct 20 19:23:54 2008 +0200 Add missing ZOOM_END_CDECL commit bc384649b00fed1e378ac3f67b8b5e4872892942 Author: Adam Dickmeiss Date: Mon Oct 20 15:36:59 2008 +0200 Use ZOOM_API for new function ZOOM_get_event_str commit 9f082f8dd7fd80f8da3baf410c6dc003c5f471eb Author: Adam Dickmeiss Date: Mon Oct 20 15:05:37 2008 +0200 Update dep libs version because of new function ZOOM_get_event_str commit fd6a4db386252ed1b777ad2900ea26a0a9513662 Author: Adam Dickmeiss Date: Mon Oct 20 14:38:44 2008 +0200 For SRU diagnostics ensure result set memory is not saved. commit 80849747c53b9c8374e62672aa5f0bc994990389 Author: Adam Dickmeiss Date: Mon Oct 20 09:12:25 2008 +0200 Don't generate ZOOM_EVENT_RECV_SEARCH for SRU record retrievals. The event ZOOM_EVENT_RECV_SEARCH is no longer generated for SRU record retrievals - only for search responses (and an equivalent search task). commit 6dff34312a0f7c3272f7b52c5e13af1e04f72228 Author: Adam Dickmeiss Date: Mon Oct 20 08:38:56 2008 +0200 Added ZOOM_get_event_str. commit 3a494bb11f0a2f449e4848fd17c2ee603bb2367e Author: Adam Dickmeiss Date: Sat Oct 18 13:50:48 2008 +0200 Fixed memory leak (setname in ZOOM_resultset) commit 9f9eecbb73b46c9cf31edc5d4a9a95e16cac3a3c Author: Adam Dickmeiss Date: Sat Oct 18 13:47:33 2008 +0200 Fixed bad memory ref in case of SRU diagnostics. commit bf95c509245f5cb4025ef2db348d5f7ace3b5994 Author: Adam Dickmeiss Date: Sat Oct 18 00:19:43 2008 +0200 Adjustments to make YAZ compile as C++ code. commit 34225a58fbb7de89387c526a9dac54a8b636fb60 Author: Adam Dickmeiss Date: Thu Oct 16 16:20:22 2008 +0200 Update to use Libxml2 2.7.1 / Libxslt 1.1.24. commit 3fa6bf34c5496f69a63469a3184251d38758c85d Author: Adam Dickmeiss Date: Thu Oct 16 10:36:24 2008 +0200 Omit definitions of xmlNode and xmlDocPtr if YAZ_HAVE_XML2 is unset. When YAZ is compiled without Libxml2 support (YAZ_HAVE_XML2 is unset), the types xmlNode and xmlDocPtr are no longer defined in xmltypes.h. Problem was that these dummy definitions could clash with other apps that used Libxml2 anyway. commit 75c9defe1c9ffb8efe58507dc994a56e6fd0409b Author: Adam Dickmeiss Date: Wed Oct 15 22:20:08 2008 +0200 Omit some functions not used when XML2 is not enabled (YAZ_HAVE_XML2). commit 92b4e042f027d999411ee8c20814cc76e2736e71 Author: Adam Dickmeiss Date: Wed Oct 15 20:26:08 2008 +0200 Fixed compilation for no XML2 commit 14ce714521fcdab18a298c48977f23af20c476c0 Author: Adam Dickmeiss Date: Wed Oct 15 20:24:48 2008 +0200 Added include of stdlib.h because of atoi commit a0c2cb53362fb04ae59bcd764822aafa24b0370e Author: Adam Dickmeiss Date: Mon Oct 6 20:15:56 2008 +0200 3.0.37. commit 74e62ec12177e6dc1ff3c578f6e96186f5e63a13 Merge: 8ee8072 6570bbb Author: Adam Dickmeiss Date: Thu Oct 2 19:55:08 2008 +0200 Merge branch 'master' of ssh://git.indexdata.com/home/git/pub/yaz commit 6570bbb754493471237d34bc87613fc26780ba90 Author: Adam Dickmeiss Date: Fri Sep 26 23:11:48 2008 +0200 Updated ICU DLLs for Windows dist (nsis) commit d4fb090b5d0d63b8fc2a8060c9869e8fa86dcbb8 Author: Adam Dickmeiss Date: Fri Sep 26 12:22:16 2008 +0200 Version 3.0.36. commit cafbfb115514fa25b200b845c2b32b92ef65a6d3 Author: Adam Dickmeiss Date: Thu Sep 25 23:17:59 2008 +0200 Honor start, step, count for SRU (multiple requests performed). commit 8ee8072ffe458a632055008d96d86359cebb46dc Merge: 90aa30a 21f9634 Author: Adam Dickmeiss Date: Thu Sep 25 21:33:15 2008 +0200 Merge branch 'master' of ssh://git.indexdata.com/home/git/pub/yaz commit 21f9634b8e42027596795fcb9fd6b307fc72d567 Author: Adam Dickmeiss Date: Thu Sep 25 13:47:42 2008 +0200 Fixed ODR example and use of XML entities in CDATA sections. commit 7eeb1efed000ed90d27018fd717301096daf65e4 Author: Adam Dickmeiss Date: Thu Sep 25 11:05:24 2008 +0200 Fixed bug #2256. Updated for newer libxml2/libxslt. commit 1d6f90173d496fe54190026abc3ae6b234d312c3 Merge: cf24b09 160f79b Author: Adam Dickmeiss Date: Thu Sep 25 10:10:45 2008 +0200 Merge branch 'master' of ssh://git.indexdata.com/home/git/pub/yaz commit cf24b0978994c8d4d7fc92428fe18bf417084375 Author: Adam Dickmeiss Date: Thu Sep 25 10:10:32 2008 +0200 Unix text. commit 160f79b459b7d7dc07830e679349d82c3a77256d Author: Adam Dickmeiss Date: Wed Sep 24 20:19:37 2008 +0200 Ensure format command is a no-op if bad syntax is passed to it. commit bb376bb6ee4fc45ee4a2e76e5221bd5392766132 Merge: f59f3bb 24aa5ea Author: Adam Dickmeiss Date: Wed Sep 24 20:10:48 2008 +0200 Merge branch 'master' of ssh://git.indexdata.com/home/git/pub/yaz commit f59f3bba11d2db2fa291b736a98bf2f9f7e8f6c0 Author: Adam Dickmeiss Date: Wed Sep 24 20:09:29 2008 +0200 Check the record syntax(es) given by the format command Check the record syntax(es) given by the format command and report an error if they don't look good. commit 24aa5ea66edef77f6d086275cc6370815aeaab60 Merge: 5f3c82f ad65c72 Author: Adam Dickmeiss Date: Sat Sep 20 18:07:55 2008 +0200 Merge branch 'master' of ssh://git.indexdata.com:222/home/git/pub/yaz commit 5f3c82fbbf6f405e88a9f4ea15e91065d4fb5d88 Author: Adam Dickmeiss Date: Sat Sep 20 18:07:32 2008 +0200 Windows makefile - added mutex.obj and updated for ICU 4.0 commit ad65c72fe9600038ea5b0c7927e8d65c0f268df9 Author: Adam Dickmeiss Date: Fri Sep 19 00:54:24 2008 +0200 Added cql2rpn as allowed querytype commit dd4e8781d27c03476fd6dfd2626480c0c5db00d9 Author: Mike Taylor Date: Wed Sep 17 10:46:07 2008 +0100 Fix typo -- spurious "size" parameter to odr_reset() commit 824be7c5e882951dad0d60246b60c87f1103e11a Author: Adam Dickmeiss Date: Mon Sep 1 08:56:07 2008 +0200 Fixed copyright holder in license Fixed copyright holder in license to Index Data. commit 90aa30aeb696ad039711db3c1404406b53df4dd3 Author: Adam Dickmeiss Date: Tue Aug 26 11:29:11 2008 +0200 Run both git submodule init + update commit e77ab47ef9cea60b0c7acedef78a0c9913f493fd Author: Adam Dickmeiss Date: Tue Aug 26 11:15:38 2008 +0200 Always run 'git submodule update' when git is in use commit fde5f3463df4cdaf15ad7bb483a1758e1c8cd7b0 Author: Adam Dickmeiss Date: Tue Aug 26 10:37:04 2008 +0200 Updated m4 for PDF_COMPILE fix commit 94275ce2d65c0e0c8a27c259749769b75579ea53 Author: Adam Dickmeiss Date: Tue Aug 26 10:29:47 2008 +0200 Use PDF_COMPILE for PDF creation commit 437f7ef37a5f526f1d0492c1405a1f257a7c7479 Author: Adam Dickmeiss Date: Sat Aug 16 00:23:39 2008 +0200 Updated Deb pkg descriptions to follow policy commit 3d4e0c75cee82cc17fa5da38051b072d9bed61a7 Author: Adam Dickmeiss Date: Wed Jul 30 14:12:29 2008 +0200 Avoid mixed stmt/var declare. commit 3009c755ca909b0f32211ac3f3e3e0ab309cb09e Author: Adam Dickmeiss Date: Mon Jul 28 10:06:52 2008 +0200 Update WRT crash on Windows. commit dfe360ef9c3b9ae84a2812bed499c1ac1b84b16d Author: Adam Dickmeiss Date: Mon Jul 28 09:23:03 2008 +0200 Fix Libxml2 error handling under Windows. The call to yaz_log_xml_errors have been moved to new_session which is when a worker thread is active. Using xmlSetGenericError func and friends fails if set in mother thread. commit 8e9d2cec97def1cd8b89b1fe427f1a232661ec6f Author: Adam Dickmeiss Date: Fri Jul 25 09:00:04 2008 +0200 First RPN to CQL conversion using actual attribute matching. commit 6aa3a97ba632e1507ca00a98b8e45567e51e51e6 Author: Adam Dickmeiss Date: Tue Jul 22 20:17:08 2008 +0200 Comment OID utilities. commit 73de2a0dff87a450d7b9c3dda90c1d6ec796ca88 Author: Adam Dickmeiss Date: Tue Jul 22 15:59:08 2008 +0200 Fixed description commit b977948f73d07c0bf4478565f9af3497ffe862e7 Author: Adam Dickmeiss Date: Tue Jul 22 15:54:15 2008 +0200 Added cql_transform_define_pattern. Renamed rpn2cql funcs. commit 21c7fd1c4e86a5df03c4b2908b98571f9b16ed40 Author: Adam Dickmeiss Date: Tue Jul 22 14:10:24 2008 +0200 Describe ZOOM option 'sru' commit d136ea45c75630579ad66054d0d93708ab79a29b Author: Adam Dickmeiss Date: Mon Jul 21 19:24:45 2008 +0200 Option logapdu renamed apdulog as it harmonizes more with pazpar2 commit 61c2f2afd4d873c2409ebce0bbafb616cb7393c6 Author: Adam Dickmeiss Date: Mon Jul 21 19:17:12 2008 +0200 ZOOM Connection setting 'logapdu' logs APDUs to YAZ log. commit d04d76e81e83b653b2e8fcfd9e311e764c5d15ba Author: Adam Dickmeiss Date: Mon Jul 21 17:54:37 2008 +0200 ZOOM Connection setting 'logapdu' logs APDUs to YAZ log. commit 3d74409576bae9e1c80db193ec1fd9917f63fa42 Author: Adam Dickmeiss Date: Thu Jul 17 13:50:26 2008 +0200 Update to latest m4 master. commit 1f9d3a2e5da219399db2d574c001b52e7756b0f8 Author: Adam Dickmeiss Date: Thu Jul 10 12:33:42 2008 +0200 Mention Git. commit 138fbf3c4582f2738e5b30e440994c9b6d76e194 Author: Adam Dickmeiss Date: Thu Jul 10 11:16:35 2008 +0200 Minor reformatting. commit b3e402aaa7c30a8890706500862ce440aebea234 Author: Adam Dickmeiss Date: Thu Jul 10 11:06:45 2008 +0200 Document the recordOpaque option. commit 69577e2593ec0a537285fe6454945fd287a486d6 Author: Adam Dickmeiss Date: Thu Jul 10 10:48:42 2008 +0200 Added support for an "opaqueRecord" option in ES update. Added support for an "opaqueRecord" option in ES update. If "opaqueRecord" is present, call z_ext_record_oid_any() instead of z_ext_record_oid(). Set either the "record" or the "opaqueRecord" option, not both. commit a07a5e7fcd5417f81b546be932619b90e05ba72c Author: Adam Dickmeiss Date: Thu Jul 10 10:46:49 2008 +0200 Added z_ext_record_oid_any() function. This is a simplified version of z_ext_record_oid(). It does the same oid lookups, but adds the record as an Odr_any. commit c7e6e65dc7e8204798a41f6326a9e04632f1f507 Author: Adam Dickmeiss Date: Fri Jul 4 11:26:52 2008 +0200 Testing of RPN to CQL conversion. commit 1e02454e1c94b60f62a7942b81a17bdc6c6d54da Author: Adam Dickmeiss Date: Fri Jul 4 11:25:46 2008 +0200 Renamed wrbuf_put to wrbuf_vputs and changed prototype. commit a7bff1cefa274c110b80458cba718db5ed0fd97d Author: Adam Dickmeiss Date: Thu Jul 3 20:01:18 2008 +0200 Added wrbuf_put - same as wrbuf_puts but void return value. commit 8b0914ffc98a04464440843a795920e09b98376c Author: Adam Dickmeiss Date: Wed Jun 18 11:13:16 2008 +0200 Use gnutls_set_default_priority instead of gnutls_priority_set_direct. Use gnutls_set_default_priority instead of gnutls_priority_set_direct because gnutls_priority_set_direct is unavailable for older versions of GNU TLS. commit 9c3aa606e547656d16e5d06fa2bd79e4dbcb7930 Author: Adam Dickmeiss Date: Wed Jun 18 10:43:36 2008 +0200 Towards 3.0.34 commit 5ad7d533eb01f5f25f7c59f16a2d3c04a99ee041 Author: Adam Dickmeiss Date: Wed Jun 18 10:33:34 2008 +0200 Restructure SSL support funcs commit f8d2abd0349cdff6c9bcf41937cd1dfd5de54ed2 Author: Adam Dickmeiss Date: Wed Jun 18 10:30:49 2008 +0200 Remove GNU TLS openssl compat code and update configure. commit be49802a35b13fc0de847f5db05bfc4e6072ed06 Author: Adam Dickmeiss Date: Tue Jun 17 16:08:02 2008 +0200 Server functional for native use of GNU TLS. commit 3939d0f59b399825b75e55172794823a52c68bba Author: Adam Dickmeiss Date: Tue Jun 17 16:05:48 2008 +0200 Prevent COMSTACK use if cs_accept fails commit 419c705f52b0cf234f7d03133ca7318947654210 Author: Adam Dickmeiss Date: Thu Jun 12 15:11:19 2008 +0200 Client side SSL without gnutls-openssl. commit 635995241e865409ad462e33b0208d3a8ebfb14d Author: Adam Dickmeiss Date: Thu Jun 12 11:17:02 2008 +0200 Version 2.0.32. commit 5fa800e6ead7ceef916094cac7e9b7df71a3b324 Author: Adam Dickmeiss Date: Thu Jun 12 11:13:08 2008 +0200 Added test for utf-8 decode reset commit 7e58901d8acda68f8155cda54b0fd3cb6d45f0da Author: Adam Dickmeiss Date: Wed Jun 11 20:16:47 2008 +0200 Fixed #if ENABLE_SSL for ssl_check_error commit 72da88cf7d0a49886e78a2a171c44111c8f70e95 Author: Adam Dickmeiss Date: Wed Jun 11 20:08:54 2008 +0200 Rename yazextralibs to just LIBS commit 29ae3278722e4a61905cc5d330fc2d286d2e7016 Author: Adam Dickmeiss Date: Wed Jun 11 20:08:17 2008 +0200 Make ssl_check_error static and define ssl_type always. Make ssl_check_error static becuase it's a private function. Define function ssl_type always - also in case SSL is disabled - and make it return 0 (NULL ptr). commit 0a1043fe4b7f9e22e7481dc9d81a0a8ca2092292 Author: Adam Dickmeiss Date: Mon Jun 9 17:07:14 2008 +0200 Allow NULL inp(ut) for utf8 decoder commit bb0028c3ec66f017999b3f49daeb2b537e5e78b1 Author: Adam Dickmeiss Date: Fri Jun 6 11:54:41 2008 +0200 Fix date commit 76d7a32ad18dfab123315e59b2b941d7cdf3632a Author: Adam Dickmeiss Date: Fri Jun 6 11:22:51 2008 +0200 Version 3.0.30. commit 2221f6847ece72c7539a1f28e33da980fb2bd810 Author: Adam Dickmeiss Date: Fri Jun 6 11:18:39 2008 +0200 Supply SSL_LIBS for --libs output (in source) commit 2225afbde8949f3005ca9989724a3bd7e0f0c2f5 Author: Adam Dickmeiss Date: Fri Jun 6 11:03:12 2008 +0200 Supply SSL libs for static linking commit fd13a3c5b8cecdd1327f5db615387c8c0e691ba1 Author: Adam Dickmeiss Date: Fri Jun 6 00:19:24 2008 +0200 Added cs_print_session_info which shows SSL session info. Added cs_print_session_info which shows SSL session info. This utility used to be part of yaz-client but is now part of YAZ COMSTACK. This is deal with GNU TLS session info and avoid having SSL implementation code outside the YAZ core. commit 46f58d56d118687435ef38ba4617f8d359c20d45 Author: Adam Dickmeiss Date: Fri Jun 6 00:16:26 2008 +0200 RPM builds using GNU TLS commit 966a14020bc5855bbc4f3aebaa157f5c6d4ae292 Author: Adam Dickmeiss Date: Thu Jun 5 23:25:18 2008 +0200 Make cs_get_ssl return 0 if GNU TLS is enabled. Make sure cs_get_ssl return 0 if GNU TLS is enabled. GNU TLS and OpenSSL are not binary compatible so must ensure that only OpenSSL applications makes use of this (e.g. yaz-client). commit aa4c03825ae6767274bc70aff8332a7c3b61cfc0 Author: Adam Dickmeiss Date: Thu Jun 5 23:22:38 2008 +0200 Solaris OS version update. Mention libyaz_icu.la. commit 726bffd1002026ce15056e97a1511392724377e5 Author: Adam Dickmeiss Date: Thu Jun 5 23:07:12 2008 +0200 Added Giannis Kosmas commit 494421584e146db0b9a2c45c6ec70daacb44364c Author: Adam Dickmeiss Date: Thu Jun 5 23:01:41 2008 +0200 Show types of libs (thrads icu server) commit 02b6a809f17f142071384ffac8e406b6e9fbd2fb Author: Adam Dickmeiss Date: Thu Jun 5 22:52:27 2008 +0200 Minor formatting changes. commit 1043099645878acc549c3198729d16df13a6b948 Author: Adam Dickmeiss Date: Thu Jun 5 22:31:23 2008 +0200 Use GNU TLS for Debian package commit 6e826aa9e79c7dff4a26bc500bb57c8b462c9364 Author: Adam Dickmeiss Date: Thu Jun 5 22:31:18 2008 +0200 Use GNU TLS for Debian package commit 553a857a20bc8ab0e02c2efb1241e9a931b13353 Author: Adam Dickmeiss Date: Thu Jun 5 20:42:41 2008 +0200 debian directory no longer part of dist (upstream) commit 6104404b99d63343646f1d8e21bce49a82c16d3d Author: Adam Dickmeiss Date: Thu Jun 5 20:35:20 2008 +0200 Added info about GNU TLS. commit 3a97efa8f888c8f5a5e36ad9ca004b55e0cca2c6 Author: Adam Dickmeiss Date: Thu Jun 5 20:26:00 2008 +0200 Make GNU TLS the default choice for SSL commit 2090c10cba543198c6658e2ca4219c28ff46cefe Author: Adam Dickmeiss Date: Thu Jun 5 19:09:27 2008 +0200 GNU TLS non-block works. commit a4459ba5eb7552f2c11ad9efe7f5b7bd63c64fb3 Author: Adam Dickmeiss Date: Thu Jun 5 01:35:40 2008 +0200 GNU TLS operational. Issues with non-blocked I/O left. commit e8687e3d59ba411ee1ed143c8726ab9449bbbe57 Author: Adam Dickmeiss Date: Wed Jun 4 15:46:07 2008 +0200 Started work on using GNU TLS as an alterantive to OpenSSL. commit a18c2a5a76b4ff8e4f5eb9c1f215ade0c7e4e2ef Author: Adam Dickmeiss Date: Wed Jun 4 12:24:19 2008 +0200 Depend on libicu-dev . Not libicu38-dev commit 1f41a1d415d2ab138050a96020ed39caa0c4e323 Author: Adam Dickmeiss Date: Wed Jun 4 11:02:16 2008 +0200 Link SSL with libyaz.la and yaz-client only. commit 09f035ec955bc0a99eddc1dde09aa53e3773875d Author: Adam Dickmeiss Date: Wed Jun 4 10:34:04 2008 +0200 More news commit f58a188f6db8f4b458d62cb2c345443a5253f9c1 Author: Adam Dickmeiss Date: Tue Jun 3 15:24:57 2008 +0200 ICU parse_error no longer an array. The parse_error member in icu_normalizer is no longer an array of size 256. There seems to be no need for this and we don't know why it came up in the first place. commit 3c4fd1f1e79d1eac561ccf085558b69dbace2597 Author: Adam Dickmeiss Date: Tue Jun 3 15:23:29 2008 +0200 NEWS is ASCII commit 4e6d194a80ae85760471a2fe7568bfaeb18649dd Author: Adam Dickmeiss Date: Mon Jun 2 12:35:48 2008 +0200 Dummy OPAC records has a little more dummy data in it. commit 50cffeb44b5c2b644a76359142063660b6b80f7a Author: Adam Dickmeiss Date: Fri May 30 14:44:24 2008 +0200 Document Windows Service Control commit c81c923c94d47c16308d487de3431f5027059522 Author: Adam Dickmeiss Date: Fri May 30 14:27:47 2008 +0200 Truncate yaz-client history if it exceeds certain size (16K). commit ec7571c09ddbe4580775d3a8a60271a657ae02a6 Author: Adam Dickmeiss Date: Fri May 30 13:55:41 2008 +0200 Added a few comments. Source in ztest also analyzed by Doxygen. commit a341ccc0007ba1c05ac5a14a9f1cf92f7b576245 Author: Adam Dickmeiss Date: Fri May 30 13:36:35 2008 +0200 Fix diagnostic for MARC and present request out of range commit 9a4813613f9dcc5a03776064ce6dd41a71606b74 Author: Adam Dickmeiss Date: Fri May 30 13:35:55 2008 +0200 Fix comment regarding diagnostics commit 04b09c082a7882398a10d5ec62e80ac175fe2a9b Author: Adam Dickmeiss Date: Fri May 30 13:31:16 2008 +0200 Added proper header for reader record utilities for yaz-ztest. commit a0c511bee52164f097c30d5e2598c0810605ff55 Author: Adam Dickmeiss Date: Fri May 30 13:23:25 2008 +0200 Replaced some error code ints with proper defines (SRU / Bib-1). commit c752a33d6863b028e991c09451f977a00b4028aa Author: Adam Dickmeiss Date: Fri May 30 12:17:40 2008 +0200 yaz-ztest returns dummy OPAC records. commit fab857282ce150ffb962753bf98132deae20b8c9 Author: Adam Dickmeiss Date: Fri May 30 12:17:15 2008 +0200 Update. commit 7cf46a0f93d9118904335544412f5b15ee0345d3 Author: Adam Dickmeiss Date: Wed May 28 23:16:47 2008 +0200 Using YAZ tokenizer for CQL to PQF transform spec. commit 1aef63af06fa380247c91d12cd7288981985a406 Author: Adam Dickmeiss Date: Wed May 28 20:01:54 2008 +0200 Added yaz_mk_sru_surrogate to create SRU surrogate diagnostic. commit b3d5a30f4d074053085693a8fc5381a4ebc41544 Author: Adam Dickmeiss Date: Mon Apr 28 11:53:50 2008 +0200 Beginnings for RPN to CQL transform. commit 2cfddf92bc0688daa308a66f393ce7e2000f0762 Author: Adam Dickmeiss Date: Mon Apr 28 10:30:11 2008 +0200 Renamed a test. commit 1bd4b1c686ba63f685fc0195fa76ada49680d219 Author: Adam Dickmeiss Date: Mon Apr 28 10:28:59 2008 +0200 Indentation. commit 52f5dfc3bf664aa81a14add42e141b4d809061d6 Author: Adam Dickmeiss Date: Mon Apr 28 09:58:24 2008 +0200 Use SRU diagnostic defines rather than numbers. commit 214d072db09722a26e5eb1206bec57fb89664437 Author: Adam Dickmeiss Date: Wed Apr 23 23:24:34 2008 +0200 Updated m4 and doc/common. commit 3c4ae8968ea8fd87db472a14b6dcd2900553f430 Author: Adam Dickmeiss Date: Wed Apr 23 23:24:14 2008 +0200 Do not set charsetNegotiation bit by default (breaks some targets). commit d2789e43e814786b4d0e22715de16ab18b1cab98 Author: unknown Date: Tue Apr 22 13:08:42 2008 +0200 Fixed argument passing to sc_main. commit 1e9423ce7020bad4a16984caeaf6b7c16a5168c2 Merge: 6d91a07 d46b41e Author: Adam Dickmeiss Date: Tue Apr 22 12:15:33 2008 +0200 Merge branch 'master' of ssh://git.indexdata.com/home/git/pub/yaz commit 6d91a07c81493b6535fd33d6a28382eba56b21e7 Author: Adam Dickmeiss Date: Tue Apr 22 12:14:40 2008 +0200 Bump version to 3.0.29. commit d46b41eb147e89d24f706a9663621923d75eb28a Author: Adam Dickmeiss Date: Tue Apr 22 11:47:00 2008 +0200 File sc_test.c part of dist (source for Windows only). commit e255616521c8ba665309bcaeccabb35b6efe35d7 Author: Adam Dickmeiss Date: Tue Apr 22 11:18:11 2008 +0200 Unix update for service control (sc). commit 540056f9cf1a3304b253db09eba899cc6763466d Author: Adam Dickmeiss Date: Tue Apr 22 10:54:49 2008 +0200 Implemented new Windows Service wrapper (sc). commit dedba382ec4773d8abdf244290020f3da42113b6 Author: Adam Dickmeiss Date: Mon Apr 21 12:44:13 2008 +0200 Initialize HAVETHREADS (was accidently removed in previous commit). commit 468bc06965c656dfb41c3ccf12eda582f427fd8f Author: Adam Dickmeiss Date: Sun Apr 20 16:24:31 2008 +0200 Proper m4 quoting. commit 1015e59c397c0421df1be835e1418ef95531ad98 Author: Adam Dickmeiss Date: Thu Apr 17 14:05:03 2008 +0200 Changed yaz_record_conv_record to be reentrant for XSLT. Changed yaz_record_conv_record to be reentrant for XSL transforms. Reusing xsltStylesheetPtr in one instance of yaz_record_conv_t was not reentrant as far as yaz_record_conv_record is concerned. Instead xsltStylesheetPtr is created for each invocation. Only the XSL stylesheet document is saved from the beginning via yaz_record_conv_configure. commit e6fc0b7b23620cd04801667b1921384f56a42fdb Author: Adam Dickmeiss Date: Thu Apr 17 14:04:05 2008 +0200 Added loop for record conversion to test performance. commit 91a490267e60208ff28e53a397e261956c4adc59 Author: Adam Dickmeiss Date: Thu Apr 17 11:43:23 2008 +0200 Changed yaz_record_conv_record to be reentrant. Changed yaz_record_conv_record and yaz_record_conv_opac_record to be reentrant. Now yaz_iconv_t is created for each invocation. commit 246af42ce354e7e37cddfb25420a16aaf9206c6c Author: Adam Dickmeiss Date: Tue Apr 15 10:19:14 2008 +0200 Updated doc/common. commit 4fdbe43c755194b4d31cf3d0bf42f01f49906881 Author: Adam Dickmeiss Date: Tue Apr 15 09:52:53 2008 +0200 Updated to m4 master. commit 72011b1abdb331ba835cbf40cabc9aee42e7847a Author: Adam Dickmeiss Date: Sat Apr 5 22:46:11 2008 +0200 Fixed Library add's for libyaz_la, libyaz_icu.la, libyaz_server.la. Fixed Library add's for libyaz.la, libyaz_icu.la, libyaz_server.la. This partially fixes bug #2129: dpkg-shlibdeps warnings. commit d940392c53c32ccf76fb287cc5b997b9e921a431 Author: Adam Dickmeiss Date: Fri Apr 4 23:24:40 2008 +0200 Update headers and omit CVS Ids. commit 52188379291c43d463d4ee6742cf81a700541723 Author: Adam Dickmeiss Date: Fri Apr 4 13:26:29 2008 +0200 Fixed bug #2116: Invalid: returning value from void func in wrbuf.c. commit 96c6e58f286787106e4a7b3bb3900a36051968d6 Author: Adam Dickmeiss Date: Thu Apr 3 17:19:55 2008 +0200 Refactor iconv decoders. commit ee6ab2ee3a9ee1a8c65d7272ec7fba1d886f5af0 Author: Adam Dickmeiss Date: Tue Apr 1 23:11:45 2008 +0200 Update source headers for 2008. Omit CVS ID keyword subst. commit ca322d4058580c495ce5e3e25d83b6a63a499d9e Author: Adam Dickmeiss Date: Tue Apr 1 20:41:54 2008 +0200 Added Copyright header. commit 65f1b9fce2d1d86df7d75645fb46fbba32dd01e3 Author: Adam Dickmeiss Date: Tue Apr 1 13:37:51 2008 +0200 Factored character encoders out to separate files (iconv system). commit e4fc51d4432f2adcc67db4b50ac5ce687302f9be Author: Adam Dickmeiss Date: Mon Mar 31 23:51:26 2008 +0200 Improved speed of MARC-8 encoding. Cosmetic changes. commit 062ae8c4cbdfd50766b13f34c11a5254825075a4 Author: Adam Dickmeiss Date: Mon Mar 31 23:12:25 2008 +0200 Implemented lossy and lossless MARC-8 encoding. The lossy encoding is named marc8-lossy. The lossless encoding is named marc8-lossless. commit a6f6305f2cd0479017a63809ff7f93cb0eaba572 Author: Adam Dickmeiss Date: Mon Mar 31 12:06:50 2008 +0200 Towards 3.0.28. commit ffa73561a78abb70d06d51cdcbf8ef3f8536a0ab Author: Adam Dickmeiss Date: Tue Mar 25 21:50:41 2008 +0100 Handle G1 in MARC-8 decoding. The MARC-8 decoding now handles G1 sequences in any code page. The code until now has only handled G1 in the ANSEL page. commit 14121668dfb035e79740cddb5518551b87b8da04 Author: Adam Dickmeiss Date: Tue Mar 25 14:12:49 2008 +0100 Ignore backup files. commit e858b0c178feedf5ef60bf6e66956ef5c4fd0b83 Author: Adam Dickmeiss Date: Tue Mar 25 13:52:48 2008 +0100 Bump to 3.0.27. commit 6fef48087ae8e01bae2638be8babe0b74a812f28 Author: Adam Dickmeiss Date: Tue Mar 25 13:49:46 2008 +0100 Added function yaz_log_xml_errors. commit d3012f2c5f1c14c3d1ca5174cd929d1b9b31388b Author: Adam Dickmeiss Date: Tue Mar 25 13:46:50 2008 +0100 Changed messages for XSLT conversion errors. commit 29640f69a8ba3211f384abca32b57b6c3faaf75e Author: Adam Dickmeiss Date: Wed Mar 19 23:33:01 2008 +0100 Produce only once in MARCXML printing. commit 1b9e01d65c2e5a8b805c132bc1a043dc4d2c3ec5 Author: Adam Dickmeiss Date: Wed Mar 19 23:32:19 2008 +0100 Ignore unknown XML attributes in MARCXML parsing. commit b93c50cd7770a18bddd602a612ccd83795cd4922 Author: Adam Dickmeiss Date: Wed Mar 19 23:00:38 2008 +0100 For yaz-marcdump, allow use of prefix in record element. Fixed marcdump's check for element name. Now using xmlTextReaderLocalName used instead of xmlTextReaderConstName. commit 4ccac02c44e3c3e5f4aea70f14300bc1f853c75b Author: Adam Dickmeiss Date: Tue Mar 18 18:48:51 2008 +0100 Make iconv-p.h part of automake source. commit b568ddecc89242451a7f2188d027b3d2b8d2c4ba Author: Adam Dickmeiss Date: Tue Mar 18 11:36:17 2008 +0100 WS spaces. commit a4d9a7973644a72d521b462df6cad688e526d27c Author: Jacob Poulsen Date: Mon Mar 17 15:16:22 2008 +0100 Added print of status or Error Report from xml ES commit 7974df78bb70587ee593071d8e7fae43c7c6b84d Author: Adam Dickmeiss Date: Tue Mar 18 11:18:16 2008 +0100 Minor changes to parsing of itemorder comamand. The parsing of itemorder command was moved from create_ItemOrderExternal to cmd_itemorder. commit da47ac6c55796acce3860cbe8297c29e4563e4c9 Author: Jacob Poulsen Date: Mon Mar 17 15:08:14 2008 +0100 Added customisation of xml send in command itemorder xml 1 usage itemorder xml 1 "" or itemorder xml 1 Date: Tue Mar 18 00:23:00 2008 +0100 Update for new C source for iconv handling. commit cccb7ecd623450d5b3ca2391327788c84aed71c8 Author: Adam Dickmeiss Date: Tue Mar 18 00:14:11 2008 +0100 Factor iconv conversions to separate C files. commit 10927d911232ff5b224587f32aa68b8506777905 Author: Adam Dickmeiss Date: Tue Mar 18 00:11:41 2008 +0100 Avoid Latin-1 chars. commit 0ed2b44e7ae33f8b8f6a7bd4e535a3deb294bee2 Author: Adam Dickmeiss Date: Mon Mar 17 15:36:27 2008 +0100 Ignore .o files. commit af3fd923edc18c8ba6a0b629632e4a11ea30e8eb Author: Adam Dickmeiss Date: Mon Mar 17 15:32:59 2008 +0100 MARC-8 ANSEL fix and proper better handling of incompl. sequences. The routine yaz_read_marc8_comb was modified to handle the escape sequence for ANSEL properly . Thanks to Gary Anderson for pointing out the problem with ANSEL. A few tests were added to test for the use of incomplete sequences. commit 49cb82c6f1a4a54272ee8ec1ec4331d59da3d190 Author: Adam Dickmeiss Date: Sun Mar 16 12:42:07 2008 +0100 Ignore object files. commit bb8921da8850ce7f0aba00ae4444931b0f740727 Author: Adam Dickmeiss Date: Sun Mar 16 12:33:50 2008 +0100 Changed description of yaz_options. commit 0a6170ad8a87e0bae603dd6a128d7bdc91967ab8 Author: Adam Dickmeiss Date: Sun Mar 16 12:32:56 2008 +0100 Added defines for yaz_options return values. commit 23bcb0312c437eb86179a7da43cb91ae313e23f4 Author: Adam Dickmeiss Date: Wed Mar 12 21:33:02 2008 +0100 Ignore sub directory config. commit 212ecdc7daf9764e6fdd0951281f61b9c1a94c2d Author: Adam Dickmeiss Date: Wed Mar 12 21:32:17 2008 +0100 Fixed check for Git submodules. commit 5eb29b50793d5eb99d56a5d777eaaea080221276 Author: Adam Dickmeiss Date: Wed Mar 12 14:33:32 2008 +0100 Generate ChangeLog using Git. commit 74070de2e1115b836d4bfd1934a0db659ee3ffde Author: Adam Dickmeiss Date: Wed Mar 12 14:32:04 2008 +0100 Auto add Git submodules in buildconf.sh. commit d72929b7de6221054feb6a220dc72289b0f3e03d Author: Adam Dickmeiss Date: Wed Mar 12 11:43:09 2008 +0100 Moved ignore files. commit 689ff444ffea343f202398ee3eacf5a4cf94154e Author: Adam Dickmeiss Date: Wed Mar 12 11:09:36 2008 +0100 Create config if it does not exist. commit 5b0d595a2a0e917a5607ccfc875ac8f52f7dcafc Author: Adam Dickmeiss Date: Wed Mar 12 11:06:42 2008 +0100 Added sub modules m4 and doc/common. commit c7899589e137fd6848870b45f692ab0832b7069a Author: Adam Dickmeiss Date: Wed Mar 12 08:53:28 2008 +0000 Fixed bug #2120: Different greek symbols, UTF-8 to MARC-8. The UTF-8 to MARC-8 conversion no longer uses yaz_marc8r_67_conv and the table data associated with it. The table data (albeit small) is still produced. commit 9fb32b9ec35a83d916e0227c751d4a7925301d34 Author: Adam Dickmeiss Date: Wed Mar 5 21:21:22 2008 +0000 For MARC-8 decoding avoid messing up G0 when G1 is selected. Use two flags for G0/G1 selection so that selection of G1 does not conflict with selection of G0. Bug #2115. Note that G1 is not properly handled. We must add &127 for G1 decoding since those characters have bit 7 set. A flag must be parsed to the conversion routines probably. commit a39b278b1ab5c2df9a7f4451f903b94766f3c833 Author: Adam Dickmeiss Date: Wed Mar 5 10:41:45 2008 +0000 Fix C code build Z39.50v3 ASN.1 using make -j (parallel build). commit 3f41c75a88a9bb7f979a379b76de77c00d5ad984 Author: Marc Cromme Date: Mon Mar 3 07:32:06 2008 +0000 added libicu-dev fro compability with lenny ICU transition commit 82ff4d3d947dadc67459dfe16da2d13891fb7426 Author: Adam Dickmeiss Date: Thu Feb 28 09:40:42 2008 +0000 Document mask for name in retrieval commit fefc5e473b01ba1b99062854510cb37569c98397 Author: Adam Dickmeiss Date: Thu Feb 21 12:42:13 2008 +0000 Removed bad character from comment commit bab540a6816b1ae07a834075e0c71d0f160565e4 Author: Adam Dickmeiss Date: Thu Feb 21 11:03:33 2008 +0000 Fixed YAZ_VERSIONL commit fcd0af67e2324336b0e62278e74df62b66797e3b Author: Adam Dickmeiss Date: Thu Feb 21 10:48:44 2008 +0000 Towards 3.0.26. commit 52d3885223f58cfd722df38adcc8d9a58aba7b51 Author: Adam Dickmeiss Date: Thu Feb 21 10:44:43 2008 +0000 Comment yaz_daemon. commit cd5dfe9bb7b6a784a5591d659881a3c6fb428512 Author: Adam Dickmeiss Date: Thu Feb 21 10:18:15 2008 +0000 Indenting commit 2dbe1df5facb92bac31b5da0ca2e2e8ee6f9b358 Author: Adam Dickmeiss Date: Thu Feb 21 10:15:30 2008 +0000 Added yaz_daemoon for windows. commit b2e784850fc85ca61e06610756ebc54b19c59895 Author: Adam Dickmeiss Date: Thu Feb 21 10:15:12 2008 +0000 win32 export yaz_daemon commit 3f93d280860794205eae219c1364e50a6ba15bac Author: Adam Dickmeiss Date: Thu Feb 21 10:15:03 2008 +0000 win32 export yaz_poll commit 10ccaa73368f50b1bd876465d80a1ee911fa1f01 Author: Marc Cromme Date: Thu Feb 21 07:19:40 2008 +0000 added optional dependencies on libicu38-dev commit 9495b9ae90634603fb390ff56da459e3c8137a63 Author: Adam Dickmeiss Date: Wed Feb 20 10:03:42 2008 +0000 Describe YAZ' options function. commit ea992427ac691e1816649c98751a20ee3732d044 Author: Adam Dickmeiss Date: Wed Feb 20 10:03:25 2008 +0000 Fixed doxygen desc commit 732191377db384f2d9541781a453ab805c6f57db Author: Adam Dickmeiss Date: Tue Feb 19 19:58:40 2008 +0000 Bumped debian version to 3.0.25-1 commit 2c6d94b6653410fcb959d13b40a4eb9bfb15f7e6 Author: Adam Dickmeiss Date: Mon Feb 18 19:30:28 2008 +0000 Bump version to 3.0.25. commit 0f9b09e4b9be322378fa14418c3e402924f6a1b2 Author: Adam Dickmeiss Date: Mon Feb 18 18:03:21 2008 +0000 Bump dependency version due to new functions commit 906a9c59f8c77f4002616a34b0b98d91d8b1bbc5 Author: Adam Dickmeiss Date: Mon Feb 18 17:07:05 2008 +0000 Added daemon utility (yaz_daemon). commit 5b94469ebf68f1f9d2a23c9173bbd4d5a7d0b630 Author: Adam Dickmeiss Date: Mon Feb 18 16:44:48 2008 +0000 Removed always true expression part in if stmt commit 43cd3a37090503882d47c2b52ceeb2ebd5040a36 Author: Marc Cromme Date: Thu Feb 7 15:23:18 2008 +0000 allowing for version 3.6 and 3.8 of ICU libs commit 2979c8fc3b5c53c06facad850dcae09645b43044 Author: Adam Dickmeiss Date: Wed Jan 30 20:37:04 2008 +0000 Fixed bug #2068: pkg-config trouble. Add -I${includedir} as proposed by Ko van der Sloot. commit 1318f44dd22ba2a86fd3946c8b2b01ba2370235e Author: Adam Dickmeiss Date: Wed Jan 30 20:00:55 2008 +0000 Fixed bug #395: ZOOM_record / OPAC record encoding problems. The function yaz_opac_decode_wrbuf now uses the iconv handle as used by the yaz_mart_t handle to char convert the strings in the OPAC records (ASN.1). Presumaby this string data has same encoding as the embedded ISO2709 record. commit af1d725908fed3da0afa5d4a20c6e3359effe643 Author: Adam Dickmeiss Date: Wed Jan 30 19:59:02 2008 +0000 Added yaz_marc_get_iconv commit 3fec27d8561b3634b4c1c6e32f09395d9690509f Author: Adam Dickmeiss Date: Wed Jan 30 19:58:24 2008 +0000 Added wrbuf_iconv_puts_cdata commit 66651add5da56151f986e44957cfafc8ee81578c Author: Adam Dickmeiss Date: Mon Jan 28 09:51:02 2008 +0000 Changed definition of extra_args in Z_SRW_PDU. Changed definition of extra_args in Z_SRW_PDU. The extra_args was a char* before. Is not a Z_SRW_extra_arg list. The extra args is used for both encoding and decoding of SRU GET/POST (was only used in SRU encoding earlier). commit cb2f5bb4d16fa7a2045cd863d30a45e5d9c458ee Author: Adam Dickmeiss Date: Mon Jan 28 08:14:52 2008 +0000 Towards 3.0.24. commit ad3b14dd33d6ce41c79e3b39d176b4a18dff42fb Author: Adam Dickmeiss Date: Fri Jan 25 16:30:47 2008 +0000 Added OPAC XML XSD. commit 0409a05fb47e10ea415e1102790234fc189d6292 Author: Adam Dickmeiss Date: Fri Jan 25 16:29:35 2008 +0000 zebra::* name in GFS example config commit e703daa7bd7429dd7c7646b60723434157d9b860 Author: Adam Dickmeiss Date: Fri Jan 25 16:28:42 2008 +0000 Document --with-xml2 option commit b15f0626c7fac44328266d8bde239781548256f8 Author: Adam Dickmeiss Date: Fri Jan 25 16:28:26 2008 +0000 Name value is glob-expression for retrieval facility. The name attribute for the retrieval element is a glob-mask. This allows a GFS server to accept a mask of element set names, e.g. . commit cd23bbbe31daa41916092651e168fa6c35a3e515 Author: Adam Dickmeiss Date: Thu Jan 24 21:50:55 2008 +0000 Require autoconf 2.60 (bug #2050) commit 7812eaf5e45de650b8629df5a231dbcab1182b55 Author: Adam Dickmeiss Date: Mon Jan 21 13:34:34 2008 +0000 Fix use of shutdown for WIN32 commit d67990f0801618bce56afe464b3492b6eb81b309 Author: Adam Dickmeiss Date: Mon Jan 21 13:09:07 2008 +0000 Possible fix for bug #2035 commit 01808bebfc2fbd2bd422a01cf14a148714c77e75 Author: Adam Dickmeiss Date: Mon Jan 21 13:07:43 2008 +0000 Fix for bug #2037: cs_listen failed - is not handled correctly. commit 198b4472b55199a07aa1879f537617b45c42ab87 Author: Adam Dickmeiss Date: Sun Jan 20 22:46:25 2008 +0000 Set version to 3.0.22. commit fe5e31a9e294669de982be03fd71990664a46476 Author: Adam Dickmeiss Date: Fri Jan 18 11:47:56 2008 +0000 Added version resources for yaz_icu3.dll commit 500d51dce5e882104cbc30e93d4c10499ce258c8 Author: Adam Dickmeiss Date: Thu Jan 17 22:30:29 2008 +0000 Obsolste file removed. commit 6938850d6b09e61ffde4c17c5682f7be5597e63f Author: Adam Dickmeiss Date: Thu Jan 17 22:27:40 2008 +0000 Towards 3.0.22 commit 26315242ec7bdeab2e7bc2d9aba8bbf7c515bbc3 Author: Adam Dickmeiss Date: Thu Jan 17 21:45:05 2008 +0000 Update doc WRT ICU compilation commit bff4812dd725a9d003e8b8869fc4b13698c227ee Author: Adam Dickmeiss Date: Thu Jan 17 21:44:18 2008 +0000 Do not mention oid_getentbyoid commit 212435a238eb26a3a041a7ce6a271c0217dd29bb Author: Adam Dickmeiss Date: Thu Jan 17 14:58:19 2008 +0000 Separate RPM package : yaz-icu commit 203f271d166bc46eef6b0e2e08b75611b1580048 Author: Adam Dickmeiss Date: Thu Jan 17 14:49:54 2008 +0000 Update. commit 07a8c8800167988f82b055045bca6e3c91471ac4 Author: Adam Dickmeiss Date: Thu Jan 17 14:46:44 2008 +0000 libyaz3-dev depend on libicu36-dev commit efecfe73da3c8c90fe749d95b4d68105ba320e72 Author: Adam Dickmeiss Date: Thu Jan 17 14:44:57 2008 +0000 libyaz_icu depends on the ICU libs commit c5058fc7dd740d627c4e058435d7acb6a7d9ed93 Author: Adam Dickmeiss Date: Wed Jan 16 13:01:45 2008 +0000 Fixed bug #2027: Crash when closing connection. commit 55119209417d079125b94c4a708cdc0efa0a7446 Author: Adam Dickmeiss Date: Wed Jan 16 12:47:18 2008 +0000 Check ICU after Libxml2 availability commit 649e4050d9b27ff10eaeaa93ca07ae7ca8a159f9 Author: Adam Dickmeiss Date: Wed Jan 16 12:22:05 2008 +0000 Use yaz/xmltypes.h for public Libxml2 headers commit 46692c65fdb078ebbefb8a45e159fe65f528d8d8 Author: Adam Dickmeiss Date: Wed Jan 16 12:18:51 2008 +0000 Test for ICU_CPPFLAGS for ICU availability commit 96a8c2ed9ca281137d729d034312f8dceb27ee85 Author: Adam Dickmeiss Date: Wed Jan 16 12:17:26 2008 +0000 Disable ICU if XML support is unavailable commit 2083c7f425383e5def0200d98492aecaf6f5f509 Author: Adam Dickmeiss Date: Wed Jan 16 11:31:48 2008 +0000 Bump version to 3.0.21 commit 0402f8526787fc555058e44d8348b492c7b223a8 Author: Adam Dickmeiss Date: Wed Jan 16 11:30:51 2008 +0000 Fix --libs output in case of ICU being disabled commit aa445c654412e914fcc6df99f10e182d66067134 Author: Adam Dickmeiss Date: Mon Jan 14 23:44:00 2008 +0000 No longer depend/use libpcap. commit c06a0ea570b026b5a53cbc8637053c56ac2f450f Author: Adam Dickmeiss Date: Mon Jan 14 23:32:04 2008 +0000 Remove --with-pcap commit cc941fb37956158f364fb2b5bf7d7b56889e643e Author: Adam Dickmeiss Date: Mon Jan 14 23:13:54 2008 +0000 Year 2008 commit 46c6d34f1778ba3876412d78eb58515b423e5140 Author: Adam Dickmeiss Date: Mon Jan 14 23:11:51 2008 +0000 Towards version 3.0.20. commit 62d63755eee10d888ec290d43693975d42e24034 Author: Adam Dickmeiss Date: Mon Jan 14 23:11:39 2008 +0000 Do not Build depend on libpcap-0.8-dev commit eebab252c82eb9cc5977e73ad7dd0ad83bb8dbf6 Author: Adam Dickmeiss Date: Mon Jan 14 22:58:46 2008 +0000 Build ICU stuff in separate DLL: yaz_icu3.dll. commit e310bbc88afee1090799a0183d75c35d5eb060d9 Author: Adam Dickmeiss Date: Mon Jan 14 22:58:06 2008 +0000 Fix printf of token id commit bc8450e933a6faa623d37b3606bbdd9252d62df3 Author: Adam Dickmeiss Date: Mon Jan 14 20:45:24 2008 +0000 Summarize news (from ChangeLog). commit 97580f4c1107c30a3ffeed5a80ff43d7930eeb14 Author: Adam Dickmeiss Date: Mon Jan 14 20:37:08 2008 +0000 Remove yaz-ziffy Debian package. commit e218239a81500b87639ea22c39089648a8eee00a Author: Adam Dickmeiss Date: Mon Jan 14 20:34:14 2008 +0000 Factor ziffy out as a separate package. commit da7f94a6b0f603280dcae083f2e5c1627b817fe1 Author: Adam Dickmeiss Date: Fri Jan 11 17:04:02 2008 +0000 More news commit 5fcf42328e6f732db2f693fb3284507376da0284 Author: Adam Dickmeiss Date: Wed Jan 9 21:35:23 2008 +0000 Changed license of CCL module to 'Revised BSD' commit 65371f5d5f265a4c5ee43f784b2d8a6db1e0774a Author: Adam Dickmeiss Date: Wed Jan 9 21:32:27 2008 +0000 Changed license of CCL module to 'Revised BSD'. commit db57e054dd296ed1b25cd51bbae190a9a7648dd5 Author: Adam Dickmeiss Date: Wed Jan 9 15:34:30 2008 +0000 Build yaz-icu if ICU is enabled on Windows. commit 9b6117759c80f45b99b47fba0651e2b7912ca8dc Author: Adam Dickmeiss Date: Wed Jan 9 15:33:31 2008 +0000 DLL export ICU functions. commit 10541f418a12339fbb75de5f69ec0327d180f8f1 Author: Adam Dickmeiss Date: Wed Jan 9 15:00:47 2008 +0000 ICU support on Windows version of YAZ. Prepare makefile for ICU support. Thanks to Tumer Garip. commit b8d0ce914a074e4c6769d7f4d5f75b2f50c070c1 Author: Adam Dickmeiss Date: Mon Jan 7 17:32:49 2008 +0000 Fixed bug in ZOOM_options_getl WRT setting of parameter lenp. Fixed bug in ZOOM_options_getl WRT setting of parameter lenp that would be unset if a callback_handle is used to retrieve the options value. This bug caused ZOOM extended services update to malfunction. commit a061444f080ca7a0319bc176b48b0e70e067de13 Author: Adam Dickmeiss Date: Sun Jan 6 21:48:23 2008 +0000 Added tests using cql2pqf. commit 45754b01d18ddee3e71b79d6be871cc75c2c7c86 Author: Adam Dickmeiss Date: Sun Jan 6 19:34:34 2008 +0000 CQL free-form terms are ANDed (extra terms). CQL free-form terms are ANDed in the CQL to PQF conversion. For example, dc.title = a b, means dc.title = a and dc.title = b. And the query (a "b c") means (a and "b c"). This might be configurable in a future version of the conversion. This does not alter semantics for non-free form term queries, e.g. dc.title=a . commit 3db79025b276f232a4ab672f1ba996a0ccc64608 Author: Adam Dickmeiss Date: Sun Jan 6 17:37:13 2008 +0000 Added CQL free-form term tests. commit a29d852d610296e871716c137337fb44510eee1d Author: Adam Dickmeiss Date: Sun Jan 6 16:22:02 2008 +0000 Added support for free-form-terms. Bug #609: HDCQL. commit 783114bd4cf6e26e1743ce131d3e7f00af63ec50 Author: Adam Dickmeiss Date: Sun Jan 6 13:08:09 2008 +0000 CQL v1.2 functionality except sort. Modify CQL parser and transform code to become more CQL 1.2 compliant. Default relation is '=' instead 'scr'. Relation for exact is == instead of 'exact'. Work on bug #609: HDCQL. commit 33cb7ed48259fc7e22823531fc41a4a430aecc1b Author: Adam Dickmeiss Date: Sun Jan 6 13:02:48 2008 +0000 Use shell /usr/bin/tclsh for Tcl scripts. Use shell /usr/bin/tclsh for Tcl scripts. Do not use the smart exec invokation trick. It causes more confusion . Systems such as Debian has /usr/bin/tclsh as the preferred Tcl shell anyway. commit 162d5852cbb7881d8edae6648fbdc888d1cfe0c6 Author: Adam Dickmeiss Date: Thu Jan 3 23:10:08 2008 +0000 Always _BSD_SOURCE . Always _BSD_SOURCE regardless of GLIBC or not. Testing for __GLIBC__ after include of stdio.h was apparantly not enough commit 6ee6496a85720ce65235c5469264a6ea04b4347d Author: Adam Dickmeiss Date: Thu Jan 3 23:04:07 2008 +0000 Internal Debian pkg commit 832b917b15f8dba67b9fe41e8fb8adae107ac824 Author: Adam Dickmeiss Date: Thu Jan 3 22:55:17 2008 +0000 libyaz3-dev depends on some tclsh commit 6e325c841bbf92ba84e4a8361c8050a50943aa5c Author: Adam Dickmeiss Date: Thu Jan 3 22:54:06 2008 +0000 Define _BSD_SOURCE whenever GLIBC is used. For ziffy, define _BSD_SOURCE whenever GLIBC is used. This is to fix compilation on GNU/kFreeBSD. Debian bug #410346. commit 1251332183cc7eb0177c09c12d5c6f003192398e Author: Adam Dickmeiss Date: Sun Dec 30 22:04:12 2007 +0000 configure prefers tclsh over other versions. The configure now prefers tclsh over other versions because tclsh is (usually) the preferred tcl shell as set by the administrator. commit 13473bcae713a0df158fd9620fbeba13663459ca Author: Adam Dickmeiss Date: Thu Dec 27 13:27:40 2007 +0000 Do not reset querytype if session resets (HTTP/SRU). commit 22a9064b93713ca401a98cf7f416407c60b19def Author: Adam Dickmeiss Date: Fri Dec 21 19:01:33 2007 +0000 Improved tokenization for yaz-client coammnds update and xmles. The yaz-client commands update and xmles takes documents as parameters and parse_cmd_doc is used. This now accepts one of the forms: Date: Fri Dec 21 08:31:42 2007 +0000 Ensure fname is 0-terminated in parse_cmd_doc for yaz-client. commit c8f8034d0c8c592d036d19a7885ebc2db1706c59 Author: Adam Dickmeiss Date: Thu Dec 20 22:45:37 2007 +0000 Fixed bug #1988: CQL-to-PQF translation mishandles quoted doube. Fixed bug #1988: CQL-to-PQF translation mishandles quoted doube quotes. The CQL already uses \-escaped strings (such as \") . These can be copied verbatim to PQF. commit 36581ff40624336db8416e0892b9b78f52230224 Author: Adam Dickmeiss Date: Wed Dec 19 12:36:42 2007 +0000 Added YAZ_FILEVERSION commit 937b847b63d23182ef55eb081eb316ad034e1282 Author: Adam Dickmeiss Date: Wed Dec 19 11:02:20 2007 +0000 Towards 3.0.18. commit df747a20f74c54ee0cc2bdd4fedce527badf2d82 Author: Adam Dickmeiss Date: Tue Dec 18 21:13:06 2007 +0000 Do not use Libxml2's reader if libxml2 version < 2.6.15. commit 4bc595e8fd2364e93114ee66493544b9521680da Author: Adam Dickmeiss Date: Tue Dec 18 14:07:08 2007 +0000 Using YAZ' options rather than getopt.h. Ziffy now uses YAZ' options rather than getopt.h because getopt.h is unavailable on some systems. commit f97a90e1590b8aac0b6ab37ca32134c16dce0d3b Author: Adam Dickmeiss Date: Tue Dec 18 12:46:02 2007 +0000 Annotate commit 3eb8be5cd44ecdbd68ec3ca8a54ec86691ff9a4d Author: Adam Dickmeiss Date: Mon Dec 17 20:59:30 2007 +0000 Support read/write MARCXML collections. commit 98fd6745c622d0f3585a9cc5a2b7624472c6a028 Author: Adam Dickmeiss Date: Mon Dec 17 11:23:16 2007 +0000 Fixed bug in icu_buf_utf8_to_cstr (wrong length). Fixed bug in icu_buf_utf8_to_cstr . A string could be truncated because its string length is set to 0 in icu_buf_utf8_resize. Function icu_buf_utf8_resize no longer resets the string. commit eb70fee6c2f3154f7a8ef264810a3c015337b474 Author: Adam Dickmeiss Date: Sun Dec 16 22:43:59 2007 +0000 About new OPAC stuff commit 0b90ab9b0d18a47201ba1c5883593a14c1e5b148 Author: Adam Dickmeiss Date: Sun Dec 16 11:08:50 2007 +0000 Handle OPAC for record conversion module. Extend the record_conv system to handle Z39.50 OPAC records. Function yaz_record_conv_opac_record was added. commit 28b634e1ab587807300c4eb3bab72acaebc1647f Author: Adam Dickmeiss Date: Tue Dec 11 13:35:45 2007 +0000 Added ZOOM_package_option_{set,get}l. Added ZOOM_package_option_{set,get}l so that binary data can be used for Z39.50 packages (Update, etc). Using option_getl rather then option_get for few options that might be binary: "doc", "record" and "recordIdOpaque". commit e34f0b5ecf5e8dd010d212010b7041cfd059a853 Author: Adam Dickmeiss Date: Tue Dec 11 13:14:45 2007 +0000 Ensure ICU is part of built commit 84338b9f4dba9266b24830e23b185204bc0f87a9 Author: Adam Dickmeiss Date: Mon Dec 10 22:10:09 2007 +0000 No action-not-found rule for ICU. commit 52a0c81b9152036158b312173ec6006e9be8ab48 Author: Adam Dickmeiss Date: Mon Dec 10 20:33:47 2007 +0000 Generate yaz3.dll version from yaz-version.h commit 2852dc8fc967ac3a1e9c4fa05fdb3f77422e3499 Author: Adam Dickmeiss Date: Fri Dec 7 10:01:53 2007 +0000 Suggest yaz-doc instead of Recommend for libyaz3-dev commit 3576736bac485d8f04b2fc4f6b5cfcef7576d741 Author: Adam Dickmeiss Date: Fri Nov 30 11:44:46 2007 +0000 Adjustments to make YAZ compile as C++ code. commit 765b94caaa93566a9792019ec5d2bf56fc8100a3 Author: Adam Dickmeiss Date: Fri Nov 30 11:43:47 2007 +0000 Changed return value of function icu_sortkey8_from_utf16 to void. The return value is useless and error is signalled by status parameter. This breaks binary compatibility for that function but it is not in use anywhere. commit cf30376bd9e43ad653c6292f275ee4dd10b70a6c Author: Adam Dickmeiss Date: Fri Nov 30 11:42:04 2007 +0000 Use oid_class rather than int for OID class. Changed oclass parameter for yaz_oid_add function from type int to enum oid_class. This should not break binary compatibility. Changed oid member in struct yaz_oid_entry to enum oid_class. commit 03ce460f7ed624f0c36274cee763eb86fb2ace88 Author: Adam Dickmeiss Date: Wed Nov 21 13:53:20 2007 +0000 Use schema in Z39.50 Update. If schema is given, supply it as part of Z39.50 Extended Service update. Patch from Jacob Poulsen. commit e44e073beb75899cf954c94667b412f86009ef16 Author: Adam Dickmeiss Date: Wed Nov 21 09:04:46 2007 +0000 Man pages in Reference section. All man pages are combined in one Reference section, manref.xml, which is extracted via XSLT from each individual man page. commit a6661f2e025fd649e040da66c5ca4bc7f03aa2ff Author: Adam Dickmeiss Date: Fri Nov 16 08:01:47 2007 +0000 Update test for new wrbuf_puts_escaped functions commit 0d6e26ddc9a74fb5668efb2a8c72d58a2f4ea770 Author: Adam Dickmeiss Date: Thu Nov 15 08:45:52 2007 +0000 Introduce wrbuf_{write,puts}_escaped. Introduce wrbuf_{write,puts}_escaped. Removed wrbuf_verbose_str which now has the new name wrbuf_write_escaped. wrbuf_verbose_str has not been used outside YAZ in released software so this should be safe. Added a few Doxygen comments for wrbuf.h as well. commit 874e2073d9055e57737896300d3ad7545906de9e Author: Adam Dickmeiss Date: Thu Nov 15 08:36:31 2007 +0000 Added yaz_puts_escaped commit c8cce63830abf867befc40eee18c75b7b3dfec8f Author: Adam Dickmeiss Date: Thu Nov 15 08:33:15 2007 +0000 Version 3.0.17. commit 1d6d4797cbc07f9a87074912f8dcb119628ae173 Author: Adam Dickmeiss Date: Thu Nov 15 08:28:08 2007 +0000 ICU utility prints sortkey as well commit 861508216f18c9e932adf4b421b47bd8e4738327 Author: Adam Dickmeiss Date: Wed Nov 14 21:03:59 2007 +0000 Doxygen comments commit 37d3194530a29fe83a9340adb1b7861a257f2e81 Author: Adam Dickmeiss Date: Mon Nov 12 11:48:13 2007 +0000 More on the ICU wrapper. commit 0890bc4e5dd6103e064ec208a54f80a770e2677c Author: Adam Dickmeiss Date: Mon Nov 12 11:43:47 2007 +0000 Fix spelling commit 8fb19509bf519666171c0e6a67e4aec12f2dd81d Author: Adam Dickmeiss Date: Mon Nov 12 11:41:53 2007 +0000 yaz-icu man page/program in yaz-icu package only. The yaz-icu man page and program is part of package yaz-icu (not yaz). Descriptions in debian/control fixed to keep linda happy. commit 93848af242b888a6aeba304be54e2ff5cc5e510f Author: Adam Dickmeiss Date: Mon Nov 12 11:14:48 2007 +0000 yaz-icu part of packages commit e67f3cbcc8ebc79e343459fa5aba9ed3e3cbe990 Author: Adam Dickmeiss Date: Mon Nov 12 11:13:05 2007 +0000 Added yaz-icu man page commit 590e1743b586657868e62f00cb5181f189422c11 Author: Adam Dickmeiss Date: Mon Nov 12 11:12:19 2007 +0000 Update to use transform step commit ecd6d03e10dfbe4b6bb5b1b599c23bdb7ff305ca Author: Adam Dickmeiss Date: Mon Nov 12 11:11:16 2007 +0000 Renamed 'normalize' rule to 'transform'. The ICU chain step, normalize is now called transform because that's what ICU calls it. And we better keep things aligned. commit 5a4df800518e830b12ea3a0e906939506a7c3a65 Author: Adam Dickmeiss Date: Mon Nov 12 08:58:16 2007 +0000 Towards 3.0.16 commit 2ec0697230bef9e836df093900fd13cbdf945161 Author: Adam Dickmeiss Date: Mon Nov 12 08:57:45 2007 +0000 Using iochan_event_loop (WIN32) commit 997ab83aeb77caaff6929b4b33da327f0a894940 Author: Adam Dickmeiss Date: Mon Nov 12 08:47:22 2007 +0000 Program yaz-icu is noinst rather than bin. Program yaz-icu is noinst rather than bin for now. Will be installed in bin when a man page has been created, bug #1797. commit e76c761a46013ea1c46a2f36bc02c68bfdce3615 Author: Adam Dickmeiss Date: Mon Nov 12 08:43:49 2007 +0000 Added note about yaz_poll commit c038a022f891ee58e6d30aec93644d17d2b686d6 Author: Adam Dickmeiss Date: Mon Nov 12 08:41:56 2007 +0000 Rename function event_loop to iochan_event_loop. commit 91c35d653aea231aff9efc3eef6a6ab6662dd129 Author: Adam Dickmeiss Date: Sat Nov 10 08:59:31 2007 +0000 Do not handle EINTR in yaz_poll. Change yaz_poll so that it does not loop around select/poll if errno=EINTR is set. This sitution is handled in caller, such as event_loop used by GFS which must take further action if EINTR is set. If EINTR is handled by yaz_poll it does not get caught. commit 3b792849c676d96918850e2f1e0af87a75278501 Author: Adam Dickmeiss Date: Fri Nov 9 22:08:14 2007 +0000 Change timeout parameter for yaz_poll. Change timeout paramater from seconds to seconds+nano-seconds for yaz_poll. Also make yaz_poll_{poll,select} static (internal). commit dbf148183e1370d5b62e15abb8b24292a3009124 Author: Adam Dickmeiss Date: Fri Nov 9 21:52:38 2007 +0000 Remove include of sys/select.h from tcpip.c . It is not needed. commit 743e944e38c1f13a7304d924cd9d111c64f8c7f8 Author: Adam Dickmeiss Date: Fri Nov 9 19:00:42 2007 +0000 Use yaz_poll everywhere.. And fix syntax error! commit d6a36b43e4fa99ada736ee7680c7bb106107f223 Author: Adam Dickmeiss Date: Fri Nov 9 19:00:08 2007 +0000 Describe new functions. commit 071b5ca306efc84b1b22e071c4e03b31fb9fe17a Author: Adam Dickmeiss Date: Fri Nov 9 18:49:19 2007 +0000 Enable use of yaz_poll always in event_loop. commit 413ed128af037bdb681d673fc6ae68163ad218a4 Author: Adam Dickmeiss Date: Fri Nov 9 18:47:50 2007 +0000 YAZ GFS uses yaz_poll. The event_loop function uses by YAZ' Generic Frontend Server uses the yaz_poll function - instead of select. commit 8b4a08403ae705e22b604bffa4577ac403b7de8d Author: Adam Dickmeiss Date: Fri Nov 9 16:46:43 2007 +0000 Implemented yaz_poll - select/poll wrapper. commit 11bae153f20df554744a8b96592616eca05cc522 Author: Adam Dickmeiss Date: Thu Nov 8 18:02:04 2007 +0000 Reindent commit 1d6cd0231d7d52bd618ea33db95d3f83ba9915a5 Author: Adam Dickmeiss Date: Thu Nov 8 17:22:48 2007 +0000 Allow any locale for icu_chain_create. commit cb9f0bb98295d0b6634d41b1164f18481238f3fd Author: Adam Dickmeiss Date: Thu Nov 8 17:20:32 2007 +0000 Use xmalloc instead of malloc. commit a62ac98bc633b12d88014ba95ab212b9957571e4 Author: Adam Dickmeiss Date: Thu Nov 8 17:20:11 2007 +0000 Ignore test program commit c262e2c4e953e90016aaa2c4d3bbb190a8d29b99 Author: Adam Dickmeiss Date: Thu Nov 8 17:15:13 2007 +0000 Avoid locale member in icu_tokenizer. The locale member of icu_tokenizer is not needed. commit 20d2c2d674de4b78f90de2356537a4ea542aeeac Author: Adam Dickmeiss Date: Thu Nov 8 17:08:10 2007 +0000 Function icu_casemap_create no longer takes locale parameter. Function icu_casemap_create no longer takes locale parameter. Instead, icu_casemap_casemap takes a locale parameter. commit e089d89f38b4fc61fce16eb03150776844b053f8 Author: Adam Dickmeiss Date: Thu Nov 8 13:35:13 2007 +0000 Refactor ICU WRT locale. The locale parameter is no longer a parameter for icu_chain_xml_config and locale is read as an attribute for top XML node. The icu_casemap locale is no longer a member and a parater for icu_casemap_casemap instead. This saves a copy of a locale in each casemap. commit 307c60cf35acbe8d004b002e59416a2ebe3cb32d Author: Adam Dickmeiss Date: Thu Nov 8 09:29:38 2007 +0000 Public header icu.h, private header icu_I18N.h . commit ac218b6507b094599695b36b30fd80585a378c18 Author: Adam Dickmeiss Date: Thu Nov 8 09:07:14 2007 +0000 Indent commit 46f99a24bc67de00bcbb33458b9c187c7525b1b0 Author: Adam Dickmeiss Date: Thu Nov 8 09:03:11 2007 +0000 Changed header - part of YAZ not Pazpar2 commit 479969ddd4d243955f2e64ef8571926429ad4f37 Author: Adam Dickmeiss Date: Thu Nov 8 08:17:17 2007 +0000 For ICU enabled YAZ defined YAZ_HAVE_ICU instead of HAVE_ICU. commit def0d51c189bc8a2e9f5f9a67a58833897edecb7 Author: Adam Dickmeiss Date: Wed Nov 7 10:19:12 2007 +0000 For ICU, set ICU status to OK for some public functions. The ICU status code, UErrorCode, is now set to U_ZERO_ERROR in the preamble of functions icu_chain_create, icu_chain_xml_config and icu_chain_next_token. commit fffad7b88b5fcc5ce744151034d1df379919d6d6 Author: Adam Dickmeiss Date: Wed Nov 7 09:50:24 2007 +0000 ICU element index and sortkey no longer available. commit 71509ab1affd957fa0af7c7536105988a7ccd93d Author: Adam Dickmeiss Date: Tue Nov 6 10:27:30 2007 +0000 For ICU, locale, is a char ptr rather than uint8_t ptr. The type uint8_t is a ICU type that we don't want to use if we can avoid it. commit c2e065a4a7fa385b5658c1fcf1efa9f4ee4351e2 Author: Adam Dickmeiss Date: Thu Nov 1 10:32:43 2007 +0000 Fixed printf of pointer commit 852afaf94fd650550999e60782300525c50bdfd2 Author: Adam Dickmeiss Date: Thu Nov 1 10:29:28 2007 +0000 Fixed link to OID tools commit 8521c0ae7e5ffebcd5c463d67a829cffba80d466 Author: Adam Dickmeiss Date: Wed Oct 31 21:58:07 2007 +0000 Fixed bug #1122: Certain record IDs are not found by searches. The CQL parser preserves terms completely and \\s are no longer removed. This changes CQL output for some test cases and so these are updated accordingly. The CQL to PQF transform only treats * and ? operators if they aren't escaped. A memory leak was also fixed for the ANSIZ39.58 pattern case. commit c5408040f72a5a23dc23d6c8d30ee61ea8b6effc Author: Marc Cromme Date: Mon Oct 29 13:50:57 2007 +0000 changed ICU chain to return all tokens, also those which became empty under normalization. These might still have some display terms attached to them, which are to be used by the snippet display stuff or the scan term display stuff. commit 297aa7b45c3bd88aea2799f6810c8c85bc998f56 Author: Marc Cromme Date: Mon Oct 29 10:22:22 2007 +0000 renamed ICU chain functions to the following names relation the operation to the actually processed token int icu_chain_token_number(struct icu_chain * chain); const char * icu_chain_token_display(struct icu_chain * chain); const char * icu_chain_token_norm(struct icu_chain * chain); const char * icu_chain_token_sortkey(struct icu_chain * chain); commit c80d8f1c0245de69917debe3e918532491b87fac Author: Adam Dickmeiss Date: Mon Oct 29 09:16:32 2007 +0000 Extended auth command so that NULL User, pass may be set. This is to solve bug #1820. commit 674986e09b1e2c5ea9670355aef21c813323d186 Author: Marc Cromme Date: Thu Oct 25 10:04:32 2007 +0000 added special case with an empty ICU chain for 'raw' index processing without call of transliterators, case maps or tokenizators. It's optimized such that the following happens: if (!chain->sort), no utf8 to utf16 translation occurs, and the original cstring is returned for the icu_chain-get_norm8() call. if (chain->sort), utf8 to utf16 translation is made, the original cstring is returned for the icu_chain-get_norm8() call, and the utf16->sortkey conversion is run previous of calling icu_chain-get_sort8(). commit 80eb42ff87c6bda77018232e174e5aae41fc29e8 Author: Marc Cromme Date: Thu Oct 25 08:42:21 2007 +0000 simplified test case XML config root element tags commit b59f3a79326742a4432bda999670f0c85e2c83b7 Author: Marc Cromme Date: Thu Oct 25 08:40:06 2007 +0000 removed dead code from ICU files commit ee2314e5828aac6055031f9ed4441eb9852ec27c Author: Marc Cromme Date: Thu Oct 25 08:32:50 2007 +0000 added sortkey flag to icu_chain constructor commit 40f472b5f14f2d59d5f72d5814351ffdc1f54418 Author: Adam Dickmeiss Date: Wed Oct 24 22:10:24 2007 +0000 Avoid per-target CPPFLAGS. If we use per-target flags, AM_PROG_CC_C_O is required or we just dont it. commit e005fd551460aab9ccefb561e42c746cc58fd302 Author: Marc Cromme Date: Wed Oct 24 14:48:17 2007 +0000 Isolated ICU locale out of XML config file. Locale is now the second argument to chain = icu_chain_xml_config(xml_node, (uint8_t *) "en", &status); commit bbd768abbf09c38b0438e0186e50f3560b372dd9 Author: Adam Dickmeiss Date: Wed Oct 24 13:50:02 2007 +0000 Added yaz_match_glob commit 42e6fdb480e4de99b856018fd70475bd7fbdb928 Author: Marc Cromme Date: Wed Oct 24 13:23:34 2007 +0000 fixed wrong token count when tokens disappear with ICU normalization commit 9edd0f41a0323104c2632c2291eae336ab60874c Author: Marc Cromme Date: Wed Oct 24 07:41:48 2007 +0000 fixed memory violation in ICU chain code, restructuring tokenizer to allow for non-empty tokens still ongoing work commit 30212597593ba71295ef0b98aa3527526754a1eb Author: Marc Cromme Date: Tue Oct 23 07:51:57 2007 +0000 surpressed ICU test tokenization output commit 7a5661d46c2051c619fe1b794cca882a72707c52 Author: Adam Dickmeiss Date: Mon Oct 22 17:52:09 2007 +0000 File m4/ac_check_icu.m4 part of dist. commit c168c38b0beb83bca23c72d9203cc796a374bfac Author: Adam Dickmeiss Date: Mon Oct 22 17:32:07 2007 +0000 Make ICU stuff compatible with old C comps. YAZ License. commit b80c29e05c84270159284f5b1297e38175cd63e0 Author: Adam Dickmeiss Date: Mon Oct 22 12:50:52 2007 +0000 Fixed lalibs output for ICU mode. commit f98b671ac4ece0194de14c04ef7c281a410e0831 Author: Adam Dickmeiss Date: Mon Oct 22 12:40:04 2007 +0000 Debian package 3.0.15-1 with ICU. commit 0ffb25b0bf78f53399267664b71206c88980c4da Author: Adam Dickmeiss Date: Mon Oct 22 12:21:38 2007 +0000 Added ICU chain component - which used to be part of Pazpar2. commit 03531ce2d54914dde2e679aa6382eb04d9e8f1d6 Author: Adam Dickmeiss Date: Tue Oct 16 10:45:53 2007 +0000 Removed material about Object identifiers for YAZ 2. commit e6f45fddb3d4267340ad320dbedfbf5cb68c4d21 Author: Adam Dickmeiss Date: Mon Oct 15 20:45:46 2007 +0000 Added a record for testing of bug #1778. commit 02ba601656652e2362aee6fd23d1b2ac5c35bcca Author: Adam Dickmeiss Date: Mon Oct 15 20:45:05 2007 +0000 Fixed bug #1778: Extended ASCII not escaped always (UTF-8 to MARC-8). When in non-ASCII mode, YAZ now escapes combined character sequences. A test was added in tsticonv.c. commit 0efc47dc6d0080180038945a5f914749c3585799 Author: Adam Dickmeiss Date: Mon Oct 15 12:00:31 2007 +0000 Increase intermediate buffers for wrbuf+iconv. The intermediate buffer for wrbuf+iconv is increased from 12 to 16 bytes. There may be MARC-8 sequence overflows overwise - with at least reset (flush). commit f66b53c033be535cc3fab8bcb2949fa2927b25d4 Author: Adam Dickmeiss Date: Fri Oct 12 14:22:19 2007 +0000 Re-organized MARC-8 charset creating code a bit. Re-organized MARC-8 charset creating code a bit.. A define + code to work on bug #1778 was added. commit 377e50914cd78d52e77032a3eaf8972f23b4e7b9 Author: Adam Dickmeiss Date: Tue Oct 9 06:00:55 2007 +0000 Revised types for functions cs_complete_auto, etc. The functions cs_complete_auto, cs_complete_auto_head takes 'const char *' as buffer rather than 'const unsigned char *'. This makes some casts unnecessary. This also fixes tst_comstack which used to test cs_complete_http. This function, howver is no longer public, so cs_complete_auto is used instead. commit 29cc293e92725df0aaf70fa4897600597dd8db9b Author: Adam Dickmeiss Date: Sun Oct 7 08:53:26 2007 +0000 Added HTTP tunnel facility for COMSTACK, bug #1752. This is a facility that allows a Web proxy, such as squid, to tunnel Z39.50 traffic. This facility is "transparent" to must applications using YAZ. It's enabled by using pseudo transport connect: followed bý the we proxy address, followed by command, then follwed by he regular "virtual" addresss. For example, connect:webproxy.com:3128,tcp:z3950.loc.gov:7090/voyager . commit 019eca69c2a438db0aea7b8760685c618cb5f552 Author: Adam Dickmeiss Date: Fri Oct 5 16:46:55 2007 +0000 Implemented function cs_create_host. Implemented function cs_create_host parses a YAZ host component. This is to be used for HTTP Connect tunneling (bug #1752). commit 8508799fc20ead07aae07f5f29604719e96b4dda Author: Adam Dickmeiss Date: Fri Oct 5 15:11:36 2007 +0000 Changed blank (0x20) handling conversion to MARC-8. The conversion to MARC-8 now always escapes the BLANK character outside Basic ASCII. This is stricly speaking not necessary - blank is part of "all" pages (sets). But some tools cannot handle it. YAZ, however, treats blank as blank in all pages when MARC-8 is read (converted from). commit f4111def563afa2864d73ac82b86c933bc9138b3 Author: Adam Dickmeiss Date: Wed Sep 26 19:14:04 2007 +0000 Bump to 3.0.15. commit 185d51016579faad34f8b62151ee1d5125a4d430 Author: Adam Dickmeiss Date: Tue Sep 25 07:34:03 2007 +0000 Combine test from tstmarciso.sh and tstmarcxml.sh to tstmarc.sh .. Mostly because the latter requires output from the former (so make -j2 could break). commit 9a2e6a5228a544875ae781451bd149a72aaa54a7 Author: Adam Dickmeiss Date: Mon Sep 24 22:22:13 2007 +0000 Update this test due to fix for bug #1666. commit 386fc8aa64d01486aa4fb3dac0dde1003a3b3d3f Author: Adam Dickmeiss Date: Mon Sep 24 12:51:10 2007 +0000 Fixed bug with shadowing of variable in lookup_marc8. Bug introduced in previous commit (1.44). commit 790b38909763b433a994fdbdd277d1b01859728e Author: Adam Dickmeiss Date: Sun Sep 23 07:40:13 2007 +0000 Document more yaz-marcdump options commit f6d1839e909db3578670229fc9a6f56b18a034e6 Author: Adam Dickmeiss Date: Sun Sep 23 07:21:51 2007 +0000 Added MARC-8 encoded Arabic record, marc9.marc, to test that blanks are preserved. Added UTF-8 encoded Chinese record, marccol3.u8.marc, which has the Ideographic space sequence it. commit 6278560ff2c1d116cb6c06c7c145573d8d155a4f Author: Adam Dickmeiss Date: Sat Sep 22 18:56:22 2007 +0000 Added test for conversion of utf8 e38080 to marc8 212321 (Ideographic space). commit e77f334b9b8b6d0ba01b3ede0f58b99ac561dd2d Author: Adam Dickmeiss Date: Sat Sep 22 18:55:02 2007 +0000 Remove duplicates (already existing) in flat entries for MARC-8 tries. Previously only duplicates in index tries were treated. This ensures that only first sequence (of multiple) is used for conversion and takes precedence. For example utf E38080 is converted then converted to marc8 212321 (not marc8 212320). commit 6d61fec3c06d8ed1d648ec7da417a1a8aaa52691 Author: Adam Dickmeiss Date: Sat Sep 22 18:49:55 2007 +0000 Treat space (20X) as present in all MARC-8 charsets commit 1325ab853fdccee0f1a6659ef216eb96b8b6b39c Author: Adam Dickmeiss Date: Fri Sep 21 16:04:48 2007 +0000 Fixed compilation for absent Libxml2. commit 19422e2310de8b0ac931561be72410b5b6d8b2ae Author: Adam Dickmeiss Date: Fri Sep 21 09:24:17 2007 +0000 Towards 3.0.14 commit 8b057c45442fb3de1af1aa7d63b36126560fde12 Author: Adam Dickmeiss Date: Fri Sep 21 07:10:08 2007 +0000 Initialize diag_messÃage member of ZOOM_record commit 3085741e28eb94029b230bb25e4926aed32daf29 Author: Adam Dickmeiss Date: Thu Sep 20 17:22:45 2007 +0000 Fixed bug in conversion to XML from MARC: Non-XML characters in control fields were not removed. commit 8c49b29ec99736b215bb2b98f049e7ed5d87ed26 Author: Adam Dickmeiss Date: Tue Sep 18 19:19:16 2007 +0000 Removed reference to url.srw commit 53bc22fbe34749ba0151ac0cd80a0257056c15ee Author: Adam Dickmeiss Date: Tue Sep 18 13:05:18 2007 +0000 Versino 3.0.13 commit afae1117609712743c1109597d080a53a8dac5d4 Author: Adam Dickmeiss Date: Mon Sep 17 19:18:27 2007 +0000 Make an MARC conversion trie for each characterSet section rather than codeTable. This is ensure we can deal with G0/G1 sequences. Bug #1464. commit f56606aca0511a699aa7531acec63c212af61447 Author: Adam Dickmeiss Date: Mon Sep 17 19:15:22 2007 +0000 Log iconv tests that fail commit 270160339305b73c0b5cdf74f004c684e83e2cd8 Author: Adam Dickmeiss Date: Mon Sep 17 19:14:26 2007 +0000 Added wrbuf_verbose_str. commit 2b929cf75020ee215393a655f0403c849fed5ea9 Author: Adam Dickmeiss Date: Fri Sep 14 21:39:36 2007 +0000 Use updated codetables.xml as provided by Larry Dixson (bug #1464). commit ff006112d533333a6b3f40d9b24180cd8db5f121 Author: Adam Dickmeiss Date: Fri Sep 14 20:55:57 2007 +0000 Bump version to 3.0.13 commit 2df748278af6d0220d5d9e0a0e54a5e16cd3de63 Author: Adam Dickmeiss Date: Wed Sep 12 06:49:37 2007 +0000 Towards 3.0.12 commit 1be632f8a982457cd7c78aadd44e37f39454de18 Author: Adam Dickmeiss Date: Tue Sep 11 16:41:37 2007 +0000 More news commit a37c6b37804b2cad867b2740488f50e96007ba65 Author: Adam Dickmeiss Date: Tue Sep 11 16:36:51 2007 +0000 ZOOM C announces SRU version 1.2. commit 2f163ad29604f429bba4d5ac2bc5447be493af55 Author: Adam Dickmeiss Date: Tue Sep 11 15:42:43 2007 +0000 More news commit 6aed21d6613e5071a29885e1e1575c890adc3e0e Author: Adam Dickmeiss Date: Tue Sep 11 15:16:20 2007 +0000 Handle NULL SRU addinfo in printing commit 0c04c08f58c61bf0f16e6783d5461dacda43037a Author: Adam Dickmeiss Date: Tue Sep 11 08:40:28 2007 +0000 Fixed problem with record cache and schema/diagnostics not being set at all times. commit 42ee0e2611083beaa2d206e2039522c187735ffa Author: Adam Dickmeiss Date: Tue Sep 11 08:37:53 2007 +0000 Using odr_strdup_null a couple of places commit 116bfb8f4109efbe39bdfe98b0e17e15e8e50c4a Author: Adam Dickmeiss Date: Tue Sep 11 08:35:42 2007 +0000 Added odr_strdup_null which calls nmem_strdup_null. This function accepts a NULL ptr as source in which the result is a NULL ptr too. commit c9e4ad355f2f30b98fa129d9f63d00f70b56652d Author: Adam Dickmeiss Date: Sun Sep 9 05:54:45 2007 +0000 Handle surrogate diagnostics for SRU commit f9747584f933039d25a9ba450f362d61733d14ea Author: Adam Dickmeiss Date: Sat Sep 8 06:17:45 2007 +0000 Function ZOOM_record_get allows type_spec=schema in which case schema for record is returned. commit d9654ed894daa49f6f2996df86d330322ee28643 Author: Mike Taylor Date: Fri Sep 7 17:42:12 2007 +0000 Rolling commit f85108eb899eec594765c5c15408a8c64279099c Author: Mike Taylor Date: Fri Sep 7 17:41:47 2007 +0000 yaz_diag_srw_to_bib1 now looks up SRW diagnostic codes first in a new explicit reverse-mapping table, falling back to reverse-lookup in the old table only if this does not succeed. commit a94b5a44d632a6df1a1de5dc75e73adc03e8e6b4 Author: Mike Taylor Date: Thu Sep 6 17:11:59 2007 +0000 Add z_HTTP_header_add_basic_auth() Uses new static yaz_base64encode() commit 3f4afac741a6175e12d08ddcd0fe0ba677c42123 Author: Mike Taylor Date: Thu Sep 6 17:10:35 2007 +0000 Add HTTP Basic authentication to SRU/GET, SRU/POST and SRW requests. commit 7bb60eca43952aeddc459b3e67b111f032017e76 Author: Mike Taylor Date: Thu Sep 6 17:09:56 2007 +0000 Add z_HTTP_header_add_basic_auth() commit b07ed6e4de0ebfdb87a02d57f27de5c1a8b99616 Author: Mike Taylor Date: Thu Sep 6 16:38:38 2007 +0000 HTTP Basic clienty authentication. commit 67949e915ac730f385c48f3be8bdf38ba1b35eb5 Author: Mike Taylor Date: Thu Sep 6 12:40:53 2007 +0000 Set SRU request structure's username/password from connection options. commit c880dceeaeca4082b215a15eb48fd655cb7b62f7 Author: Adam Dickmeiss Date: Fri Aug 31 21:23:45 2007 +0000 Option sru_version holds negotiated SRU/SRW version. commit 669aa0722ab651e114f8226014e7957d5d2b92fd Author: Adam Dickmeiss Date: Fri Aug 24 13:26:03 2007 +0000 yaz_srw_get returns 1.1 PDU (as in earlier versions) commit 0c4bd81e2e56724de1adbbc753f812328fb20e3c Author: Adam Dickmeiss Date: Fri Aug 24 13:25:13 2007 +0000 yaz-client command 'sru' may set both SRU method (SOAP/GET/POST) and version. commit 87c5b79ec9ced76de948e833ef2f8eb561d2f77a Author: Adam Dickmeiss Date: Thu Aug 23 14:28:07 2007 +0000 Fixed typo commit 3f36e04a60f21ed11fbb7bdb32923cffcb519f2f Author: Adam Dickmeiss Date: Thu Aug 23 14:23:23 2007 +0000 Added new ZOOM connection option "sru_version" which specifies SRU version - say 1.1 or 1.2. Fixed YAZ server's SRU GET/POST decoding WRT version checking. Anything but 1.1 was rejected and this turned out to be a mistake. For the GFS, anything but version 1.1 is negotiated to 1.2, except 1.1 which is negotiated to 1.1. commit 407a291011ba2743e175f3d2a84d4c6837406f7c Author: Adam Dickmeiss Date: Thu Aug 23 12:24:38 2007 +0000 For SRU sarchRetrieve responses option resultSetId is set for result set commit ecbd263c8be1f35bde47ba8c119627a6dedb9b28 Author: Adam Dickmeiss Date: Wed Aug 22 09:09:03 2007 +0000 Version 3.0.10 commit 2e6fc26c0be8cbb1052599e12804a39adc1bbbe1 Author: Adam Dickmeiss Date: Wed Aug 22 08:58:16 2007 +0000 Updated RPM spec file with some enhancements from Martin Armbrecht. commit deb4950cd76f5ff06cbb5246a2c2303fea6c9dba Author: Adam Dickmeiss Date: Wed Aug 22 08:11:28 2007 +0000 Revert last change regarding display_term. There still exists systems with old behavior. commit c0858501c14e5b74a62656042dc6c8ad6a2a242c Author: Adam Dickmeiss Date: Tue Aug 21 13:20:51 2007 +0000 Always honor display_term being set by backend handler. There is no need to be pre YAZ 2.0 backwards compatible. commit a92ea4f2be422ed5f52f0fc1c8b6416aebfe0c5a Author: Adam Dickmeiss Date: Tue Aug 21 13:19:44 2007 +0000 Fixed scan continuation line not being set for displayTerm being ste commit c45f2b8efebe64cf3d8d45eae18dc0fd78bc933f Author: Adam Dickmeiss Date: Thu Aug 16 10:09:36 2007 +0000 Added support for SRU scan. commit fadf07ca8b5d84ed21b83e63bfec438666e11587 Author: Mike Taylor Date: Wed Aug 15 17:53:11 2007 +0000 COmment. commit c3a188aecc8906b5e480ec7a6435d5622867457f Author: Adam Dickmeiss Date: Tue Aug 14 12:22:51 2007 +0000 For XML ILL Request, YAZ attaches a dummy XML record as the ItemRequest EXTERNAL in the targetPart structure. commit 7eab93067f8ab95e6b422eedb2d900ca19d4d15e Author: Adam Dickmeiss Date: Tue Aug 14 12:21:14 2007 +0000 For XML ILL Response, YAZ prints Octet aligned buf (presumably XML) if that is the ItemRequest EXTERNAL in the targetPart structure. commit 68c26dc239554eb10af556b3c9d133228e862694 Author: Mike Taylor Date: Mon Aug 13 16:58:46 2007 +0000 Document ccl2rpn setting. commit d534632a867d62e9a443eac694845698916e855a Author: Mike Taylor Date: Mon Aug 13 16:58:27 2007 +0000 Add entity reference-tools-ccl-qualifiers Better section title. commit 45ed8af75a87b399a73a183d77738f3fec21f725 Author: Mike Taylor Date: Mon Aug 13 16:58:02 2007 +0000 Better section title. commit 3ee23524c33a4b3453930c5c05fc8b5f87fa48bb Author: Mike Taylor Date: Mon Aug 13 16:57:40 2007 +0000 Add entity reference-tools-ccl-qualifiers commit 4f8aff36e000a9d90227fd30d9f9dc63e8ffad40 Author: Mike Taylor Date: Mon Aug 13 16:46:47 2007 +0000 Add code to compile CCL qualifiers if specified using . commit b2cbc2112e0f909bc652d65ea9309c8ac918a638 Author: Mike Taylor Date: Mon Aug 13 16:46:19 2007 +0000 Add ccl_transform element to struct gfs_server. commit 0c639102deb9c9264d76f5c065b1f0e33d68751a Author: Mike Taylor Date: Mon Aug 13 16:43:59 2007 +0000 If a CCL qualifier mapping file has been specified, then incoming CCL queries are now transformed into Type-1 before being being handed off to the back-end callback. This is supported for Z39.50 searches, but not for Scan, nor for SRU (where it's impossible to send CCL anyway). commit 7be79ccf5e305ff863d2c093dfe67b0e56137c6d Author: Mike Taylor Date: Mon Aug 13 16:41:59 2007 +0000 Describe CCL support in GFS. commit 57f792928a420aca87e4a633eb5e1d6300746b46 Author: Mike Taylor Date: Mon Aug 13 16:23:30 2007 +0000 Fix minor type mismatch commit 5a52bdfe653f1b89343722aa0294276d9a113e97 Author: Adam Dickmeiss Date: Fri Jul 27 08:05:52 2007 +0000 Fixed bug #1338: GFS crashes when startRecord > number of hits. commit 6cca4572a48148d7d425d1643ddd08d03cedeb69 Author: Adam Dickmeiss Date: Fri Jul 13 09:28:43 2007 +0000 Remoevd unused definition commit d0beadb0e2b57bcef7fd18c3a8ecfcbcd83492d6 Author: Adam Dickmeiss Date: Wed Jul 11 08:35:57 2007 +0000 Attribute spec file. Not in use yet commit a6a6e734143028630b0cfc4af582840fbbbe9c2a Author: Adam Dickmeiss Date: Tue Jul 10 14:41:36 2007 +0000 Make configure produce error if --with-pcap=yes or --with-pcap is given and libpcap is not found. Added --with-pcap to configure in PRM spec. commit 5aaf79c4e4fbf5c5f17f136646e1933b5c989b7d Author: Adam Dickmeiss Date: Tue Jul 10 14:28:37 2007 +0000 For libpcap default search use AC_CHECK_LIB, AC_CHECK_HEADER. For manual libpcap spec, accept all values. But omit -L/-I for /usr. commit 797335bc656ffda99eddacfb5fdf344f716c5f80 Author: Adam Dickmeiss Date: Tue Jul 10 09:42:46 2007 +0000 Removed / in doc install rule to avoid double-slash (cygwin) commit 99f72cd57ac827461dd7d47f469a986c99a7285b Author: Adam Dickmeiss Date: Tue Jul 10 09:40:44 2007 +0000 Removed / in doc install rule to avoid double-slash (cygwin) commit 0068cd7cdfaa73ce838581a166e099f76ea3f86a Author: Adam Dickmeiss Date: Mon Jul 9 17:39:01 2007 +0000 BuildRequire libpcap-devel rather than libpcap commit 9478b64c522bc0314213d485b30a81643e3fed51 Author: Adam Dickmeiss Date: Wed Jul 4 11:44:20 2007 +0000 Changed the Z39.50 ASN.1 a little: make userId in Permissions optional and taskPackageRecords optional in Extended Service update (first version). This is due to at least one implementation which incorrectly omits these. commit 9c8fdeb92bede48bce060ec8ee50624c5622a633 Author: Adam Dickmeiss Date: Wed Jul 4 11:42:14 2007 +0000 ZOOM dumps BER if decoding fails and loglevel zoom is set commit b0af12e407d33fc35d41152e67c568f762e3b41f Author: Adam Dickmeiss Date: Wed Jul 4 09:21:00 2007 +0000 Revert commit 39975667295ec760cc15b863f64e8d5fd74ac209 Author: Adam Dickmeiss Date: Wed Jul 4 09:20:06 2007 +0000 Internal release commit e61253caa274993fbb46c38ea47495b611a1b8d6 Author: Adam Dickmeiss Date: Fri Jun 29 08:09:28 2007 +0000 Version 3.0.9 commit a669063b8341659cd03dc90998997876b7177f4a Author: Adam Dickmeiss Date: Fri Jun 29 08:05:06 2007 +0000 Added support for the use of the older versions or Extended Service Update in ZOOM. To faciliate this, an option "updateVersion" may be set to the version , 1=first, 2=second, 3=third. The third version is what ZOOM C has used so far. And that, obviously, is the default. commit c38061dc0c20aa564b53a78840970f581d795014 Author: Adam Dickmeiss Date: Fri Jun 29 08:03:02 2007 +0000 Bump version to 3.0.9 commit 8fc18939a7972d53f8f8c516ac41df0fe595f780 Author: Adam Dickmeiss Date: Thu Jun 28 07:58:07 2007 +0000 Changed CQL to XCQL conversion, so that element for relation value in modifier is 'comparison' rather than 'relation' so that it conforms to http://www.loc.gov/standards/sru/xml-files/xcql.xsd When a comparison value is omitted, the st.relation in cql_node will be NULL instead of "=". This has the effect that comparison will be omitted in those cases. commit 850094db17968d188737459af6e47c78059e6dc6 Author: Adam Dickmeiss Date: Mon Jun 25 18:42:05 2007 +0000 Ignore new programs commit 1a8d80ad60965cd61c35e90376517c43ba4d6478 Author: Adam Dickmeiss Date: Mon Jun 25 18:41:40 2007 +0000 Upstream 3.0.8 commit 349d7d67bd0ec0a56e885d4b4cadbfc9a4e35661 Author: Adam Dickmeiss Date: Mon Jun 25 18:41:13 2007 +0000 Towards 3.0.8 commit 4c0c2dd79acdadfda1e7fcb85309604d4f59bd02 Author: Adam Dickmeiss Date: Mon Jun 25 18:34:27 2007 +0000 Fixed spelling commit a5a9ecf542c87afaa06315bcb389686bedae07b3 Author: Adam Dickmeiss Date: Mon Jun 25 18:34:09 2007 +0000 Fixed bug #1208: SSL appears to be broken in ZOOM. The problem occurred when cs_rcvconnect returned 1. In this case no event was not generated. Now ZOOM_EVENT_NONE is created. commit 813b245533765d9ff66d35f0d28fdbfc5ba03bcb Author: Adam Dickmeiss Date: Sun Jun 24 19:27:11 2007 +0000 Implemented oid_name_to_dotstring. Added test for OID API. commit 1db93bf6100a499194c8c0e5917d718fe86f0509 Author: Adam Dickmeiss Date: Thu Jun 21 09:00:53 2007 +0000 Allow elementSetName to be specified for ZOOM C record update. commit 8a87b507b01dd8641c0dff2d9e346f54b298c473 Author: Adam Dickmeiss Date: Wed Jun 20 12:55:29 2007 +0000 Allow waitAction to be specified for ZOOM C based for Extended Services. commit 1f8f1e50d305948b3cec6e457e736e05c33a2209 Author: Adam Dickmeiss Date: Sun Jun 17 07:05:42 2007 +0000 Removed definition of docdir. It is set by automake already commit 64ff1eadd3537def2c729baa10c2d677714daa9c Author: Adam Dickmeiss Date: Thu Jun 14 10:44:18 2007 +0000 Fixed NULL ptr reference caused by omitted record syntax OID. Bug introduced in YAZ 3 series. commit 61de996db7f24e944ad8f392cc88241fee2eca41 Author: Adam Dickmeiss Date: Wed Jun 13 08:22:31 2007 +0000 Update to libxml2 2.6.28 / libxslt 1.1.19 commit 16895949a4bd1a0cc5c25b0642cb0c7a1e47ff12 Author: Adam Dickmeiss Date: Mon Jun 11 08:50:57 2007 +0000 Make yaz-ztest returns a certain number of hits if a "numeric" term is supplied. E.g. @attr 1=4 12 - returns 12 hits. A non-numeric term make yaz-ztest return a random hit count as before. commit 9a121950d3e3614bcbf3efdf52ba9aa2a6573ee0 Author: Heikki Levanto Date: Fri Jun 8 10:01:07 2007 +0000 Fixed a silly bug: displayed version info also if -l was specified. Added the missing break statement commit 0941acc604fd0ca61c4e0e25dd887669cfed1547 Author: Adam Dickmeiss Date: Thu Jun 7 08:27:57 2007 +0000 Bump version to 3.0.7 commit 18b038dc608f5fe5d4d30f2193acf15ae0d26b2d Author: Adam Dickmeiss Date: Wed Jun 6 16:42:35 2007 +0000 Towards 3.0.6. commit f24932e1b6b8a76074853086fe1c85f59d1e5122 Author: Adam Dickmeiss Date: Wed Jun 6 16:34:23 2007 +0000 Proper comments and info for dealing with various VS versions commit e6326dd550a7c1c266c084a0795658a04d4142f2 Author: Adam Dickmeiss Date: Wed Jun 6 16:33:19 2007 +0000 Removed WIN32 libs not in use commit 2581c46b3b3f9f26fb74621beb5ede69f8816382 Author: Adam Dickmeiss Date: Wed Jun 6 16:32:34 2007 +0000 Use LONGLONG rather than ULONGLONG on Windows to support good'old MSVC6. commit 26d27c1015a4279c44b09b18e495bc8454f92345 Author: Adam Dickmeiss Date: Tue Jun 5 06:52:23 2007 +0000 Fix potential buffer overrun that could occur if SRU charset name was more than 40 characters in length. commit 4ea32ed8aafed5ffecaeb5fe66ac9bb28f9dd180 Author: Adam Dickmeiss Date: Tue Jun 5 06:42:26 2007 +0000 Using yaz_snprintf (snprintf) rather than sprintf. No real buffer overrun since 511 < FILENAME_MAX in virtually all cases. commit e02ed55f805444f09393408c5779a2be3f5f699f Author: Adam Dickmeiss Date: Tue Jun 5 06:40:28 2007 +0000 Update usage msg commit 16ccd387f153b3e836f068b9ec4e032979d99393 Author: Adam Dickmeiss Date: Tue Jun 5 06:23:07 2007 +0000 Fix buffer overrun by one in the setting of l_prefix/l_prefix2 commit c6c31633806f578abea7a1c58e9b837c42150709 Author: Adam Dickmeiss Date: Tue Jun 5 06:22:19 2007 +0000 Exercise yaz_log_init_prefix commit bbc595bc456f198198ae96af6aa8b86ae2721e36 Author: Adam Dickmeiss Date: Tue Jun 5 05:58:16 2007 +0000 Fixed potential buffer overrun in yaz_log for YLOG_ERRNO messages. commit 963c246750e0f77d996fa4d9e1bc7cbe1ef9c49b Author: Adam Dickmeiss Date: Tue Jun 5 05:42:07 2007 +0000 Properly null-terminate Unix-domain socket path. Thanks to Marc Espie for spotting this. commit c6cccdaf2abfed2fd53b43e079a9dc47bc35be6b Author: Adam Dickmeiss Date: Mon Jun 4 09:18:09 2007 +0000 Fix NULL ptr reference which occurred for unknown diagset receieved. commit 1ed2381d1ea05352922d149a98257eb1c55a29c0 Author: Adam Dickmeiss Date: Sun Jun 3 15:55:50 2007 +0000 Order options and usage info commit 8cd0ea1bdddd37a48526a3e52045cada428379c5 Author: Adam Dickmeiss Date: Sun Jun 3 14:59:33 2007 +0000 yaz-client now reads commands from file given by option -f if specified; then tries to read .yazclientrc in current directory. Failing that, it reads .yazclientrc from user's home directory. commit e487ea875fb467142eb646c8efadcada30d4e846 Author: Adam Dickmeiss Date: Sun Jun 3 10:10:07 2007 +0000 Added Deb/RPM package for yaz-illclient. Closes #1155. commit 8cb2e2a9699826bbc9a09d9eea1723cec3cd418c Author: Adam Dickmeiss Date: Sun Jun 3 09:57:25 2007 +0000 Install yaz-illclient in PREFIX/bin commit cf1cd05a005dddace5aadb0cf2913dad0caec7d5 Author: Adam Dickmeiss Date: Sun Jun 3 09:56:50 2007 +0000 Added yaz-illclient man page. commit 641c4961572274353f39c09ed4063eb69e401996 Author: Adam Dickmeiss Date: Sun Jun 3 09:34:43 2007 +0000 Embed manifest file in EXE/DLLs for YAZ. But only if USE_MANIFEST is set to 1. commit 5fca2e8ca1775ad5adceb1568508d911d646a01b Author: Adam Dickmeiss Date: Sun Jun 3 08:06:31 2007 +0000 Fixed bug #1157: yaz-client does not read .yazclientrc from current directory. yaz-client now reads ·yazclient from current directory; failing that ~/.yazclientrc is read. commit 4003509be48a195f3da7d863f47bc5984168acfe Author: Adam Dickmeiss Date: Sat Jun 2 20:57:12 2007 +0000 3.0.5 for windows commit fc9ef9d18c52b651a6994b34d1a6c37640dfaef2 Author: Adam Dickmeiss Date: Thu May 31 12:14:02 2007 +0000 Using informaltable rather than table for list of Object Identifiers. This is to avoid truncation of the (long) table. Combine OID and Constant into one column. commit eede2a3b7257fc9a510471c2e9c52176c1444362 Author: Adam Dickmeiss Date: Thu May 31 09:45:14 2007 +0000 Fixed bug #1151: Doc's don't reflect new oid layout. Current backend.h structs copied into synopsys sections and minor wording changes about OIDs were changed. commit 392f31adbbc81e6d170003fcb60554ee5a8ef28b Author: Adam Dickmeiss Date: Thu May 31 08:01:30 2007 +0000 No need for -lnsl for wrap commit 0d928faa541ca71cbf230aff4a41bf11f2cb8e13 Author: Adam Dickmeiss Date: Thu May 31 07:40:25 2007 +0000 Internal release. commit 7e1f377cd635916be26b2240d996889129d0f249 Author: Adam Dickmeiss Date: Thu May 31 07:38:13 2007 +0000 Added support for correlationInfo Note and ID for Record Update via ZOOM C. commit 3ebf9c87afb52af8cc6e696ffbb040aeca68b3f4 Author: Adam Dickmeiss Date: Wed May 30 21:56:59 2007 +0000 Changed the way yaz-client encodes charset negotiation information to target when no negoatitionCharset is set by user using command negcharset. In YAZ 3.0.0 and later the negotation information was simply omitted. Now the OriginProposal is sent anway but with proposedCharSets and proposedlanaguages omitted (both are optional). YAZ Frontend server is also modified to deal with this: omitted proposedCharSets in the OriginProposal will make the frontend server return default character set for target if that is supplied by the backend init handler (member query_charset). commit a51cfbf3f8ca5c487fc8bbcecb4e456a08162a33 Author: Heikki Levanto Date: Wed May 30 13:59:04 2007 +0000 Some old changes were not committed properly commit f421f15a069d0038e5552b81d6d48bb2d3680732 Author: Adam Dickmeiss Date: Wed May 30 08:42:01 2007 +0000 Prepare for new internal deb package. commit 7ab87517b1d480eb94e95658ab9acbe8ce24648e Author: Adam Dickmeiss Date: Wed May 30 08:40:26 2007 +0000 Added yaz-client command querycharset which specifies character set for query terms for Z39.50 RPN queries and Z39.50 Scan Requests (termListAndStartPoint). commit b56e2d9e43985fa33d1d7ee8d0c9b1ed69eba8d3 Author: Adam Dickmeiss Date: Wed May 30 08:22:03 2007 +0000 Charset ISO5428:1984 is an alias for ISO5428-1984. commit f60c0db8c4379047cdd75e2be50549abc0a1c74a Author: Adam Dickmeiss Date: Wed May 30 08:12:16 2007 +0000 Implemented a way to perform scan in a result set using Z39.50. This is achieved by attaching the result set name in the characterInfo (type InternationalString) of OtherInformation in the Scan Request PDU. The result set is identified in the otherinformation by the new OID: USERINFO, Z3950_PREFIX.10.1000.81.4, "Scan-Set This allows for scan in result set and faceted search . Zebra did some of this in the APT term using attribute type 8 and value being result set. Using the OtherInformation approach for this is cleaner and easier to work with in proxies and the like. This facility can be used in yaz-client using new command setscan which takes a result set as first commit d554f7894acd70ee293d7c11294244bca870a6de Author: Adam Dickmeiss Date: Wed May 30 08:04:28 2007 +0000 Removed NMEM debug code commit f3c256e67f73eee9cace104051db51bfd13166b4 Author: Marc Cromme Date: Fri May 25 16:19:46 2007 +0000 corrected typo commit a0ae7e668314833310c9197dc451f893ec9c5731 Author: Adam Dickmeiss Date: Thu May 24 10:18:36 2007 +0000 Function encode_uri_char does not hex encode unreserved chars (RFC 2396 section 2.3). commit 49eef90be08a7a201e112dacd5e358d8776c9117 Author: Adam Dickmeiss Date: Wed May 23 13:16:32 2007 +0000 Bump version to 3.0.5-1 commit 337f11f176f339be5957832bb418b6b39a6c1101 Author: Adam Dickmeiss Date: Wed May 23 13:11:11 2007 +0000 Changed decoding of SRU XML packed records to deal with servers that have recordData with XML data with multiple root nodes. Also make comparison for recordPacking case insensitive. Again, one server returns "XML" where others return "xml". commit ffc156e81106f536a43f949379cee95b16e0c957 Author: Adam Dickmeiss Date: Wed May 23 12:58:59 2007 +0000 Change comment about second arg of yaz_matchstr commit 1e49cc7bdcdeb5cb9e7b2e709c5322acccec90df Author: Adam Dickmeiss Date: Wed May 23 11:54:46 2007 +0000 For SRU responses allow Content-Type application/xml as well as text/xml. commit 0bfb420c37acbbdbf44d24fe7c121fdf630190b9 Author: Adam Dickmeiss Date: Wed May 23 08:53:20 2007 +0000 Gary Anderson to credits commit 5d13a8684c8637334d17f2b0577fc511aa275477 Author: Adam Dickmeiss Date: Wed May 23 08:50:11 2007 +0000 Check for malformed UTF-8 characters. Thanks for Gary Anderson for pointing this out. commit 621c7fe7d7da36267384afe2d13c0309db293856 Author: Adam Dickmeiss Date: Tue May 22 11:10:08 2007 +0000 Use entity idcommon rather than common. Fix acronym entities. commit 9c75e92604fae1efd7137d085dd2281e7886345b Author: Adam Dickmeiss Date: Mon May 21 12:18:25 2007 +0000 Towards 3.0.4 commit 9e7bca777f3d5a7108fc06b203fbf890848be8b3 Author: Adam Dickmeiss Date: Mon May 21 11:51:01 2007 +0000 Fixed missing yaz_iconv reset call in odr_iconv_string in decoding phase. commit 1dfcc4cd55c5fb48b21b2afc08f87b4f1ca6f1f7 Author: Adam Dickmeiss Date: Wed May 16 10:47:49 2007 +0000 Tokenizer skips comments (# by default). commit 8fa6874f7c143499d03c5fdcfbc50bd01a31a58c Author: Adam Dickmeiss Date: Wed May 16 10:47:14 2007 +0000 Bump to version 3.0.3 commit 3c68f938d4100786cd27bf3dba5dfdea8d3740cd Author: Mike Taylor Date: Wed May 9 12:17:54 2007 +0000 Ignore generated std-oid-table.xml commit 811f0d2749a66ec13cd616898305ef38cd89da62 Author: Adam Dickmeiss Date: Wed May 9 11:04:35 2007 +0000 libyaz3-dev should conflict with libyaz2-dev commit d81bbb15578f13cc16f3599c11ba8e8d70fd6633 Author: Adam Dickmeiss Date: Wed May 9 08:10:30 2007 +0000 libyaz3-dev conflicts with libyaz2-dev commit 6578641e0e29e0c36fb29d09a98310dc42071d97 Author: Adam Dickmeiss Date: Tue May 8 08:39:00 2007 +0000 yaz3.lib part of devel commit 66db89c95f60b6d5a59703b7d568873681d1fca0 Author: Adam Dickmeiss Date: Tue May 8 08:27:45 2007 +0000 API version 3.0.2 commit 02ebf1b5aa8c7371c2678663fd1c13d01d80955c Author: Adam Dickmeiss Date: Tue May 8 08:27:13 2007 +0000 Towards 3.0.2. commit 7a98e9bfbb9d5fe7d44822a9838e3becbdce9363 Author: Adam Dickmeiss Date: Tue May 8 08:22:35 2007 +0000 For OIDs use Odr_oid type everywhere, i.e. do not assume Odr_oid=int. For OID class, use oid_class consistently. commit 38ce2c71a8aa497a5c445dd36d12d0d535dea79a Author: Adam Dickmeiss Date: Mon May 7 13:18:32 2007 +0000 List of built-in OIDs in documentation. commit 38629f9fd1b8802c986dcc32ee85d83b2760cd06 Author: Adam Dickmeiss Date: Mon May 7 12:06:09 2007 +0000 Functions yaz_oid_db_{new,destroy} in public header commit ef6afa1a84f2a0a05e94fd971af0ce0278594217 Author: Adam Dickmeiss Date: Mon May 7 12:04:06 2007 +0000 Fixed description commit 160e2c7f352ccad6728f1f972f373e862cee8644 Author: Adam Dickmeiss Date: Mon May 7 07:17:29 2007 +0000 Bump version to 3.0.1 commit 89614302a697fcc4f621142767fca1167bca46be Author: Adam Dickmeiss Date: Sun May 6 20:42:42 2007 +0000 Spell fix commit f1fb9790df4017c2b2e9b6fe1a281913da36b3fb Author: Adam Dickmeiss Date: Sun May 6 20:41:22 2007 +0000 Summarize changes commit cc4a5d8761e524821c67a4b13847ec84ba14f8ac Author: Adam Dickmeiss Date: Sun May 6 20:35:43 2007 +0000 Fixed type cast commit 0d19fa8f289c9f99f7b06275beac41fc08e76127 Author: Adam Dickmeiss Date: Sun May 6 20:27:14 2007 +0000 Import library now called yaz3.lib (yaz3d.lib for debug version). commit 8ca37f0ae9d71ebe21ad834c904479b4091e641f Author: Adam Dickmeiss Date: Sun May 6 20:18:29 2007 +0000 Define OID_STD_H no longer needed for oid_std.c code commit fe507b6b15788a3a8e58063d9dae52532a5229a5 Author: Adam Dickmeiss Date: Sun May 6 20:12:19 2007 +0000 Code updates which makes things compile as C++. Mostly type casts were added. But the exercise also revealed places where YAZ_BEGIN_CDEC was omitted. commit b8ab484f71da48a13342fff3ebd60efd23504681 Author: Adam Dickmeiss Date: Sat May 5 11:55:22 2007 +0000 Copying user,group,password + preferredMessage, maximumRecordSize when ZOOM_connection_connect is invoked; to ensure that if we send init request later those values are used. commit 0e664fbee06e451911bf53d2df4e541cbcecd495 Author: Adam Dickmeiss Date: Sat May 5 11:53:26 2007 +0000 Added ZOOM_options_dup. commit 4a40ca16622999fc7a99557a9e313400804287ad Author: Adam Dickmeiss Date: Sat May 5 10:26:31 2007 +0000 Fixed OIDs for SUTRS and Explain (external handling) commit 3ca2b225d05541f30950ed1d6a0da315d7832bed Author: Adam Dickmeiss Date: Fri May 4 17:16:21 2007 +0000 Indentation. commit 6f290732812ae97eb1df1c0af8da4916cd02063a Author: Adam Dickmeiss Date: Fri May 4 12:36:56 2007 +0000 Fixed oid_db.h fname commit c7cff6778b8d69f6e3c41dbfd939f44436911b90 Author: Adam Dickmeiss Date: Fri May 4 12:24:15 2007 +0000 OID documentation update. commit 955374c92f02d9714ccd593cc03f4394f45b2053 Author: Adam Dickmeiss Date: Fri May 4 12:23:54 2007 +0000 Removed dead code section commit 1dd26aed79c4c32a7a8b263651ddcd0ab88dbaf5 Author: Adam Dickmeiss Date: Fri May 4 08:06:24 2007 +0000 Added a few ids for sections commit 20f83e699d4868d263393996bd4b98fee045e360 Author: Adam Dickmeiss Date: Fri May 4 08:03:40 2007 +0000 Documentation updates for new names of dll/so files. commit cd6aeaa68dceee3c268dbb354fd32aadbc9fc942 Author: Adam Dickmeiss Date: Thu May 3 22:20:45 2007 +0000 Using old C style comments. commit 4991a9d63f060d93809d1efcb8b7b0776db41ab1 Author: Adam Dickmeiss Date: Thu May 3 22:18:13 2007 +0000 Fixed beta small in ISO5428 conversion commit b0d1f433788c844fc82a715be4e5a34db9dcbe3a Author: Adam Dickmeiss Date: Thu May 3 13:14:41 2007 +0000 Added partial support for ISO5428-1984, which is the "Greek alphabet coded character set for bibliographic information interchange". By Giannis Kosmas. commit 0b2c97b7e0af33f239cfdfebbc200f7eb5c9fcdd Author: Heikki Levanto Date: Thu May 3 08:35:10 2007 +0000 Undoing a file rename commit 6af7e3e45c77ed01ad75c0c4840576374718168a Author: Heikki Levanto Date: Thu May 3 08:34:52 2007 +0000 More asn1 for oclc commit 08f7b85c9ee7b4146cf61998d54ebd2cea93e89a Author: Adam Dickmeiss Date: Thu May 3 08:04:10 2007 +0000 Fix OID for record update command commit 384ca083ab338aa64a8f9ebf06b9148ad9f9cb7b Author: Adam Dickmeiss Date: Wed May 2 12:50:06 2007 +0000 API version 3.0.0 commit d6ff4a5227a71cb5ca0c99a6574067744afcbad0 Author: Adam Dickmeiss Date: Wed May 2 12:39:35 2007 +0000 Minor wording change. commit e46a29eb6ea3375d808cdb249bbcd4a2bc2bb427 Author: Adam Dickmeiss Date: Wed May 2 12:37:15 2007 +0000 Fixed syntax error. commit 38303a62b339c9242f028a55ec16e965669952e3 Author: Adam Dickmeiss Date: Wed May 2 12:36:34 2007 +0000 Allow a server to tell whether records uses same encoding as charset given by query_charset. commit af019cc83166ab755de4b9c9133c23caacc2f103 Author: Adam Dickmeiss Date: Wed May 2 11:53:25 2007 +0000 Added new member 'query_charset' for bend_initrequest structure. A backend init handler should set this member to its native character set for query terms. When defined, the frontend server logic will announce this character set to a client if the negotiationModel bit is set by the client. ALL server implementors are encouraged to specify this. If they don't, a warning is issued. commit 5ee8b8431f852d06d1963134d38c1bb8fe6343fa Author: Adam Dickmeiss Date: Wed May 2 11:51:54 2007 +0000 The negotiationModel bit is now set by default for init requests. This will allow our servers to present the character set that they support - even in case of no negotiation information from the client side. commit 4ea19fdd48db6b73584c5803313e537129001769 Author: Adam Dickmeiss Date: Wed May 2 11:31:59 2007 +0000 Added flush for yaz_iconv use commit 23511a86ab565d5a4ce3c8f5924a49e9d310ba98 Author: Mike Taylor Date: Tue May 1 22:23:30 2007 +0000 Note on SRU and SRW target strings. commit b3f6b8075dc3a63f46e28d0385ff2d102b841b58 Author: Adam Dickmeiss Date: Tue May 1 21:24:03 2007 +0000 Updated RPM for YAZ 3. Packages: libyaz3, libyaz3-devel, yaz, yaz-ziffy. commit 0f942db2d438ce7c125810a19e29d5637fc7f3f2 Author: Adam Dickmeiss Date: Tue May 1 12:54:44 2007 +0000 Added a few casts to throw away const commit d65ca0fdac8b4cddb7b6da4568a55b8e52d44e64 Author: Adam Dickmeiss Date: Tue May 1 12:48:07 2007 +0000 Build yaz3.dll rather than yaz.dll. New sources commit 1e351c10303ffb6084e6a01eb843409c69f390c2 Author: Adam Dickmeiss Date: Tue May 1 12:35:17 2007 +0000 Towards YAZ 3.0.0 commit 1da546504f6864048f4e0fb07b707171d252c9e9 Author: Adam Dickmeiss Date: Tue May 1 12:28:03 2007 +0000 More changes commit 73f6b7a6b12a1e0e54c9cc360f552a56726d75fd Author: Adam Dickmeiss Date: Tue May 1 12:22:10 2007 +0000 Moved stop word support code to separate ccl_stop_words.c and encapsulated the private info in opaque ptr ccl_stop_words_t. commit f37d3f03799b8d9979472111153cf3bdc9d5a739 Author: Adam Dickmeiss Date: Tue May 1 12:12:34 2007 +0000 In conversion from CCL RPN to RQF handle the empty string properly. commit fdb80724c17104b31f80527cca19b433f6c2fc33 Author: Adam Dickmeiss Date: Mon Apr 30 19:55:39 2007 +0000 Added stop word support for CCL parser. These are configured with @stop.field t1 t2 t3 .. All terms matching list of t1, t2, .. in field are removed from resulting RPN. commit f6ae71f4b4a45b3989700f5e1a73c40ccd53040a Author: Adam Dickmeiss Date: Mon Apr 30 19:50:22 2007 +0000 Destroy bibset upon completion commit 78b138b80fadc817d621f0a692fca857ee31399b Author: Adam Dickmeiss Date: Mon Apr 30 11:33:49 2007 +0000 Restructure qualifier handling so we can have more rules per-field - such as stop word handling. commit 55ca7cdb58b098d348054917296c0fe2c9cb1580 Author: Adam Dickmeiss Date: Mon Apr 30 08:29:07 2007 +0000 New ZOOM C option, "rpnCharset", which allows client-side conversion of terms in RPN queries. commit aa60dbcd982a4dbd52870120ef34b91a74d63274 Author: Adam Dickmeiss Date: Fri Apr 27 10:09:44 2007 +0000 Separate tokenizer stuff into parsing and configuration types. commit 6f95cfbbdf2f549ce23f511bc406e3d74446ea2b Author: Adam Dickmeiss Date: Fri Apr 27 09:50:35 2007 +0000 Added file description commit 0725af5d06bfcdaf9888886f04c63810c1d8cf72 Author: Adam Dickmeiss Date: Fri Apr 27 09:48:28 2007 +0000 Fix leak in test commit 048b6fc3d9fca5ac8fad4943031db503170e928d Author: Adam Dickmeiss Date: Thu Apr 26 22:11:32 2007 +0000 Doxygen frindly comments. Minor simplications. commit 1d8e2adb8e5cfeaf77a84f5f3277785bb24cdd56 Author: Adam Dickmeiss Date: Thu Apr 26 21:45:16 2007 +0000 Added functions to create CCL RPN nodes. Added small tokenizer utility (tokenizer.[ch]). CCL qualifier spec parsed using tokenizer which allows more flexible notation in terms of white-space etc. commit d4644bfe208fd1ba9158c6afb0ca616bf63e8357 Author: Adam Dickmeiss Date: Thu Apr 26 21:41:57 2007 +0000 Fixed problem with double free of memory commit 5465ce3572dee9b6dcbea43ebf02d9d548b6644d Author: Adam Dickmeiss Date: Thu Apr 26 09:11:56 2007 +0000 Various clean up. Removed function ccl_parset_get_bibset. Removed ccl_strdup and use xstrdup instead. commit de80462103c0fc554c8fa40827894f92fa9d8fe6 Author: Adam Dickmeiss Date: Wed Apr 25 20:52:18 2007 +0000 Clean-up the CCL API. Moved some internal structures from ccl.h to private header cclp.h. Changed ccl_parser_create so that a Bibset must be supplied. Removed tokenize API from ccl.h - including ccl_parser_find. This is replaced by ccl_parser_find_str which takes a string instead. commit 544ac779d4c6b5d3d07f54486a7cb851bd6f74ea Author: Adam Dickmeiss Date: Wed Apr 25 20:50:56 2007 +0000 Removed ccl_pr_tree_as_qrpn . Implement ccl_pr_tree in terms of ccl_pquery_indent. Saves roughly 50 lines of code (DRY). commit a2b00156f7c2c41c67a43deeeaf8b3621cc9643b Author: Heikki Levanto Date: Wed Apr 25 16:51:47 2007 +0000 Command-line params and params from a param file now go straight into the ILL request. The OCLC test server seems to accept the requesters now, complaining of a missing item (rightly so). commit 79c2e0067287fd81143627819ee336fcff4a32ab Author: Adam Dickmeiss Date: Wed Apr 25 13:49:52 2007 +0000 Fixed typo WRT Update OIDS commit 1bc07394aa02293c85dd781329a5a161e400381b Author: Adam Dickmeiss Date: Tue Apr 24 12:57:52 2007 +0000 Added example of qualifier alias commit 53862bf9e7756842158d38b1bb25f2c094b8d3d7 Author: Adam Dickmeiss Date: Tue Apr 24 12:55:15 2007 +0000 Windows build. commit 517b3b01c47fb87ed9656ee9b184eda54b6d0c99 Author: Adam Dickmeiss Date: Tue Apr 24 12:54:42 2007 +0000 Added definition of YAZ_IMPORT for DLL import on Windows commit c3ad59ea201aa090eeffecb0f85fedc18bf658be Author: Adam Dickmeiss Date: Tue Apr 24 12:53:56 2007 +0000 Added YAZ_EXPORT for new functions commit 8183a66090680db8b95d2f7060ea171ef3533c38 Author: Adam Dickmeiss Date: Tue Apr 24 09:29:34 2007 +0000 Fixed call to ZOOM_resultset_sort1 commit 7e1b1165cc76041a3ba611eb0ef97cdcbeec466a Author: Mike Taylor Date: Mon Apr 23 16:15:11 2007 +0000 Ignore yaz-illclient commit a766a381d38e67255fea3a9e9c4b818d49b73936 Author: Adam Dickmeiss Date: Wed Apr 18 18:47:51 2007 +0000 Ignore generated files oclc-ill-req-ext.[ch]. commit 59bb4eccfdc42a25d5bb1d3c35d6deaebf1fb805 Author: Adam Dickmeiss Date: Wed Apr 18 18:46:37 2007 +0000 Fixed missing thread libs in output of 'yaz-config --lalibs threads'. commit 965d5409daba88b43bbffb5bed90b58383c0cc3f Author: Adam Dickmeiss Date: Wed Apr 18 13:40:19 2007 +0000 Added new option 'static' for yaz-config which makes 'yaz-config --libs' returns static libs rather than shared libs for in-source compilations. This is to make Pazpar2 work for local builds when YAZ is built both statically and with shared objects. We have not seen this problem before because most other applications are built with Libtool. And these that aren't, such as PHP / Perl extensions deal with shared objects fine. commit b42021d3f227347b9ec107a28bf52fc7e2578fec Author: Heikki Levanto Date: Wed Apr 18 13:21:46 2007 +0000 Added the oclc-spcific extension part too. Didn't help. commit fec4b2a334086855ba77b531ffee06520bf96221 Author: Mike Taylor Date: Wed Apr 18 11:50:47 2007 +0000 t_test() arguments. commit c618d4743a6dff2764d4a95d8bcf4fc441fcd8db Author: Adam Dickmeiss Date: Wed Apr 18 08:08:02 2007 +0000 Doxygen comments in OID generated files. commit 68832d0951d7f4707b6140b2001134c1a52b878c Author: Adam Dickmeiss Date: Wed Apr 18 07:34:35 2007 +0000 Added ASN.1 and CODEC for OCLC ILL Request Extension. commit b2b487571a47cd30fdcc93354ab696a0bd3a78f5 Author: Adam Dickmeiss Date: Wed Apr 18 07:17:19 2007 +0000 No warnings commit dc4414aeda179bc8ebe3fc46ac53e4a24d265d16 Author: Adam Dickmeiss Date: Tue Apr 17 20:26:18 2007 +0000 Split YAZ library into two libs : libyaz.la and libyaz_server.la. libyaz.la is the core of YAZ except the generic frontend server and does not depend on POSIX threads anymore. libyaz_server.la is the generic frontend server facilities and uses POSIX thread functionality if available. The libyaz.la no longer depends on POSIX threads because the number of global structures is limited. NMEM no longer re-uses blocks between threads ; it simply free's memory immediately but allocates in "large" chunks as usual. We don't expect any performance penalties because of this. The yaz_log system is still using a global log_level so caution must be taken when modifying it with yaz_log_init_.. + yaz_log_mask_str. This, however, should not cause any trouble because these functions are called during initialization of application code anyway. `yaz-config --libs server` returns libs for server applications; `yaz-config --libs` returns libs for non-server applications. commit 926baf66afa1e3646b2e456adeb66c623c9aca9f Author: Heikki Levanto Date: Tue Apr 17 13:23:02 2007 +0000 Attempted to encode the oclc-specific login info. Doesn't seem to work, gives the same error as when it was not there at all. commit 35cded4faea1982245adfd947d73316453beb7ec Author: Adam Dickmeiss Date: Tue Apr 17 08:15:15 2007 +0000 Auto-generated files specified separately commit d2be1034a4eea6cf6091bf79c6f8a3e0c1a71660 Author: Adam Dickmeiss Date: Tue Apr 17 07:37:58 2007 +0000 Fixed bug #1052: oid_std.[ch] not made automatically. commit 6bba4d13ecf76fc9ccb330855376229a6b254505 Author: Adam Dickmeiss Date: Mon Apr 16 22:21:48 2007 +0000 Ignore oid_std.h commit 06ef98ae2376ef926be2f01193a36d87b9f3ba87 Author: Adam Dickmeiss Date: Mon Apr 16 22:21:27 2007 +0000 Ignore oid_std.c commit 3cdfbd27dfc8dd15619f127ae78bf0f71b27dd6d Author: Adam Dickmeiss Date: Mon Apr 16 21:53:08 2007 +0000 Generate built-in OIDs from oid.csv. commit 4ef54cf7f0c56ebb62f1a4c9bfecc50feca18656 Author: Heikki Levanto Date: Mon Apr 16 15:33:51 2007 +0000 Committing the raw version into cvs, just to have a backup. It can send an empty request, and parse incoming error messages. Filling actual data to the request still missing, as is extracting useful responses (if any). commit 2ccd19bd425d4d8b26dbdedf072ad618de7db94a Author: Adam Dickmeiss Date: Mon Apr 16 11:15:51 2007 +0000 OIDs in a .csv-file. commit 96c68285e01bfb51a4d03cede9dd1a673c854d30 Author: Adam Dickmeiss Date: Mon Apr 16 08:43:08 2007 +0000 Added functions to return const known OIDs commit 99ab8b6123275a614abfa69a13ce4f7df59aa7d7 Author: Adam Dickmeiss Date: Fri Apr 13 13:58:00 2007 +0000 Make Variant-1 OID definition. Fix OID for Espec-1 commit cd3162337ff8918cd2d997f79ca9da20b8c70855 Author: Adam Dickmeiss Date: Fri Apr 13 10:24:32 2007 +0000 Ensure YAZ' include files is listed first in output of yaz-config --cflags. commit b8d35dbb7de11dcfe5bc76fb2a353012baa5b63e Author: Adam Dickmeiss Date: Fri Apr 13 09:55:41 2007 +0000 Added utilities z_ext_record_{xml,sutrs,usmarc}. commit 9b1c48867ad6fafd2bfd1a2ba4893129953990e9 Author: Adam Dickmeiss Date: Fri Apr 13 09:55:21 2007 +0000 Added inclusion of oid_db.h commit 9daca88ec6081bf49bb53b4dd400ee6d40c04112 Author: Adam Dickmeiss Date: Fri Apr 13 07:04:42 2007 +0000 Function oid_dotstring_to_oid returns -1 if OID dot-string is ill-formed commit 54cc1be5702450c1666b2dda9d0248c36650318a Author: Adam Dickmeiss Date: Fri Apr 13 06:51:57 2007 +0000 Added inclusion of yaz/oid_util.h commit 183b1a799a1727586468b3867d986b93df3fdc7c Author: Adam Dickmeiss Date: Fri Apr 13 06:48:35 2007 +0000 Removed inclusion of yaz/oid.h commit be821514c869d68186361b5aab6bbfd1aa60e087 Author: Adam Dickmeiss Date: Thu Apr 12 20:47:27 2007 +0000 Added function yaz_oid_add which adds custom OID entry to database. Re-implemented 'register_oid' for yaz-client. commit aa29dbf34d5bb3cbf5b26ee3adfbaf9f9b4f3c67 Author: Adam Dickmeiss Date: Thu Apr 12 17:50:26 2007 +0000 Removed dead functions commit 4293b4d2f870120406df23706cc1fb5da9aa69af Author: Adam Dickmeiss Date: Thu Apr 12 13:53:33 2007 +0000 Bump version to 2.1.99.2 commit 7a4064cd15f6c6b34c1180e1bc51f0d0e90da320 Author: Adam Dickmeiss Date: Thu Apr 12 13:52:56 2007 +0000 New OID database - with public definitions in oid_db.h. Removed old OID database including the head oid.h and definitions such as enum oid_value and struct oident. The new OID database uses the same string names as before but the 'protocol' is gone. There are now only two representations raw OID (int *) and string. Functions with prefix yaz_string_to_oid converts from string to OID; functions with prefix yaz_oid_to_string converts the other way. commit 3bfe867a001cb4e4f88d47541f77a21027719bd5 Author: Adam Dickmeiss Date: Tue Apr 10 14:42:31 2007 +0000 Added test for query charset converter. commit e93edd27b69830dbd41cf2982ebb1f0d2847f207 Author: Mike Taylor Date: Thu Mar 29 11:14:47 2007 +0000 CQL translation fix. commit 74805d78e64e94e3b5e876c1fd2c34c294f43e28 Author: Mike Taylor Date: Thu Mar 29 11:14:11 2007 +0000 Change to emit_term(): when a term has the /regexp relation modifier, do not process it for leading and trailing "^" and "*", which have quite different meanings in regular expressions. commit 900aea38294d60d4cbf1153f480b27155d292c7a Author: Mike Taylor Date: Wed Mar 28 16:35:47 2007 +0000 Explicitly initialise cqltrans to 0 commit 4cd3f359d12ddfecd1f112cb81235a70a67f8665 Author: Adam Dickmeiss Date: Thu Mar 22 09:13:13 2007 +0000 Fixed tid declaration for non-threaded mode commit 62fd62f25a6893d042c4c87f8c770929fd8cf95d Author: Adam Dickmeiss Date: Wed Mar 21 19:47:28 2007 +0000 Added skeleton for query charset conversion. Bug #977. commit 82aa6fe37332e0b2a79a14f3d50c3c9f54034817 Author: Adam Dickmeiss Date: Wed Mar 21 11:27:46 2007 +0000 Revert ZOOM API changes. commit abf1f0df70aaf39735fa6cca208bd7c480da7e5e Author: Adam Dickmeiss Date: Wed Mar 21 10:22:31 2007 +0000 Get rid of 512 PQF string size limitation in cql2pqf (part of ZOOM C). commit 0889197c3664ce1600740c024f905869b6423593 Author: Adam Dickmeiss Date: Wed Mar 21 10:12:09 2007 +0000 Fix prototype for cql_transform commit 5e39adf043d8a0642a8af60b1ef54e7f90886fae Author: Adam Dickmeiss Date: Wed Mar 21 09:23:11 2007 +0000 Fix bad memory reference in CQL to PQF conversion which occurred when error 'Too many characters in query' was issued. commit fc07d9fb0a2fbaa0336c0f1da07b3a56eac5da48 Author: Adam Dickmeiss Date: Wed Mar 21 08:37:57 2007 +0000 Added yaz_iconv flush. commit d38ee71c31b49ad13164039140ed47d18e9432cb Author: Adam Dickmeiss Date: Tue Mar 20 21:37:31 2007 +0000 Attempted fix of bug #976: Segfault in yaz_iconv. The yaz_iconv function write handlers no longer carries a 'last' parameter. This will make yaz_iconv flush "less" characters. A flush is performed by call to yaz_iconv(cd, 0, 0, &outbut, &outbytesleft) . commit aaf2ab15830321d9db33cd2e47f739fb52324110 Author: Adam Dickmeiss Date: Mon Mar 19 22:17:41 2007 +0000 More wrbuf_buf woes. commit db93359f0cbf9a1e9dc81ea05f7b8662f843ae3d Author: Adam Dickmeiss Date: Mon Mar 19 21:08:13 2007 +0000 Moved more members of public struct odr (ODR*) to struct Odr_private. commit 72da3f05a07602494a978c266f473bb0b4c7841f Author: Adam Dickmeiss Date: Mon Mar 19 21:07:35 2007 +0000 Definition of wrbuf_diags moved to querytowrbuf.h. Function wrbuf_put_zquery removed, because function yaz_query_to_wrbuf does the same. commit 6cce919ae864cc0da9c6068b4adec45d5ec0c278 Author: Adam Dickmeiss Date: Mon Mar 19 20:58:47 2007 +0000 Notes on ZOOM changes commit e20877bdeb227b7c4179b6defa3eb5b44599d707 Author: Adam Dickmeiss Date: Mon Mar 19 20:58:34 2007 +0000 API changes to ZOOM. Functions for setting options returns int, rather than void, so we have a way to flag unknown options. ZOOM_resultset_sort1 has become "the" ZOOM_resultset_sort. (and old ZOOM_resultset_sort is removed). ZOOM_connection_scan1 removed. The generic scan is ZOOM_connection_scan and the ZOOM_connection_scan_pqf is a handy short-hand taking a PQF string as argument. commit 401da56d4a26f687cd42024bdef6f29a29bb7663 Author: Adam Dickmeiss Date: Mon Mar 19 14:40:06 2007 +0000 API changes to WRBUF. wrbuf_free removed; replaced by wrbuf_destroy. And wrbuf_puts no longer appends '\0'. Use wrbuf_cstr to get C-string out. Deprecated functions for yaz_marc-removed. Changed prototype of yaz_marc_decode_buf: const char for result and size_t for rsize. commit 728ffb55e072933a1208780272e545c51f080e90 Author: Adam Dickmeiss Date: Mon Mar 19 13:32:40 2007 +0000 Note on branch commit 7ea4c2e808b88500ad3148483d6a15a7c18a863c Author: Adam Dickmeiss Date: Mon Mar 19 13:32:11 2007 +0000 New packges libyaz3, libyaz3-dev with libyaz so version 3. commit 93f8228f2b4720e430e8e7c24ff4478c2b7cc001 Author: Adam Dickmeiss Date: Mon Mar 19 13:31:48 2007 +0000 libyaz major so version=3 commit 1d82c6ccef88862d57960fe8c1194ff561358172 Author: Adam Dickmeiss Date: Mon Mar 19 13:31:05 2007 +0000 Bump version to 2.1.99 commit 97b694eca0f3b0669e57bcca37d6a7bcf3766d58 Author: Adam Dickmeiss Date: Mon Mar 19 12:54:58 2007 +0000 Disable lOG_-defines by default commit e9b8966d4ef4572814a7e185aa7ac618761f422d Author: Adam Dickmeiss Date: Sun Mar 18 13:00:37 2007 +0000 Added continuation line support for MARC line format reader. commit 3eba413ef7e80467c7831731a8e35c733e447c47 Author: Adam Dickmeiss Date: Sun Mar 18 12:59:56 2007 +0000 Added wrbuf_cut_right which cuts WRBUF by a number of characters (chop right). commit 1e2d8a4038fdada537fc10ff0eb9c52b338a8f9d Author: Adam Dickmeiss Date: Sat Mar 17 09:14:00 2007 +0000 Use nmem_init + nmem_exit to track memory usage easier. commit 99b3cb2b79d12430d0b0788bee64a5706a235f31 Author: Adam Dickmeiss Date: Sat Mar 17 09:13:29 2007 +0000 Use WRBUF for MARC line reading. commit e2ac4b875fbaf0211beae88ef6ccda2f2a4a3e95 Author: Adam Dickmeiss Date: Sat Mar 17 08:44:24 2007 +0000 Remove unneeded assert. commit e69b8fde2b8c7f732e19b5d14e7c545114f7e422 Author: Adam Dickmeiss Date: Sat Mar 17 00:10:40 2007 +0000 Fixed marc8 flush to deal with sub/sup scripts. Refactor marc-8 page switch code to function yaz_write_marc8_page_chr. commit 1a2a3ed95f16f8f9d7bb3c42e725810d6829e189 Author: Adam Dickmeiss Date: Fri Mar 16 10:50:19 2007 +0000 Version 2.1.55. commit c6242bb0903cfac4154bf9eb6a4eb80f7d9060e8 Author: Adam Dickmeiss Date: Fri Mar 16 09:12:08 2007 +0000 Fix news version commit 617267c681a420024d13d8ba5b12039544d33664 Author: Adam Dickmeiss Date: Fri Mar 16 08:58:39 2007 +0000 Fix ChangeLog dist commit 8a838bc80080fd775043aed2994d33bfc7762950 Author: Adam Dickmeiss Date: Fri Mar 16 08:11:13 2007 +0000 Remove ether_h echo commit ba68124b7321baff51997107f1cf9f0a78f62351 Author: Adam Dickmeiss Date: Fri Mar 16 08:08:10 2007 +0000 Towards 2.1.54 commit 71bfb6b6bd12f696264c376fa878a71dce43362a Author: Adam Dickmeiss Date: Fri Mar 16 08:06:38 2007 +0000 More news commit e65dd6fdeb899a631867cc4f17aac2d04d3cecbb Author: Adam Dickmeiss Date: Fri Mar 16 08:06:26 2007 +0000 ChangeLog part of dist commit 254f399fe8304d224929420f17c2020896bfe467 Author: Mike Taylor Date: Thu Mar 15 14:15:06 2007 +0000 ZOOM-C async reconnection. commit b0aea56b51603b34d526bbfb94fed2ae0976fb0f Author: Adam Dickmeiss Date: Thu Mar 15 14:07:41 2007 +0000 Fixed bug #969: Fixed compiltation errors on OpenBSD 4.0. commit 6b90776a33987cb5df962be1db7c28b63e2213dd Author: Adam Dickmeiss Date: Wed Mar 14 11:46:37 2007 +0000 Fixed update command so that record ID = none means none. commit f183d2f4776c9161eb229eb6ad85260bc65af54e Author: Adam Dickmeiss Date: Tue Mar 13 09:12:09 2007 +0000 Missing return value for function commit 967a1293ee622053b05995d46d63085f6aa23204 Author: Adam Dickmeiss Date: Mon Mar 12 16:16:49 2007 +0000 Use wrbuf_puts rather than wrbuf_printf for GRS-1 display. commit 5e6dd2bd57b34f26e8bed2034450540ad1ec3d12 Author: Adam Dickmeiss Date: Mon Mar 12 11:18:00 2007 +0000 advancegreek ; NOT greekadvance. commit fd3e0c80b9b344777ef337909d197a14b69f251b Author: Adam Dickmeiss Date: Mon Mar 12 10:59:58 2007 +0000 Added character conversion support for "greekadvance"; based on patch from Giannis Kosmas. commit 55649442b6db726cae33bf4ee92ad447995c930f Author: Adam Dickmeiss Date: Mon Mar 12 08:27:44 2007 +0000 Encapsulate ZOOM_resultset_destroy. commit 19c0b332044f06ee33eaf66ca92675d9cda8d1b9 Author: Adam Dickmeiss Date: Fri Mar 9 08:39:38 2007 +0000 Fixed yaz_iconv to return YAZ_ICONV_EINVAL if an incomplete MARC-8 combo sequence is met. Before the error was not set so it would be unknown. commit dc720b90d5ff1d5c5a1821de3a0e335eb64a1951 Author: Adam Dickmeiss Date: Thu Mar 8 12:45:02 2007 +0000 Adjust marcdump so that it skips until record separator is read commit cc7d1eb374c88d7b2f56df13977278873b1e7f5a Author: Adam Dickmeiss Date: Wed Mar 7 14:26:44 2007 +0000 Fixed reconnect problem for ZOOM-C. The event queue was becoming empty in some cases of connect which failed. commit ec0f5bdedf10f755541500d9db2a8332dc09039a Author: Adam Dickmeiss Date: Wed Mar 7 13:12:42 2007 +0000 Check for errors at all times in this event test commit e91fb5895f950b41bd95142596026dc879075ab4 Author: Marc Cromme Date: Wed Mar 7 11:29:39 2007 +0000 corrected spelling error corrected ziffy dependencies commit f7cd94cdd1d0ab8655419c6f5ca9ec19f659b2f1 Author: Adam Dickmeiss Date: Wed Mar 7 09:09:22 2007 +0000 Omit acx_pthread.m4 from installation (only part of make dist). commit 57a8ebc46aff189207f1518cf7e21100464ffb79 Author: Adam Dickmeiss Date: Wed Mar 7 08:54:13 2007 +0000 YAZ 2.1.53. commit 7dca3501222dc961d4067367fc5222c48d36e0ef Author: Adam Dickmeiss Date: Wed Mar 7 08:05:25 2007 +0000 Towards 2.1.52. commit 5b851cf1bb19aea8448630ac6f179e53d8847e57 Author: Mike Taylor Date: Wed Feb 28 11:14:56 2007 +0000 Remove hardcoded limit of 1024 sockets in ZOOM_event_sys_poll(). Note that ZOOM_event_sys_select() still has the limit due to the fixed-size fd_set structure used as a bitmask for the FDs to be selected on. commit 5c167071ae977b217670e573d18c112634e8aa63 Author: Adam Dickmeiss Date: Mon Feb 26 14:24:00 2007 +0000 Fix "HAVE SNPRINTF" check. commit 3f7c21d3bf85a142671d97bd4183bc3fe9b61e9e Author: Adam Dickmeiss Date: Sun Feb 25 21:04:04 2007 +0000 Deal with empty thread spec if that is what ACX_PTHREAD returns. Unfortunately empty thread lib spec is problematic because 'yaz-config --cflags' is not always passed to linker in applications using YAZ (such as Zebra). commit 8d133ab04af9cc1fe4d2463fb2a0139644ecd6e2 Author: Adam Dickmeiss Date: Sun Feb 25 14:46:50 2007 +0000 Change the use of CFLAGS WRT ACX_PTHREAD. Thread libs/cflags are always returned in yaz-config, i.e. 'thread' option for yaz-config is a no-op. commit 97daa5b35cab732ac0fc5192bcdc70bbf46a1751 Author: Adam Dickmeiss Date: Sat Feb 24 18:44:54 2007 +0000 Fixed bug #927: DOM Module returns wrong diagnostic (24, should be 25). commit d18b1a02c459bc111a6b5928728f9690020e410d Author: Adam Dickmeiss Date: Sat Feb 24 13:35:23 2007 +0000 Use m4 macro ACX_PTHREAD for POSIX threads detection. commit 58dda1e89dc22c400b7da64582eebc91c6c598ec Author: Adam Dickmeiss Date: Fri Feb 23 14:04:37 2007 +0000 YAZ 2.1.51 commit 0a9596292ae022d000ae49340db024c245626ddd Author: Adam Dickmeiss Date: Fri Feb 23 11:54:38 2007 +0000 YAZ 2.1.50. commit a8939b4e46cff366d70894f77805a580e07187aa Author: Adam Dickmeiss Date: Fri Feb 23 10:58:25 2007 +0000 API version 2.1.49 due to new functoins yaz_snprintf, yaz_vsnprintf commit 021f5586a328c6600460aa9f9be664ba19ba20d4 Author: Adam Dickmeiss Date: Fri Feb 23 10:15:00 2007 +0000 Added snprintf/vsnprintf wrappers for systems that don't have limits (heavens forbid). commit acf93c6b774c7184c35c2b994d4d7764438656d8 Author: Adam Dickmeiss Date: Thu Feb 22 12:37:28 2007 +0000 Note changes regarding recent ZOOM-C changes commit 30aa82dcc70cbbb450305e0787681464bb6258c6 Author: Adam Dickmeiss Date: Wed Feb 21 13:00:19 2007 +0000 Internal Debian 2.1.49-1 commit aabf01d7516f121a50438dcfae14ecf8c351a8c8 Author: Adam Dickmeiss Date: Wed Feb 21 12:53:01 2007 +0000 Remove event queue when a new task is initiated. Also remove events when a connection is destroyed (to prevent a leak if connection is destroyed while events are outstanding). commit e4ef95b2ccfe88d7049543664f00e5fda957dd0c Author: Adam Dickmeiss Date: Wed Feb 21 09:19:26 2007 +0000 Moved prototype of ZOOM_connection_remove_tasks further to the "top" of the source to prevent warning. commit 3822378d7b75625b8b879025b22bffeb5483b788 Author: Adam Dickmeiss Date: Wed Feb 21 09:17:51 2007 +0000 Changed task queue management a little for ZOOM C. When a diagnostic is produced/received (error condition), the task queue is cleared immediately. In earlier versions the task queue was cleared when a new task was inserted in the queue. The effect was that a newly inserted task was _immediately_ removed and never fired. Hence tasks were silenty forgotten. The error code is still cleared when a new task is inserted in the queue. commit 6ae9b6acff7b96dda296313b8c0e24c1626afdd8 Author: Adam Dickmeiss Date: Wed Feb 21 09:10:19 2007 +0000 Added test for checking ZOOM task/event handling. commit 52f6cacfcfe9d91e909616719e77a27be0c82b29 Author: Adam Dickmeiss Date: Tue Feb 20 09:53:30 2007 +0000 Fixed bug #900: Configure warnings on FreeBSD. commit 75b457189bc3d6551a945b862d0618f2a29b86bd Author: Adam Dickmeiss Date: Tue Feb 20 09:53:01 2007 +0000 Fixed spelling commit adf2f426ab3869f3550d3cd56f48d0590d50f502 Author: Adam Dickmeiss Date: Tue Feb 20 09:39:17 2007 +0000 Fix type of thread id commit 259d7eb2a0c31853affc5147d1d57223345a1625 Author: Adam Dickmeiss Date: Sat Feb 17 10:53:05 2007 +0000 Fixed compilation and tests for case where Libxml2 is unavailable. commit b05a82226d0840e32772c62285e9eab584ae000a Author: Adam Dickmeiss Date: Thu Feb 8 11:36:59 2007 +0000 Fixed bug #615: Document retrievalInfo facilities for Frontend Server. commit 95c7f9bdc6544941ce153faff951a68e0e6fb389 Author: Adam Dickmeiss Date: Thu Feb 8 10:52:06 2007 +0000 Update retrievalinfo example. commit 0c4163220f1cdfcb44af12ac65d1ddf8bae3a806 Author: Adam Dickmeiss Date: Thu Feb 8 10:51:23 2007 +0000 Update example. commit cd015e61f7fcbc22776c41e8cc1860c059a39af5 Author: Adam Dickmeiss Date: Thu Feb 8 09:03:31 2007 +0000 Describe the asterisk substution for CQL to RPN mappings. commit 744b4f52caa38c0197331682cc9c89ef9d47da80 Author: Mike Taylor Date: Wed Feb 7 17:52:44 2007 +0000 Introduce zoom_yaz_str_to_z3950oid() wrapper, which called yaz_str_to_z3950oid() and reports lookup failures with yaz_log(YLOG_WARN). This helps to detect otherwise "silent errors", such as getting back a default-format record when having misspelled a desired preferredRecordSyntax. commit aef1debf34a8163603873e9c95e9c31d41e27e20 Author: Mike Taylor Date: Wed Feb 7 15:13:16 2007 +0000 Fix comment. commit e20eb836cfe0996588d259db1a57c80966795fd4 Author: Adam Dickmeiss Date: Wed Feb 7 13:36:57 2007 +0000 Implemented pass-through CQL-to-PQF conversions. Bug #861. commit 3879f5305286e152c9e16a5ccd20fbfc02428fce Author: Adam Dickmeiss Date: Mon Feb 5 17:51:48 2007 +0000 Do not print leading space when log level 'notime' is used. commit 47f3b538db5374f0b9cc9dc334e851a0542d2d2c Author: Sebastian Hammer Date: Sun Feb 4 02:24:56 2007 +0000 Fixed overly ambitional conditional which led to incorrect handling of retrieval/backend sub-element commit db6b40fa96ba3c3cda68d143a17b5b1fd0a20eb4 Author: Adam Dickmeiss Date: Thu Feb 1 09:56:14 2007 +0000 Only use XML standard entities commit 4aaef6f43f00ca8db95f6a7fa908147be1927093 Author: Adam Dickmeiss Date: Wed Jan 31 15:27:17 2007 +0000 Bad entity '&nums;' commit b7e0b586c47f8cc0c99f0195e0b554dc5f1af072 Author: Adam Dickmeiss Date: Wed Jan 24 23:10:01 2007 +0000 Capture Ctrl-C and save history commit d42f045690a68380de575447bf9755f922ec734d Author: Adam Dickmeiss Date: Wed Jan 24 23:09:48 2007 +0000 Do not save command history if it is empty commit 11594352845d8e70c9d668c20fde891a1d45f3d6 Author: Adam Dickmeiss Date: Wed Jan 24 15:14:57 2007 +0000 Fixed bug #832: Problem with MARC/charset in yaz-client. commit 3ff58a01241be351c3929f0750e7ec6242a79c2a Author: Adam Dickmeiss Date: Wed Jan 24 15:13:20 2007 +0000 Fix misleading comment commit 07dca8aeae6bc30c59e71b30a9ad83da57c0440d Author: Adam Dickmeiss Date: Wed Jan 24 11:50:18 2007 +0000 Fixed bug #668: save command line history for yaz-client. The history is saved in ~/.yazclient.history . commit 4f8ea8cfaf2f3d95e4efcf9494526c2b4be43eb8 Author: Adam Dickmeiss Date: Wed Jan 24 10:09:31 2007 +0000 Fixed bug #830: pkg-config support. YAZ installs yaz.pc for Debian package libyaz-dev and Redhat package libyaz-devel. commit 6faa400a39174ce64b5e0ed0507e652969ae968a Author: Adam Dickmeiss Date: Wed Jan 24 09:54:04 2007 +0000 Fixed bug #831: New yaz-client command: 'source'. commit 4b768398f592fe19364a3079d968da2f3a9e724f Author: Adam Dickmeiss Date: Tue Jan 23 20:02:09 2007 +0000 Version 2.1.49. commit 9dc245681225482bd54fcca542846a29b83be9d6 Author: Adam Dickmeiss Date: Tue Jan 23 19:31:10 2007 +0000 Towards 2.1.48. commit 7ac4583e06e6a5a3037603aa97c66ecb1f29f43d Author: Adam Dickmeiss Date: Tue Jan 23 19:28:08 2007 +0000 More news. commit d040a9ea56b37ca9f625a40a2d56a056f8447d07 Author: Adam Dickmeiss Date: Tue Jan 23 19:25:21 2007 +0000 Extended ZOOM result set options with two options that may be read by a client: resultSetStatus and presentStatus with values as specified for the ASN.1. See: http://www.loc.gov/z3950/agency/markup/04.html#Search-status commit c21aaab68b1d04dd8f3b2caaa172beb1e290017c Author: Adam Dickmeiss Date: Mon Jan 22 12:14:09 2007 +0000 Rule 'make yazj.pdf' produces PDF using jade. Good for checking that the Docbook format is valid. commit 84cb4c71eb572b5700cd7b3230446d9578521870 Author: Adam Dickmeiss Date: Mon Jan 22 10:35:07 2007 +0000 Implemented alternative Item Order package for ZOOM. If option "doc" is set, that is treated as an ItemOrder with itemRequest being an XML document external. The value of "doc" is the content. commit 39a28866369aca6d604441931dacb065b4097768 Author: Adam Dickmeiss Date: Mon Jan 22 09:21:16 2007 +0000 Remove dead code commit c5f96952344acb65f53b2ee221be9bc8e70692db Author: Mike Taylor Date: Sat Jan 20 00:31:41 2007 +0000 Ignore three more files. commit fad7dc54f5360188f0679553c80f8d2836094846 Author: Adam Dickmeiss Date: Fri Jan 19 16:08:33 2007 +0000 Using dblatex instead of pdfjadetex commit cad160fa45305f029e14282344e6f42ad9d42e57 Author: Adam Dickmeiss Date: Fri Jan 19 15:59:49 2007 +0000 Added authorgroup for author(s). Added releaseinfo. commit 5a06fa4cb1689807cd4bd8c6858001a2b9861538 Author: Adam Dickmeiss Date: Fri Jan 19 10:29:13 2007 +0000 For GFS, display COMSTACK error when cs_bind fails. commit 41458ee17f8860ec85898ffb81186d2736a5c1aa Author: Adam Dickmeiss Date: Fri Jan 19 10:28:42 2007 +0000 Fixed bug #827: Using SSL fails on Debian etch. Fixed by Using SSL_library_init() rather than SSLeay_add_all_algorithms(). Works fine with libssl0.9.6 (woody) and libssl0.9.8(etch). commit cf245e9bf14a9f66908f8a31e42788a945b77c5a Author: Adam Dickmeiss Date: Thu Jan 18 14:46:58 2007 +0000 marc8 test records in dist commit 60b5f5ba6f34ef79b037eb8af1e2554d9842bb10 Author: Adam Dickmeiss Date: Thu Jan 18 14:45:05 2007 +0000 Fixed bug #826: Weird looking chars for set of MARC records. Problematic record in test/marc8.marc . The record switched to MARC-8 mode 'Basic Arabic', then back to 'basic Hebrew' (and never back to Latin1/ASCII). commit 6e2be464f5440ef47e6c6228ad91062d961b75b2 Author: Adam Dickmeiss Date: Thu Jan 18 11:44:50 2007 +0000 Fix test of xmllint precense commit 9e3111eaac05558be44beadb89eb7ba8c73eb9d5 Author: Adam Dickmeiss Date: Tue Jan 16 14:12:37 2007 +0000 Extended the GFS search facility. New member of bend_search_rr 'estimated_hit_count' signals that hits is known to be an estmate (higher or lower than real hit count). New member 'partial_resultset' signals that the search was partial (hit count is lower or equal than real hit count). For Z39.50, the information is stored in resultSetStatus member of SearchResponse APDU. For SRU, the information is signalled via SRU diagnostic 59: "Result set created with valid partial results available". commit 4c1e71e27bbedb9bbaa66bfa5193c5746ef80acb Author: Mike Taylor Date: Mon Jan 15 23:43:14 2007 +0000 Ignore nfaxmltest1.log commit 4916a1038bbe9ab253d20d0bdaa1c9456b35ac1c Author: Adam Dickmeiss Date: Sat Jan 13 10:37:26 2007 +0000 YAZ 2.1.47 commit fb6a79de4493011a2b857048bed057dea3d72f06 Author: Adam Dickmeiss Date: Sat Jan 13 09:00:03 2007 +0000 Towards 2.1.46 commit 2a6b6691d7717640bbf7698d8bad5afafebb760d Author: Adam Dickmeiss Date: Sat Jan 13 08:57:47 2007 +0000 Removed mainpage - moved to yaz-util.h commit 31f45e37cf375384c5a68f99db540629b965c81e Author: Adam Dickmeiss Date: Fri Jan 12 21:41:53 2007 +0000 Added Doxygen mainpage. commit 0982c13b874d79d950800b62ea22d91d943f3036 Author: Adam Dickmeiss Date: Fri Jan 12 21:03:30 2007 +0000 Renamed ZOOM_process_event to ZOOM_event_nonblock to signal that it it is the non-blocking part of ZOOM_event. Added per-connection version called ZOOM_connecton_process which is used by implementation of ZOOM_event_nonblock. commit 54fefc3908aee6023f09c88326f612124869929c Author: Adam Dickmeiss Date: Thu Jan 11 11:05:01 2007 +0000 Added ZOOM_API() to definition of ZOOM_connection_peek_event commit f9d5791b3b7222309b5112e8e269ff36325d7498 Author: Adam Dickmeiss Date: Thu Jan 11 10:55:56 2007 +0000 Move HTTP logic out of zgdu.c to http.c. commit d6862f25e98c81258ac86ee865b82ba610fd0b8f Author: Adam Dickmeiss Date: Thu Jan 11 10:30:40 2007 +0000 Implemented bug #806: Deal with HTTP clients sending LF in HTTP headers. commit c9cf80cbfdc232006f0e5b117a1d6bec578e8d9e Author: Mike Taylor Date: Wed Jan 10 14:16:01 2007 +0000 Ignore NFA tests. commit 52741a76f17524da0bc416fe82db69eda7700797 Author: Adam Dickmeiss Date: Wed Jan 10 13:25:46 2007 +0000 Implemented ZOOM_connection_peek_event. commit 951fce6496397a6d8c11e15ab5b60b46abc43467 Author: Adam Dickmeiss Date: Tue Jan 9 13:56:47 2007 +0000 Implemented Generic select hook for ZOOM (bug #803). This is achieved with the following new functions: ZOOM_process_event, ZOOM_connection_get_{socket,mask,timeout}, ZOOM_connection_fire_event_{timeout,socket}. The existing blocking event handler, ZOOM_event, is a wrapper for the + blocking ZOOM_event_sys_{poll,select}. commit bc1bdc891836da144db8108bc062d30dbb922f8b Author: Adam Dickmeiss Date: Mon Jan 8 13:20:58 2007 +0000 Added missing source. commit 2edee0444eb7d2aba3528a6ae6523c2d1dd92a18 Author: Adam Dickmeiss Date: Mon Jan 8 10:48:06 2007 +0000 Implemented function ccl_xml_config which parses XML version of CCL configuration (bug #798). commit c03ea9aeb04a9a60daa61ac9861cbbb668e42a59 Author: Adam Dickmeiss Date: Mon Jan 8 10:45:19 2007 +0000 Fix Doxygen comment. commit e6384123a635189be8e807f475ed826a466ca501 Author: Mike Taylor Date: Mon Jan 8 08:54:41 2007 +0000 New commit cdd66b5fa55b05a37dcef3c8e718142e703b1ab0 Author: Mike Taylor Date: Mon Jan 8 08:54:29 2007 +0000 Append commit b479a755bb3329922d9d3fb496ba828716a7e40e Author: Adam Dickmeiss Date: Sat Jan 6 16:08:04 2007 +0000 Fixed bug #797: yaz_marc_write_xml does not honor character conversion. commit 654af126f4f8e4045cde587e749df9680a4901ba Author: Adam Dickmeiss Date: Sat Jan 6 16:05:24 2007 +0000 Added wrbuf_cstr which returns 0-terminated WRBUF commit 85aafc49077214164bbdc2b84f247343ef9c3696 Author: Adam Dickmeiss Date: Sat Jan 6 15:32:46 2007 +0000 Added wrbuf_destroy(w), equivalent to wrbuf_free(w,1) commit 95895828d75b60ab21b625b5a1af28448d08879e Author: Adam Dickmeiss Date: Fri Jan 5 14:05:55 2007 +0000 Use a little CPU in timing test commit 99d73aaa969a333373e5e2cc01a6aac16e378c3c Author: Adam Dickmeiss Date: Fri Jan 5 14:05:24 2007 +0000 Windows port of yaz_timing_t commit fde8674e9a18b10bea21d205d2606b527e1bddf6 Author: Adam Dickmeiss Date: Fri Jan 5 14:05:03 2007 +0000 Ignore .log files commit e1000eb6be4e847ac7d1099c5b919a0732276a9a Author: Adam Dickmeiss Date: Fri Jan 5 12:40:05 2007 +0000 win32 get real implemented (timings that is). commit 608c6fec24ade4344ec1c5d337dac18b5a72c655 Author: Adam Dickmeiss Date: Fri Jan 5 12:37:53 2007 +0000 Added this commit f7ee1943c414e220dd1061680f8fe69f6a13f13e Author: Adam Dickmeiss Date: Fri Jan 5 12:00:11 2007 +0000 Reformat a bit. Building tst_timing.exe. commit a0989999fec1457bdd624ca18915d7cc2b55fd2d Author: Adam Dickmeiss Date: Fri Jan 5 11:45:11 2007 +0000 Added test of timing_t. commit 6f2f78ce0e63f8d0afcde6c0f2bbf0e9079fd323 Author: Adam Dickmeiss Date: Fri Jan 5 11:44:49 2007 +0000 Special value -1.0 means 'could not get timings' on current platform. commit 7057bafc90e9fd31d1c33cd1a3dc86c093257bf7 Author: Marc Cromme Date: Thu Jan 4 14:44:34 2007 +0000 removed unused variable commit 57efcfe71d3485e8f2ddac6008fbbc8183804ac7 Author: Marc Cromme Date: Thu Jan 4 14:43:08 2007 +0000 changed output to be non-cascarding when using -n switch commit 192b23c3eecf2d125bde6b17e2178a30e5003887 Author: Mike Taylor Date: Wed Jan 3 13:55:49 2007 +0000 Note additional dependency libpcap0.8-dev commit 75c07fe53a0cf8bb2c138cb6d87cde84d3b8b6a6 Author: Adam Dickmeiss Date: Wed Jan 3 13:46:17 2007 +0000 Added timings utility. Bump version to 2.1.45. commit ec61b200f7ea4fc59d4343993b608de29ec0f5ac Author: Adam Dickmeiss Date: Wed Jan 3 09:02:06 2007 +0000 Announce 2.1.44 for dh_makeshlibs due to new function yaz_marc_write_xml commit 8d691989077a0addcbd840d769dce6700f3d9622 Author: Adam Dickmeiss Date: Wed Jan 3 08:42:13 2007 +0000 Towards 2.1.44. Bump copyright year. commit af364b92610b4b6b424b696064bf4564e653693d Author: Sebastian Hammer Date: Tue Jan 2 07:01:56 2007 +0000 Explicitly associates NS with record root element in xmlNode output. commit 6ed38c528705580734b1f5b12f6de638c26abba5 Author: Adam Dickmeiss Date: Mon Jan 1 22:56:37 2007 +0000 Define the LOG_ masks by default (again) commit 9776afc23d4a953d4baf399f9682f53baf4654fc Author: Adam Dickmeiss Date: Mon Jan 1 22:39:08 2007 +0000 Fixed bug #779: Rotation of apdu.log fails. commit daa259b6e86d28f72c82488ee9b0f7bb2ce52b8c Author: Adam Dickmeiss Date: Thu Dec 21 20:50:56 2006 +0000 Fixed Unicode to MARC-8 conversion for certain less preferred UTF-8 sequences. Conversion for first/second half double tilde + first/second half ligature was changed. Conversion should now perform: 6f ef b8 a0 --> eb 6f, 6f ef b8 a1 --> ec 6f, 6f ef b8 a2 --> fa 6f, 6f ef b8 a3 --> fb 6f. commit 7aebc8794443afa7792d665b9fc401fd55611cf6 Author: Adam Dickmeiss Date: Tue Dec 19 22:41:28 2006 +0000 Honor G1 set in MARC-8 decoding. commit 861f9deb72bd92679ea08d528b40993ada55cdb9 Author: Adam Dickmeiss Date: Mon Dec 18 10:32:11 2006 +0000 Added yaz_marc_write_xml which creates MARCXML/MarcXchange record as Libxml2 tree. commit 757531032a9fb869bc511a9b53831977738a3721 Author: Adam Dickmeiss Date: Mon Dec 18 08:48:30 2006 +0000 2.1.43 commit 7bf9ccceaf20e7922f50acc9c38dc32a8ceb5834 Author: Adam Dickmeiss Date: Sun Dec 17 16:28:16 2006 +0000 Towards 2.1.42. commit f0e73eaf11301cf7f28b23a3491fc745bd9f663a Author: Adam Dickmeiss Date: Sun Dec 17 16:03:01 2006 +0000 Fixed bug #772: presentChunk option yields "Present request out of range". commit 60fa7941321b3d313bfa0d94e188835a35e93320 Author: Adam Dickmeiss Date: Sun Dec 17 15:34:11 2006 +0000 Fixed bug #775: char conversion does not handle alternative UTF-8 sequences. commit 88df77cc241680a8ff13d9cdda0afaeb332c4b1b Author: Adam Dickmeiss Date: Fri Dec 15 20:36:45 2006 +0000 Add CABE as old UTF-8 sequence for Alif (MARC: AE) commit cd2f012a70ebadf660acb71936e32192287dc30a Author: Adam Dickmeiss Date: Fri Dec 15 19:28:45 2006 +0000 Implemented function yaz_marc_read_line which parses MARC line format records. There is a wealth of formats out there. So far, this function reads line records produced by yaz_marc_write_line. yaz-marcdump's options -x, -X, -I, -e have been replaced with the more generic and easier to remember(!) options: -i format and -o format which specifies input format and output format respectively - where format is one of "marc", "marcxml", "line", "marcxchange". commit 54db174ec4113c44b05f3766dc6f8ad665968cfb Author: Adam Dickmeiss Date: Fri Dec 15 12:37:17 2006 +0000 Split MARC reader functions out of marcdisp.c. Prepare for MARC format line reader. commit 85a1ec4eb983744107e98378be5f3a1d0c33ef52 Author: Adam Dickmeiss Date: Thu Dec 14 09:05:18 2006 +0000 For the CQL parser, make boolean node names lowercase.. but this time at the lexical level rather than at the parser level. commit b5fec6a001dbcd8b303a11cede8b6c55512dbda0 Author: Adam Dickmeiss Date: Thu Dec 14 08:55:52 2006 +0000 For the CQL parser, make boolean node names lowercase. commit 69cc5b167c5afbc8d14c0db30f9a5fb34dda0a24 Author: Adam Dickmeiss Date: Wed Dec 13 15:29:01 2006 +0000 Revert commit f25338b01de9ab9fb8dcc952b70b7b12b1e71c00 Author: Adam Dickmeiss Date: Wed Dec 13 15:28:28 2006 +0000 Central point of exit for xmalloc commit f92f152a8a4634eeace90c52e8c013db3b938659 Author: Adam Dickmeiss Date: Wed Dec 13 14:18:03 2006 +0000 Added title for ziffy example. commit 8f8560e0ab3b370263683d8aea81b839c5927091 Author: Adam Dickmeiss Date: Wed Dec 13 11:25:17 2006 +0000 Added header yaz/xmltypes.h which include libxml2' node definitions or provide dummy alternatives if libxml2 is disabled (or does not exist). This allows all Libxml2 related functions to be publicly defined unconditionally. Also provides a more type safe system for applications using these functions. commit 7b7ef94671d08c1e522377c90302751269e8621e Author: Adam Dickmeiss Date: Wed Dec 13 11:23:48 2006 +0000 Disable SRU update in case of missing Libxml2 commit 0f21ef6a3d846e26d4e6c1ef375f62ce12adce9b Author: Adam Dickmeiss Date: Wed Dec 13 11:22:20 2006 +0000 Added type cast from signed char to char commit affe25ddd764d889b566a080a1d7e40eca273044 Author: Adam Dickmeiss Date: Wed Dec 13 11:21:56 2006 +0000 Define SSL + Libxml2 CFLAGS commit 0687f09242bf75f0a1dcf03558b28ed800463d18 Author: Adam Dickmeiss Date: Wed Dec 13 10:47:10 2006 +0000 Predefine YAZ_HAVE_XML2, YAZ_HAVE_XSLT commit 7dc3167ac3347465c3772ac20e9df20c809d35a6 Author: Adam Dickmeiss Date: Wed Dec 13 10:36:00 2006 +0000 Removed objects nfa.obj, nfaxml.obj no longer in use commit 2d78d4d3c648767f4f54d9947ce18a39ffbeabbe Author: Adam Dickmeiss Date: Wed Dec 13 10:35:44 2006 +0000 Removed files nfa.h, nfaxml.h no longer in use commit 2e9966e7b28bef005dadfae9282ffbf912bd7a9f Author: Adam Dickmeiss Date: Wed Dec 13 09:40:32 2006 +0000 Added documentation about ziffy. commit ca44977409b92a8b1c7bfbc913a6422edc41d1d5 Author: Marc Cromme Date: Tue Dec 12 10:41:38 2006 +0000 config file XML syntax changed to a more intuitive and well-structured format. XML parser adjusted accordingly related error messages fixed and added more context information to error messages updated test suite and added a handful more XML config file tests still missing to document the YAZ record-transformation features commit aaab70eca11dd1e5d48eca30d74be082326928e1 Author: Adam Dickmeiss Date: Fri Dec 8 14:02:55 2006 +0000 Added SRU diagnostic 62: "Cannot process or store record, insufficent space" and diagnostic 100: "Not processed (replace or delete). Record ..." . Changed "invalid" to "Invalid" for diagnostic 100. commit 283660d9752a77fe9578b070c632bafae7595189 Author: Adam Dickmeiss Date: Fri Dec 8 13:53:26 2006 +0000 Fixed bug regarding incomplete incoming packages. The bug was introduced in version 1.105 of seshigh.c (and not part of official YAZ release). commit 6ac2cbf8b4f34a3e3d2bd0687d11d63579786dea Author: Adam Dickmeiss Date: Thu Dec 7 19:06:11 2006 +0000 Fixed bug #740 by using a simpler and smarter approach. Patch from Ko van der Sloot. commit 75f5418ca1d43364857be2fe987da45611e8a9a5 Author: Adam Dickmeiss Date: Thu Dec 7 11:08:04 2006 +0000 Added 'check only' option for MARC utilities. Option -n for yaz-marcdump does not print anything except warnings for records. For yaz-marcdump, added support for MARC split into files (-s) with a given chunk size (-C). commit 2ede0bb278b22c8ce1cdd48e9a11a5924d433763 Author: Adam Dickmeiss Date: Wed Dec 6 21:35:57 2006 +0000 Changed the SRU update structures and codecs to reflect the SRU pre 1.0 spec, at http://www.loc.gov/standards/sru/record-update/ This has changed the binary layout of the following structs: Z_SRW_extra_record, Z_SRW_updateRequest, Z_SRW_updateResponse and bend_update_rr . Patch by Ko van der Sloot. commit 3f8685ee91c382bb9769132d6a8692d282edf802 Author: Adam Dickmeiss Date: Wed Dec 6 13:26:47 2006 +0000 Debian 2.1.41-5 commit f6379872ace49628473c47d23b29e9f46b5afbe4 Author: Mike Taylor Date: Wed Dec 6 11:12:14 2006 +0000 Fixed bug #722: Allow Z39.50 Init Options to be specified / retrieved. Client code may now interrogate options such as "init_opt_sort" to find out whether the server claims to support various options. commit 09f5ad52b5ae914f6b8f5d16afcb14e6fc33ea45 Author: Adam Dickmeiss Date: Mon Dec 4 14:56:54 2006 +0000 Added GFS utility function bend_assoc_is_alive which returns 1 if association is still alive (client is connected); 0 otherwise (client closed connection). This allows busy servers to stop working for impatient clients. commit b745023f0d3a7ea51977e6edccd7a561af2cb1f0 Author: Adam Dickmeiss Date: Mon Dec 4 09:15:46 2006 +0000 Debian package 2.1.41-4. commit fce10c79d72f202c463e56f6c3f95f27a5a6eaf3 Author: Adam Dickmeiss Date: Sun Dec 3 18:07:10 2006 +0000 Make yaz-ziffy part of RPM. commit 78a6775fc61c195bec7cca0adb6d33d4e191dfa4 Author: Adam Dickmeiss Date: Fri Dec 1 08:11:09 2006 +0000 Debian package yaz-ziffy is architecture all (not any). 2.1.41-3. commit a570741e5337b5b7632a02e18807621c5296c8fa Author: Adam Dickmeiss Date: Fri Dec 1 07:57:38 2006 +0000 Debian yaz-2.1.40-2. commit fb67adbd15eb6c5c2b668c64d3df9bfb7021c1c5 Author: Adam Dickmeiss Date: Thu Nov 30 22:58:06 2006 +0000 Fixed bug #740: Handle SRU records referring to xmlns outside recordData. Implemented with static function fixup_xmlns. commit 31de2e747e8aab81f5de5867e237ec1f0eda5f62 Author: Mike Taylor Date: Thu Nov 30 17:07:50 2006 +0000 Postpone the setting of c->sru_mode until after leading options from host string have been applied. This means that host strings like the following now work correctly in specifying the use of SRU or SRW respectively: sru=get,http:z3950.loc.gov:7090/Voyager sru=soap,http:z3950.loc.gov:7090/Voyager (Previously, these options were set too late to have any effect.) commit a4524953b83ee8bf3b0c17bc760fa4c2d72bf235 Author: Adam Dickmeiss Date: Thu Nov 30 09:11:35 2006 +0000 Added debian package yaz-ziffy. commit a06bb3ab7af78c8ecb3f025729f16e0d796380d0 Author: Adam Dickmeiss Date: Thu Nov 30 08:46:52 2006 +0000 Change --with-pcap-dir to --with-pcap[=DIR]. Enable ziffy only if libpcap is found. commit 5fb7fa9318c6ea4a6aeecd515cc00fcd46709a3d Author: Adam Dickmeiss Date: Wed Nov 29 22:35:17 2006 +0000 Veresion 2.1.41. Added ziffy, the promiscuous Z39.50 APDU sniffer ny R. Carbone . commit 2f1772e6ceae5de8a838b9811822a21acc49a80b Author: Heikki Levanto Date: Wed Nov 29 12:48:59 2006 +0000 Removed the nfa tests as well. Now passes make check. commit 6d678c5970ec665607e3d1ddbd8809a14bccabdf Author: Heikki Levanto Date: Wed Nov 29 12:34:51 2006 +0000 Removed the nfa stuff - no longer needed commit e4368af2ede9079d33e7a8fd280d29b2bde1d1ad Author: Adam Dickmeiss Date: Mon Nov 27 14:15:53 2006 +0000 Towards 2.1.40. commit 8a1b979bf9034968de41289abf6d7769fdceed33 Author: Adam Dickmeiss Date: Mon Nov 27 14:09:32 2006 +0000 Test differently for overflow in log bits commit 74af0d31a49a9ed564d09f1f2e7780ab533b4ff5 Author: Adam Dickmeiss Date: Mon Nov 20 08:13:05 2006 +0000 Remove YLOG_LOG msg commit df2adb23954e8ad27dac8e234ee9206c5d980dd9 Author: Adam Dickmeiss Date: Tue Nov 14 08:48:26 2006 +0000 Added utilities yaz_{set,get}_esn commit 699e7501d441803e6abd38bb8771cef20846a0d6 Author: Adam Dickmeiss Date: Tue Nov 14 08:37:37 2006 +0000 Added utilities yaz_{set,get}_esn to set/get element set name from record composition. commit 2cb7bb0d334f94db0454178721b8777c64488909 Author: Adam Dickmeiss Date: Tue Nov 14 08:37:16 2006 +0000 For update, record ID "none" makes update omit record ID. commit 9e6f187978c4a79ceaa71921364336f5b5011aec Author: Adam Dickmeiss Date: Wed Nov 8 08:57:34 2006 +0000 Repeat call to select(2) if errno=EINTR is returned. commit e8b504e6b88e1254fb1c329a74fd1afaf973570b Author: Adam Dickmeiss Date: Wed Nov 8 08:55:50 2006 +0000 Fixed bug #729: Bad error message when starting with an invalid address. commit 05cbba0079b597a8e960ea52f4300771c8ca0812 Author: Adam Dickmeiss Date: Mon Nov 6 23:21:30 2006 +0000 Make fake 'Present Out Of Range' Diagnostic for bad Z39.50 Present Request Ranges. In ZOOM_Event, repeat call to poll if errno=EINTR. commit 1648788aab97d7f8ccb78037aee89b0039c90041 Author: Marc Cromme Date: Mon Nov 6 14:49:32 2006 +0000 added zoom layer record size debug output added debian package version number 2.39 in changelog to be able to install packages commit 282dd34ba931365f19aea49b262c7b60e67192cf Author: Adam Dickmeiss Date: Thu Nov 2 08:06:03 2006 +0000 Removed the build of libyazthread.la. The libyaz.so is the threaded version of YAZ and has been so since YAZ 2.1.10. commit 3a7dc22954c4469ebdc6e132c69fbd23638bce57 Author: Adam Dickmeiss Date: Wed Nov 1 15:39:05 2006 +0000 Fixed bug #719: Database in ZOOM_search may be different real search. Fixed the database(s) values for scan + search. For extended services there should not be a problem since those are built as APDUs initially. commit 17eb2fd28b9e01e9c80c55a0fcc48fd866082bfc Author: Adam Dickmeiss Date: Tue Oct 31 14:08:01 2006 +0000 Implemented ZOOM_record_error which returns error information for record (surrogate diagnostic). Bug #715. commit 19ceaa7b25280fbcdfb4e2d5eb94d3483f7d5d66 Author: Mike Taylor Date: Tue Oct 31 12:27:15 2006 +0000 Ignore generated diagsru_update.h commit 18066a4668e30a464d01cd5f01a060e453b368be Author: Adam Dickmeiss Date: Tue Oct 31 10:07:22 2006 +0000 Towards 2.1.38. commit 94befd6697082039477a3fa009e6657c1273e9c6 Author: Adam Dickmeiss Date: Tue Oct 31 10:02:06 2006 +0000 Added auto generated file diagsru_update.c commit 45ca1fdb638bf7aac77f3882a534ca19289aeaac Author: Mike Taylor Date: Tue Oct 31 09:15:00 2006 +0000 Fix typo. commit f97f41688df997a362e248bb64b830adb882c5c1 Author: Adam Dickmeiss Date: Sun Oct 29 18:33:54 2006 +0000 WIN32 mods for new SRU update commit 24483d4ace499b46ae33f06594d2d1f75f422f44 Author: Adam Dickmeiss Date: Fri Oct 27 12:19:15 2006 +0000 Fixed bug #711: Do not include Libxml2's headers from nmem.h. commit 0595ed2dacb6d69e73247e547142c49f8517cffa Author: Adam Dickmeiss Date: Fri Oct 27 11:25:57 2006 +0000 Mention bug 709 commit 02c2c415822721c98afff674fc9672d004bd92a2 Author: Adam Dickmeiss Date: Fri Oct 27 11:22:08 2006 +0000 Updates for SRU Update by Ko van der Sloot: 1. Changed name from "operation" to "action" 2. Fixed that that "recordIdentifier" was called "recordId". Kept the old versions in the code, marked as 'backward compatible'. 3. Added diagnostics for SRU Update. commit 0d6309b35855b9e9b8f09c4c75dcd71483c5da5f Author: Adam Dickmeiss Date: Fri Oct 27 11:02:50 2006 +0000 Change type to avoid problems with strict-aliasing rules commit f9e10939c4e5ac6cc0dd42587cc51c7fa7fa0007 Author: Adam Dickmeiss Date: Thu Oct 26 15:34:46 2006 +0000 Fixes for bug #709: Records are fetched in wrong format when tasks are queued. This change also queues elementSetName. commit 66ab37e39c6f32575526ffa2347ededb7ebf7bd0 Author: Adam Dickmeiss Date: Wed Oct 25 09:58:19 2006 +0000 Fixed bug #707: CQL->RPN ignores lines with leading spaces. Changed function cql_transform_open_FILE so that white-space is allowed in the beginning of a pattern=value line. Lines with pattern but missing value (or missing =) results in an error. commit e63923d5a33d54806b2d73670c26c57480c484da Author: Adam Dickmeiss Date: Wed Oct 25 09:54:35 2006 +0000 Document yaz_matchstr commit 8fddce6d5593652f0218f0fb0b7a798f4e59b894 Author: Adam Dickmeiss Date: Wed Oct 25 07:28:27 2006 +0000 Make an example reference to etc/pqf.properties. commit 5685184f38bc71ece7593fa7ee3f82ebe31b5054 Author: Mike Taylor Date: Tue Oct 24 11:48:42 2006 +0000 Note on selecting SRU dialect, including SRW. commit a1260bbefc2a64f75547b62151d19804403d9667 Author: Adam Dickmeiss Date: Tue Oct 24 10:12:36 2006 +0000 Make a doc-clean rule commit 4063d979ead2def7e1a921a05e5ac0d49bfdc999 Author: Adam Dickmeiss Date: Tue Oct 24 09:53:42 2006 +0000 Fix compilation error commit d34b7eb62c029d607550ef6c1090c94729bde38f Author: Adam Dickmeiss Date: Tue Oct 24 09:18:34 2006 +0000 Fix bug #706: 2nd try. Implement the charset rules as follows: SRU SOAP / POST: If charset in content-type is specified, use it . If omitted, do not assume a particular charset (And &#x.. is in use). SRU GET: If charset in content-type is specified, use it. If omitted, assume UTF-8. Note that in most cases there will not even be a content-type for SRU GET. commit 0698b2e37e7d857e50a72397f53d738a5d454ea4 Author: Adam Dickmeiss Date: Tue Oct 24 08:26:49 2006 +0000 Don't make map files. zoomtst10 part of build. commit 1d5b77651a731db70204f77e7b8662ac4b4bfad4 Author: Adam Dickmeiss Date: Tue Oct 24 08:26:25 2006 +0000 Change usage example. commit 7b4a8fda694b878b0b3c3bfd67be164fa8293043 Author: Adam Dickmeiss Date: Tue Oct 24 08:12:12 2006 +0000 Fixed problem with SRU diagnostic 'First record position out of range' being issued for 0 hits. commit 7cca838c3a2d3fbb017949dd44d1c7d8a19dc843 Author: Adam Dickmeiss Date: Tue Oct 24 08:07:02 2006 +0000 Fail decoding of SRU SOAP searchRetrieveRequest if queries are omitted commit d21d3b30a525282f427f81219bf5a0b42e45bb04 Author: Adam Dickmeiss Date: Tue Oct 24 08:05:45 2006 +0000 Fixed bug #706: XML hex encoding UTF-8 chars out of range 0-255. In order to preserve UTF-8 sequences we must use xmlDocDumpMemoryEnc instead of xmlDocDumpMemory. The former is only used if a charset is given. YAZ reads that from the content-type HTTP header (;charset=). This however, does not make sense for SRU GET. So for SRU GET we force charset=utf-8 and use xmlDocDumpMemoryEnc. commit 78f8391d48d53549d01c002629deb00c7cf388cf Author: Adam Dickmeiss Date: Tue Oct 17 07:57:14 2006 +0000 Towards 2.1.37. commit 9fff21450011d2d4609be0d3e5e1abfe73bf2525 Author: Adam Dickmeiss Date: Fri Oct 13 12:50:14 2006 +0000 Towards 2.1.36 commit c83035e0e0177b385091cd273562ea0d222b5908 Author: Adam Dickmeiss Date: Fri Oct 13 11:30:37 2006 +0000 Files that include full license should not also point to file LICENSE. commit e36d7fa6b0fdfdc0d49cf13c54b9724af6c1c752 Author: Adam Dickmeiss Date: Fri Oct 13 11:25:47 2006 +0000 Removed file with obsolete content. commit 91d51c66de0c9780a58795bf9d3cb82a1931accd Author: Adam Dickmeiss Date: Fri Oct 13 11:25:24 2006 +0000 Mention xsltproc. Refer to SRU rather than SRW commit 8df7d26b7379039b47e57c29712d21ac278f0745 Author: Adam Dickmeiss Date: Fri Oct 13 11:22:26 2006 +0000 VS 2003 or later has getaddrinfo; older versions do not commit 63ed4a2c42b0a5786e375be40947294f4ac1cf16 Author: Adam Dickmeiss Date: Fri Oct 13 08:26:44 2006 +0000 More news commit ad5ad9a7ef375193c0f526b6321c9ee5bd8ce8b1 Author: Adam Dickmeiss Date: Wed Oct 11 09:39:43 2006 +0000 Fixed 'make distcheck'. Failed due to html files not being removed by uninstall. Added uinstall-hook for the doc directory. commit 67471e87c134f2503546cdd250cd169b7d43d566 Author: Adam Dickmeiss Date: Wed Oct 11 08:43:21 2006 +0000 Implement yaz_filepath_comp which splits a path into file path components. commit d7859bbabce608d9c5296212844b6f0f1ada71fb Author: Adam Dickmeiss Date: Tue Oct 10 13:47:40 2006 +0000 Reindent commit a9927a5dcb277fa27a803b0ed74989175eadd6a9 Author: Adam Dickmeiss Date: Tue Oct 10 09:13:52 2006 +0000 Changes for retrieval module: if backend schema is omitted, use schema as specified in name attribute. And if name attribute is omitted use schema as specified by client. commit 73b96a0bddc9e9b8795451c4c1a795f3224b6b17 Author: Adam Dickmeiss Date: Mon Oct 9 21:12:44 2006 +0000 Extend ASN.1 compiler invocation rules with generated headers commit 964580242e2e0b2e570f652afa58bfb90ad0bb5e Author: Adam Dickmeiss Date: Mon Oct 9 21:02:40 2006 +0000 Change wording ot YAZ license the 'Revised BSD License'. YAZ has used a BSD inspired license until now so this should not have any real impact on anybody. See http://www.opensource.org/licenses/bsd-license.php commit be6bf53019f49c1448f0161e3b0ce8d3b5b09ec0 Author: Heikki Levanto Date: Mon Oct 9 14:22:43 2006 +0000 Using plain char instead of unsigned char in my tests. Removed warnings from printf formats on amd-64 commit ba1eb985bfd53a8cfbfd251e65688921dba56236 Author: Adam Dickmeiss Date: Mon Oct 9 11:21:37 2006 +0000 Fixed bug #687: Missing log lines. Immediate logging (i.e. flush) is no enabled by default for the Generic Frontend Server. Also the log system's use of the "global" l_level was changed and simplified. In particular the log_mask_str now uses the current log level as "input" - not some default log level. commit 5aacaac430b101d72de440cf3833b6faee0eb1bd Author: Adam Dickmeiss Date: Thu Oct 5 16:19:16 2006 +0000 Copyright year commit 4d377a28c907f9fee3f576f32d96020fb7a8436c Author: Adam Dickmeiss Date: Thu Oct 5 16:13:34 2006 +0000 Fixed CQL term parsing: first char in unquoted terms was not prepared for \ escaping. commit fbe668f0fed0122f70d56c438e8055fa74c3f660 Author: Adam Dickmeiss Date: Thu Oct 5 16:12:23 2006 +0000 Fixed bug #678: CQL to PQF translation does not preserve double-quote escaping. commit bd857a679e59df07af55d32365b55d1544514ca4 Author: Adam Dickmeiss Date: Thu Oct 5 15:24:02 2006 +0000 Simplify check for SRU record ranges in GFS. commit f7a54be570c51522047f42daf147f7739c557065 Author: Adam Dickmeiss Date: Thu Oct 5 15:19:33 2006 +0000 Fixed bug #689: SRU diagnostics to be added. The SRU decoding now checks for proper values of "startRecord", "maximumRecords", "maximumTerms", "responsePosition". commit 69d044abe3d3a3560267a16dc4db13386974d5e1 Author: Adam Dickmeiss Date: Thu Oct 5 14:58:58 2006 +0000 Use ZOOM_API(int) for public function ZOOM_connection_is_idle commit 757c8c0ffb82023c9059d9a5997515f65ad68561 Author: Adam Dickmeiss Date: Thu Oct 5 08:26:58 2006 +0000 Supply id on all sections + examples. commit 9dfcbb70828f8d5b524c9bb45852246ae1dd6878 Author: Mike Taylor Date: Wed Oct 4 16:59:33 2006 +0000 Change K&R-style empty function declarations to explicit ANSI-C (void) prototypes commit 358e1b7e886e6130547ca28e72e0f7fdb4f1c409 Author: Adam Dickmeiss Date: Wed Oct 4 16:24:05 2006 +0000 Implement ZOOM_connection_is_idle. commit 8b7e5ea3521972629d28b40db92c30ce91ffd314 Author: Adam Dickmeiss Date: Wed Oct 4 13:21:33 2006 +0000 More info on strftime(3) log file substitutions. commit 58dd808a7f4d7c69e8243b491a6cc35eea5275d0 Author: Adam Dickmeiss Date: Wed Oct 4 12:49:39 2006 +0000 2.1.35. commit 1321777c57cf0b7faaea70cded9c8e39698c23fa Author: Adam Dickmeiss Date: Wed Oct 4 08:04:09 2006 +0000 2.1.34 commit 1806291faf15a684bdf50ecf113fcd8edced9546 Author: Adam Dickmeiss Date: Wed Oct 4 08:01:28 2006 +0000 Update commit 04875a323c2a604664b0915e226d269fa65bf84c Author: Adam Dickmeiss Date: Wed Oct 4 07:42:13 2006 +0000 Only generate up to 10 rotated log files. commit 52ef22373a88e2cc18e515610a40b3cb4e0b7549 Author: Adam Dickmeiss Date: Wed Oct 4 07:32:36 2006 +0000 tstlog uses -r instead of -s o control log file max commit 99d342b33ff48e94f97d631b127279f2face6124 Author: Adam Dickmeiss Date: Wed Oct 4 07:26:00 2006 +0000 Change call to parse_cmd_doc to avoid problems with strict aliasing rules. commit 8b1a2764e09b3573a1d01edc193930962bf3401a Author: Adam Dickmeiss Date: Fri Sep 29 15:29:36 2006 +0000 Implement log rotate log.0, log.1, log.2,.. commit efee4fe9b116348fcc0eb94a529650f8770143fb Author: Adam Dickmeiss Date: Fri Sep 29 13:20:22 2006 +0000 Added support for specifying the max log file size for the Generic Frontend Server. The size is given with option -r. commit b64382a1e420049b882b87fb05fe058aa6592d1c Author: Adam Dickmeiss Date: Wed Sep 27 11:38:59 2006 +0000 Added GCC option -Wstrict-prototypes to buildconf.sh -d. Updated code accordingly. commit c2641d280328e9bc114ca8c7b4585842c0acb05c Author: Adam Dickmeiss Date: Fri Sep 22 14:09:25 2006 +0000 Fix initialization of recordPacking in SRU search in case of format=xml. commit 13f137b81808f6a3359f898614cc988995af3965 Author: Adam Dickmeiss Date: Thu Sep 21 15:55:25 2006 +0000 Change type of optval from long to int for invocation of setsockopt with the SO_REUSEADDR option. commit 9c730b08c6fe0075774ddd1c421b3643efade576 Author: Adam Dickmeiss Date: Thu Sep 21 07:26:24 2006 +0000 Bump version to 2.1.33 commit 49db0e419dbd39548ef06ecb731b1ac86a1179f0 Author: Adam Dickmeiss Date: Thu Sep 21 06:58:54 2006 +0000 YAZ 2.1.32 commit 1fe04a2500032660a1560896affe59467ceac595 Author: Adam Dickmeiss Date: Thu Sep 21 06:56:51 2006 +0000 Put real prefix in references commit e01f8268da29b2240666d4666fb114276322f4f2 Author: Mike Taylor Date: Wed Sep 20 10:12:29 2006 +0000 Zebra sorting relation-modifiers. commit 3e4f42cf6577901e054a02f2f1fb5c03cef7b3ac Author: Adam Dickmeiss Date: Tue Sep 19 21:15:01 2006 +0000 Added the test for bug #641. commit 841e368a9589815fbd5704a8173518b050bc9080 Author: Adam Dickmeiss Date: Tue Sep 19 21:09:44 2006 +0000 For ZOOM-C, put reconnect handling to separate function. Fix reconnect handling for lost session (which broke in 1.87). commit 87fdb8465b6f9a7e90a022de67e9dbbb57c4c5c9 Author: Adam Dickmeiss Date: Tue Sep 19 19:41:32 2006 +0000 Added ZOOM Keepalive/reconnect test utility. commit e899be08cd969b68e8fa04975b9c9205ff8acbae Author: Adam Dickmeiss Date: Mon Sep 18 15:16:14 2006 +0000 2.1.31 commit 660cbdd824cc429a6456308748b0883421f82399 Author: Mike Taylor Date: Mon Sep 18 10:50:59 2006 +0000 Add cql.allRecords commit d54bef901afb189baa796a40bd05e95be1bce13e Author: Marc Cromme Date: Mon Sep 18 09:40:05 2006 +0000 updated to use the ZOOM_EVENT_END event commit 8770b7b456dd3a136b73bb7963884632a671eb83 Author: Adam Dickmeiss Date: Sun Sep 17 10:53:01 2006 +0000 Towards 2.1.30. commit 0f42a62726ed8d0161fc075cb3db21c046b383fd Author: Adam Dickmeiss Date: Sun Sep 17 10:50:49 2006 +0000 Add more news commit 2c418266c8feeeb47453d38c8320e6c83d75fd74 Author: Adam Dickmeiss Date: Fri Sep 15 09:06:28 2006 +0000 Fixed bug #660: addrinfo not handled correctly in tcpip.c. commit 7d7cc0b18839b9a78048041d882c1f3baf006c29 Author: Adam Dickmeiss Date: Thu Sep 14 13:50:24 2006 +0000 Fixed bug in Generic Frontend Server that could cause a server to stop accepting new connections. Bug only seen on two CPU systems on 2003 server. commit 2ea001f75b08508115c9149fb16b41ebc4476c7d Author: Adam Dickmeiss Date: Thu Sep 14 13:47:57 2006 +0000 Increase FD_SETSIZE for winsock select commit caa5ae948706a481006e6d8d2abea24dec56b672 Author: Marc Cromme Date: Thu Sep 14 07:39:49 2006 +0000 const correctness of z_HTTP_header_lookup first argument 'headers' commit 9c70253e4c7eedab806490b87a9a58e970998429 Author: Adam Dickmeiss Date: Tue Sep 12 19:09:43 2006 +0000 Remove unneeded comma after enum list commit cddd92d66e3a59179357c552a53cd7cba43f646f Author: Mike Taylor Date: Tue Sep 12 09:25:17 2006 +0000 Use 4=6 and 5=105 respectively for the "all" and "any" relations. It turns out that Zebra supports these -- who knew?! :-) commit d37f43b0cd3bc5553c6e24203f2fdf3dbdca93a4 Author: Adam Dickmeiss Date: Mon Sep 11 12:12:42 2006 +0000 Added include of string.h commit 9eb25e97c63071b8cf5aa22c462ff38451909802 Author: Marc Cromme Date: Mon Sep 11 07:27:18 2006 +0000 enabled better C support commit 94d223d5f74b0bf34fc7d3789ab3ca59d86152d6 Author: Adam Dickmeiss Date: Thu Sep 7 11:31:39 2006 +0000 Avoid mixed stmt/var declare commit 8aa33c5962490e6f5609853a26512267f287f8d4 Author: Adam Dickmeiss Date: Thu Sep 7 10:01:50 2006 +0000 Fix test for index.html in dist/isntall hook commit 57f7b1e14b5caa622f39d374c650757b2c3264ec Author: ja7 Date: Thu Sep 7 08:14:04 2006 +0000 fixed bug 656 commit e61e837408b141d4a56eaea0abea76ceebd19b7e Author: Adam Dickmeiss Date: Wed Sep 6 16:03:52 2006 +0000 Fix compilation for non- getaddrinfo case commit 2d165abc74dc0cf021d2e526dc728aa79db77637 Author: Adam Dickmeiss Date: Wed Sep 6 15:45:13 2006 +0000 Other spell fix. Bug #653 commit 9a92128c0862d044e09458f56ec165aadbf4a051 Author: Adam Dickmeiss Date: Wed Sep 6 15:21:26 2006 +0000 Dont return value in void function commit 11dbebdf973d652e486f2b5e457cc46d1478556f Author: Adam Dickmeiss Date: Wed Sep 6 15:01:53 2006 +0000 Fixed bug 655: IP reverse map no longer works. Renamed blocking element of COMSTACK to flags to make things more clearer. commit 162ee9de8503efe26215c487e10789f6cfcc6d17 Author: Adam Dickmeiss Date: Wed Sep 6 13:37:50 2006 +0000 Revert changes for PQF SRU queries. commit 54d355d7afb0060f176c956abcf7ad7b895211fc Author: Adam Dickmeiss Date: Wed Sep 6 13:15:48 2006 +0000 Changed the way PQF queries are encoded in SRU GET/POST. PQF search before: x-pquery=pqf . PQF search now: query=pqf&x-querytype=pqf . This makes the SRU request more conformant because the required query parameter is always present. PQF scan before: x-pScanClause=pqf . PQF scan now: scanClause=pqf&x-querytype=pqf . commit 926357dcfb7a359cc7a23766460cef5fe21156ee Author: Adam Dickmeiss Date: Wed Sep 6 09:35:39 2006 +0000 For the generic frontend server, the maximum record size is used as maximum size of incoming packages (SRU + Z39.50). The value until was previously only used in Z39.50 Init negotiation and, later, in a session controlled sizes of records returned. This is controlled using -k option. It can be specified, per server, with element maximumrecordsize in YAZ' GFS XML config. commit 134a99a3c201bff6f36ba09ab7d288606aed32eb Author: Adam Dickmeiss Date: Wed Sep 6 09:27:04 2006 +0000 Removed duplicated entity definitions commit 1b7adad61c65fb89f3ce61ee68dd87e5239841c5 Author: Adam Dickmeiss Date: Wed Sep 6 09:26:36 2006 +0000 Added id attributes for section tags commit 5d73d6c1e27e6c2431c852fe99f025433a8a822b Author: Adam Dickmeiss Date: Mon Sep 4 12:43:45 2006 +0000 Reduce HTMLFILES to index.html and do hooks to install/distrib html files. commit 057a87ae00b04e7b14a67258006dbfc485af2263 Author: Adam Dickmeiss Date: Mon Sep 4 12:37:31 2006 +0000 Fix spelling of SRW diagnostic 60 (bug 653). Change wording of SRW diagnostic 35. Added SRW diagnostic 93. commit 8d6d35f727159d4b6ed2dc941882704766f6e11e Author: Adam Dickmeiss Date: Mon Sep 4 12:09:53 2006 +0000 Version 2.1.29 commit bf8bec2480d8e6fe101c82f4048ca3b6742c39d0 Author: Adam Dickmeiss Date: Mon Sep 4 10:14:34 2006 +0000 Version 2.1.28. commit 2c1c3d5cf64f131f3cee4da100df0851f325fc95 Author: Adam Dickmeiss Date: Fri Sep 1 12:49:03 2006 +0000 More news about getaddrinfo. commit 7b839ae07ba4bdec3a27e604260598633683c842 Author: Adam Dickmeiss Date: Fri Sep 1 12:42:31 2006 +0000 Fix tcpip_set_blocking for Windows. Set comstack cerrno to CSYSERR in more cases for tcpip_get (was unset before). commit 2346d7d4a9084a41800893d212610af66250e536 Author: Adam Dickmeiss Date: Fri Sep 1 12:40:44 2006 +0000 For frontend server, only issue error if recv buffer is too large commit 95fb5d3a1421a0e170f76aafb4bc0ce27a8f2ddd Author: Adam Dickmeiss Date: Fri Sep 1 11:27:20 2006 +0000 Use last rather than first colon in IP address as port separator commit 8fbe86c3ff80837cb658fd6f237675ad6c17556d Author: Adam Dickmeiss Date: Fri Sep 1 10:39:09 2006 +0000 Using results of getaddrinfo to create sockets. This might just be what it takes to go IPV6. commit e886a85739782eec2e0b41af4dbfa0b80bb1f80b Author: Adam Dickmeiss Date: Thu Aug 31 18:19:53 2006 +0000 Fixed problem with unset variable (compose_char) in yaz_iconv system commit fbf02609a8c31033ac787df798a26ea603526d78 Author: Adam Dickmeiss Date: Thu Aug 31 15:40:51 2006 +0000 Debian package 2.1.27-3. commit 42c3fe90f5347870131d2da2203502aab34f0a7c Author: Adam Dickmeiss Date: Wed Aug 30 20:43:26 2006 +0000 Ideographic space gets converted to MARC-8 212321 instead of 212320 commit 6f17341a80d2c4558e4944c0731231994b3da8bc Author: Adam Dickmeiss Date: Wed Aug 30 20:40:18 2006 +0000 For duplicates in char conv trie, first conversion takes precedence commit fd1be24c165b60d462f5a7e6ca983f1f2eabbcdf Author: Adam Dickmeiss Date: Wed Aug 30 20:14:51 2006 +0000 In character conversion to MARC-8, use ESC$1 instead ESC(1 to switch to CJK character(s). commit 0b3ab2336aeda693cbecbf78ff956103f4e6d0cc Author: Adam Dickmeiss Date: Wed Aug 30 19:26:43 2006 +0000 Use getaddrinfo on Windows too commit b335dcd534287a207ef75b35e486df21293feddb Author: Adam Dickmeiss Date: Wed Aug 30 18:58:58 2006 +0000 TCP/IP COMSTACK uses getaddrinfo as resolver on systems that have it - instead of gethostbyname_r which is not portable. commit 6b152d04e55e9d23fc2dd0c948929ad5e2bd4c05 Author: Adam Dickmeiss Date: Wed Aug 30 12:55:12 2006 +0000 Define INADDR_NONE to -1 if undefined commit 508ab620b78b136e861fce7a292882c140a8ec60 Author: Adam Dickmeiss Date: Wed Aug 30 12:47:23 2006 +0000 Windows compile fix. commit 8a0937d20238aa0f26e564f7eacc0483acb102da Author: Adam Dickmeiss Date: Wed Aug 30 12:04:42 2006 +0000 Fixed bug #644: Using Non Reentrant gethostbyname causes SIGSEGV. Function gethostbyname_r is used instead of gethostbyname - when available. commit 2faa91f8c7375275f7435916b40be2176379f9ee Author: Adam Dickmeiss Date: Mon Aug 28 19:18:02 2006 +0000 Added refentryinfo with productname + productnumber commit ad61957d649158cf2e1018da95fa428aa8999f2a Author: Adam Dickmeiss Date: Mon Aug 28 18:35:07 2006 +0000 Add -l to cmdsynopsis list commit 704aa32f468be55eae352d34dfab808954086ae2 Author: Adam Dickmeiss Date: Mon Aug 28 16:54:52 2006 +0000 Debian package 2.1.27-2 commit e8ac1e56929fe175624fb63e619c184b58ef63b9 Author: Adam Dickmeiss Date: Mon Aug 28 14:18:18 2006 +0000 New option for yaz-marcdump -lpos=value which allows setting a portion of MARC header to a certain value. Added function yaz_mac_leader_spec. commit b925ea17d6f146a28d745b0d34e9eec6eafda21f Author: Adam Dickmeiss Date: Mon Aug 28 12:34:40 2006 +0000 Fixed bug #643: Bad sequence for MARC conversions from UTF-8 to MARC-8. Added test tstmarccol.sh for testing this. All sample ISO2709 marc records renamed to have suffix .marc. commit 3a78b70f2e785e67e08b26c8e50101d10e054dbb Author: Adam Dickmeiss Date: Mon Aug 28 12:31:18 2006 +0000 Reformat commit 41f87f5dc9c06c045eb94157dbd4009ad52bc02a Author: Adam Dickmeiss Date: Sun Aug 27 19:04:03 2006 +0000 Fixed bug #642: Problem with sub script symbols in conversion to MARC-8. commit 1188462f8e71086cd6792f7bacf76a37cad499c4 Author: Adam Dickmeiss Date: Fri Aug 25 14:57:04 2006 +0000 Fixed bug #641: Sending a too-big packet sometimes make ZOOM-C no-op subsequent operations. commit 24c0e59876a904ebb14dc0e2449de74716d0d178 Author: Heikki Levanto Date: Thu Aug 24 14:29:58 2006 +0000 Took away that -Werror from -d until all tests pass cleanly commit 83800da8ab73064cd1031adb7f44d07691f95d55 Author: Heikki Levanto Date: Thu Aug 24 13:41:18 2006 +0000 Added -Werror to the -d option, so that the compilation ends at the first warning. commit 32687c1504015e0675d49983707576f8db9b7bfc Author: Adam Dickmeiss Date: Thu Aug 24 13:25:44 2006 +0000 Make a facility for COMSTACK to reject too large packages. The maximum size can be set with cs_ste_max_recv_bytes. By default, maximum is 5000000 (approx 5 MB). If max size is received error comstack error CSBUFSIZE is returned. The generic frontend server checks for this error and sends a close + logs if this condition occur. commit 4cadb168b5477478ceea77aa53364c54e6b3cfba Author: Adam Dickmeiss Date: Thu Aug 24 13:19:44 2006 +0000 Allow this update test to read record data from standard input. commit 2651656d43e5d5d9483469f2b319e734f449f9b1 Author: Adam Dickmeiss Date: Thu Aug 24 13:11:27 2006 +0000 Doxygen comment. commit 346311370361ec56af79a2f7756c9a8db4f55a68 Author: Adam Dickmeiss Date: Thu Aug 24 13:10:03 2006 +0000 completeBER, completeBER_n no longer checks for a maximum size of 5 MB. Too large packages to be rejected are dealt with in comstack instead. commit feea53ffb3c3f9dc9eef15548a7fbca4007a7a60 Author: Adam Dickmeiss Date: Thu Aug 24 12:51:49 2006 +0000 Fixed bug #640: ZOOM_connection_connect() does not clear error indicators. commit 2e40cc0b39b9e96695e70316c677f035f7bfd52e Author: Adam Dickmeiss Date: Thu Aug 24 10:01:03 2006 +0000 Make a public function, yaz_write_UTF8_char, to encode a UTF-8 sequence. commit 8170d48cb0b650f3d8ec35e3ad1e5fe0046eeecc Author: Adam Dickmeiss Date: Fri Aug 18 06:30:05 2006 +0000 Move yaz_srw_get_core_v_1_1 to other source. Define it always regardless of Libxml2 being available or not. commit 1757a898179e7e22bf2505354c308e8e353c0b0b Author: Adam Dickmeiss Date: Wed Aug 16 22:50:06 2006 +0000 Towards 2.1.27. commit 184f0911dd1ef651b6ba659df0eb33ff2455014c Author: Adam Dickmeiss Date: Wed Aug 16 22:47:09 2006 +0000 Implemented bug #635: YAZ/ZOOM layer should include non SRU options in the HTTP/GET URL. ZOOM-C reads option extraArgs. If set the value of extraArgs is appended to SRU URI (POST/GET). Value is _raw_ URI part, such as x-id-a=v1&x-id-b=v2 . commit b7d2e2be0cdfdcd7703f4097165c5342202b9c65 Author: Adam Dickmeiss Date: Wed Aug 16 14:18:59 2006 +0000 Fixed bug #636: Bad rpn causes seg faults. Error occurs for ZOOM C when a Scan is sent. Bug has been present in YAZ since version 2.1.12. commit c0b99bede94110bb6a6e824e5596c9eabe6f82dc Author: Adam Dickmeiss Date: Tue Aug 15 13:34:39 2006 +0000 Towards 2.1.26. commit 536ffb34a8baf9ec637c2cc2340f79e1fe9441ed Author: Adam Dickmeiss Date: Tue Aug 15 13:31:07 2006 +0000 Fix ZOOM-C so that SOAP mode sends SOAP requests commit 73709d08e8f3c85cbca1c8d883aac65bd6ffe8d6 Author: Adam Dickmeiss Date: Tue Aug 15 13:30:00 2006 +0000 Fix interpretation of sru command commit 4b46dbf6d639a40bdeae0c280861505b937f34b9 Author: Adam Dickmeiss Date: Sun Aug 13 17:30:57 2006 +0000 Only declare nmem_text_node_cdata if Libxml2 is available commit 461dbf959bb1d556261c66300d6b0eabb0ae0909 Author: Adam Dickmeiss Date: Fri Aug 11 13:10:27 2006 +0000 Fixes for nemm_memory statistics commit d3263920e1450036b3add4b0a8c049136594afa1 Author: Adam Dickmeiss Date: Fri Aug 11 12:57:30 2006 +0000 Include XML2_CFLAGS in AM_CPPFLAGS commit c168cffc46e3b2b66e66e48f94f8e87b6566702b Author: Adam Dickmeiss Date: Fri Aug 11 12:50:23 2006 +0000 Changed prototype for nmem_text_node_cdata so that ptr is using Libxml2 type rather than void pointer. Added functions nmem_get_memory_in_use and nmem_get_memory_free which returns size of block memory in use and in free lists respectively. Added doxygen friendly comments for nmem.h. commit 2fbc11d055be3297fe0a5c5b29a0d01001859614 Author: Adam Dickmeiss Date: Fri Aug 11 12:43:52 2006 +0000 Cosmetic for doxygen commit e31b76c9b37f96159fb400f049c8e1c240a6e7be Author: Adam Dickmeiss Date: Wed Aug 9 14:03:25 2006 +0000 Mention bug #626 commit 428847338cc5b48d012b3b724c1d4ecefdc5614e Author: Adam Dickmeiss Date: Wed Aug 9 14:00:18 2006 +0000 Allow a flag nmem_release_in_heap to be set (1) in which case NMEMs are reassigned to the memory heap rather than re-used.. This should make it easier for valgrind etc to find problems. commit d3deed18d17648b5561f11b926be6d6eb1d9110c Author: Adam Dickmeiss Date: Tue Aug 8 20:58:52 2006 +0000 Attempted to fix bug #626. commit ae141e38583b7c31bdaccdb67b1a2098890f34ec Author: Adam Dickmeiss Date: Tue Aug 8 20:35:02 2006 +0000 Version 2.1.25. commit 57d5c3b970b0c95999f6894f3bbf3dc642b9010f Author: Adam Dickmeiss Date: Tue Aug 8 08:41:09 2006 +0000 Towards 2.1.24. commit e87336d1ad9587d0a7fdc805e2b53c77d435d67c Author: Adam Dickmeiss Date: Fri Aug 4 14:35:39 2006 +0000 Use yaz_read_UTF8_char instead of xmlGetUTF8Char commit 11d3339c3128f129598072d1372d4bcc4aaeab14 Author: Adam Dickmeiss Date: Thu Aug 3 09:27:23 2006 +0000 Updated to use iconv-1.9.2, libxml2 2.6.26, libxslt 1.1.17. Added missing dependences for generated files. commit ec63c95902e8aecab659cad218331dc9cc3f58b5 Author: Adam Dickmeiss Date: Tue Aug 1 12:03:58 2006 +0000 Removed nfaxml..xml files from dist list. Not in CVS yet commit fc5112436c75279092ded9a787e9fcaa26982fb2 Author: Adam Dickmeiss Date: Tue Aug 1 09:48:23 2006 +0000 Copy news from ChangeLog commit 8456bd3e19e2d0f4694ad97ecdc737a82c3d0816 Author: Adam Dickmeiss Date: Tue Aug 1 09:28:04 2006 +0000 Fixed yaz_marc_write_iso2709 to honor character set conversion. commit 6d146b66bddee1a1f0857b548c614047db43693f Author: Adam Dickmeiss Date: Mon Jul 31 12:15:02 2006 +0000 Fixed bug #627: addInfo not propagated by srw_bend_fetch() when rr.surrogate_flag==0. commit 142dd0c6126310587d23465d4b7a26fb2f46fa98 Author: Adam Dickmeiss Date: Mon Jul 31 11:47:04 2006 +0000 Omit description of loglevel in statserv_options_block. Bug #612 commit aef662a463f8175044f519754e178c1291ee3014 Author: Adam Dickmeiss Date: Mon Jul 31 11:42:32 2006 +0000 CCL proximity tests commit 0c76adcaa70c004d8eaab1842d286e4462ac6b11 Author: Adam Dickmeiss Date: Mon Jul 31 10:05:04 2006 +0000 Get rid of redundant parameter to yaz_log_to_file. Reformat a bit commit 2a34da356160199e2a655d6ddb8d4964aa40710c Author: Mike Taylor Date: Wed Jul 19 16:36:33 2006 +0000 Ignore nfaxmltest1 and nfaxmltest1.log commit fd3a0b7302ceed6425c05b6537cb654201cb1494 Author: Heikki Levanto Date: Fri Jul 14 13:06:37 2006 +0000 Loading of the nfa now possible from an xml file. Had to disable two tests, because make distcheck could not find the files I wanted to load. After that distcheck passes all right. commit 5ed3b6561d90d13f64be7f9ae8beaf4a0b3f8e32 Author: Heikki Levanto Date: Fri Jul 7 13:39:02 2006 +0000 Added YAZ_CHECK_TODO macro, used it in nfaxmltest1. Added rm *.log in tests make distclean. commit d1ff65fe4a7472a58a182d922c4a9729f0e17f9f Author: Marc Cromme Date: Fri Jul 7 13:02:21 2006 +0000 moved superflous session logging from log_session to log_sessiondetails commit 64f21c5f41690ce42f89bedae8c5ba72bdd12365 Author: Marc Cromme Date: Fri Jul 7 12:40:15 2006 +0000 added number of terms returned to client from Scan or SRWScan to request log line commit 200e95a52c5a411bad2a23f2857bb1d7e5512449 Author: Marc Cromme Date: Fri Jul 7 12:09:05 2006 +0000 replaced RPN: with RPN , CQL: with CQL, ans so forth in log messages commit 15e6706cde980cdf149151fa2ceb5630646fafa9 Author: Marc Cromme Date: Fri Jul 7 10:31:26 2006 +0000 further cleaning of log messages, related to bug #405 commit 67678f8e96470defa2beb7157f936993b6a3cff3 Author: Adam Dickmeiss Date: Fri Jul 7 08:41:20 2006 +0000 Added nfaxml commit e93af44cba69b4b77b114b32802c0eaf7d6e2bac Author: Adam Dickmeiss Date: Fri Jul 7 08:36:50 2006 +0000 Added nfa commit 02ac5c5808e74192c93eab3fb97f833419c7ed2b Author: Adam Dickmeiss Date: Fri Jul 7 08:36:36 2006 +0000 Changed two vars to be of type size_t rather than int commit ca24595c149c79bfc63e4c8fa97b9a7bd0fb58f4 Author: Adam Dickmeiss Date: Fri Jul 7 08:32:53 2006 +0000 Split YAZ DLL objs into only 3 groups commit f83e5541f06bc5587efb2231006841137ba9f6d4 Author: Adam Dickmeiss Date: Fri Jul 7 07:14:30 2006 +0000 Avoid decl after stmt commit c372821536d22c1b7efb290fb7d120ae5151adf2 Author: Adam Dickmeiss Date: Fri Jul 7 07:11:05 2006 +0000 Make test pass commit 5c35a542079457f2f5bcb9f367d6c449a2879822 Author: Adam Dickmeiss Date: Fri Jul 7 06:59:49 2006 +0000 Fix compilation on Windows. Reformat a bit commit 6693b35490291a774e7ca952bf7f6197dbdb94af Author: Marc Cromme Date: Thu Jul 6 15:06:12 2006 +0000 downgraded superflous log comment from YAZ_LOG to log_requestdetail commit 9efa56ca92283783db05f88eb52cf212eef909d9 Author: Marc Cromme Date: Thu Jul 6 14:54:29 2006 +0000 added database name in scan response, both Z39.50 and SRU still missing to fix Z39.50 scan response with respect to missing RPN: or CQL: identifier on APT display commit 48bd1822e09cb4e5545c3e0a0178e45a664da8c6 Author: Marc Cromme Date: Thu Jul 6 14:16:00 2006 +0000 partiallay fix bug #405 database name now part of request log like Z39.50 log: 16:09:55-06/07 lt-zebrasrv(2) [request] Search Default OK 0 1 1+0 RPN: @bla@bla or SRW log: 16:09:19-06/07 lt-zebrasrv(1) [request] SRWSearch Default OK 60 - 1+0 CQL: bla needs still fixing in scan request commit 60fa9058b47df51d7ca169c3c75b72988d345119 Author: Heikki Levanto Date: Thu Jul 6 14:06:17 2006 +0000 Fixed order of declarations commit fc42e0dc251df1d80ffc4c9279478d64d8a7027c Author: Heikki Levanto Date: Thu Jul 6 13:10:29 2006 +0000 Added yaz_log_trunc() to truncate the log file Added YAZ_CHECK_LOG macro for enabling logging in the test files Changed test.c to write to the log, if logging enabled Small changes to the interface of nfaxml's interface commit fc6d778b923000b5c6ad8e108b0b184178a9d33f Author: Adam Dickmeiss Date: Thu Jul 6 10:17:51 2006 +0000 For Libxml2 and friends, YAZ defines YAZ_HAVE_{XML2,XSLT,EXSLT) in the compitation phase, but also for yaz-config --cflags output. This allows us to have public headers with Libxml2 stuff in them . It should also, eventually, make Libxml2 checks redundant in packages using YAZ, such as yazproxy. commit 262ce1bfa2a3bc7045217e59281b4b59938a7da8 Author: Adam Dickmeiss Date: Thu Jul 6 08:28:37 2006 +0000 Dont use xmlDocPtr local commit 845a4f128f89f03b7b917b95ad5788e9d5e92145 Author: Adam Dickmeiss Date: Thu Jul 6 08:26:11 2006 +0000 Yet another fix commit 11d1675ce7431f8b58a9b4d458c1b7a929a51959 Author: Adam Dickmeiss Date: Thu Jul 6 07:45:07 2006 +0000 Fix compilation on systems where Libxml2 does not exist commit 9eb7c036e5fba056b392eb803bddb7e75382b15c Author: Adam Dickmeiss Date: Thu Jul 6 06:09:12 2006 +0000 Disabled log_xml_error because it doesn't work on older Libxml2 and also because YAZ already has a "catch lixml2 error" handler. commit 10e13ea8cb74077e0f48b5832ccb84b996672193 Author: Adam Dickmeiss Date: Thu Jul 6 06:08:19 2006 +0000 Removed HAVE_XML2, because public headers never should rely on configure's definitions. commit 8396cd72b6ca7b7154c1df50492fc0dfd004aad5 Author: Adam Dickmeiss Date: Wed Jul 5 14:50:16 2006 +0000 Changed cql2pqf transformation to use a different evaluation order. The new order is: always, relation, structure, position, truncation, index and relationModifier. Old order was: always, relation, relationModifier, structure, index, position, truncation. Note that the the latter ones override former ones for identical attributes.. The new scheme means that it is possible to override any existing attribute with a relationModifier. And also that it is possible to override everything for the index rule (except the ones listed in relationModifier). No order is perfect but this one, we believe, covers more real cases.. The "always" should have been called "default", since the attributes there can be overridden with all the rest. commit 18f92d330bb581f4d216346dbb73e2b642e720f9 Author: Adam Dickmeiss Date: Wed Jul 5 14:45:57 2006 +0000 Added cql2pqf which shows evalutation order commit 8383a8bbc36d4ef3bf8393efcb2fe346570d6a46 Author: Adam Dickmeiss Date: Wed Jul 5 13:05:32 2006 +0000 Simplify YAZ windows makefile commit b9e447111828c6056c35b8a5f11a386e843edb59 Author: Heikki Levanto Date: Wed Jul 5 08:12:48 2006 +0000 Added the (empty) test file commit e5db38d08a1f5d4848c4ab6789a491d69a164349 Author: Heikki Levanto Date: Wed Jul 5 08:10:40 2006 +0000 Removed duplicate nfatest1 commit fb61309506b52ca0dad9aea4135ceeda63707b0d Author: Heikki Levanto Date: Tue Jul 4 12:59:56 2006 +0000 Started the error handling in nfaxml. Not at all ready, but I want it in CVS. commit acf66fb3406fb7eb3e8c76cbe073cbe061080a5a Author: Adam Dickmeiss Date: Fri Jun 30 11:09:44 2006 +0000 Log format '%!' prints thread ID commit 7cf511b16827d66df48d91c74cf8cb308e3b10a8 Author: Adam Dickmeiss Date: Wed Jun 28 21:41:54 2006 +0000 Fix dist-hook so that make distcheck works commit 0920106c1999d6628e21f42f2109dc1b18fbe58c Author: Adam Dickmeiss Date: Tue Jun 27 12:23:11 2006 +0000 Configure build shared libraries by default. commit e87b70ae77aed9a47ee29f69ce2c531fddf394ce Author: Adam Dickmeiss Date: Tue Jun 20 21:20:51 2006 +0000 Fixed option negotation for Frontend server . Option triggerResourceCtrl was always set in response options. Should only be set if option is also set in client options. commit 7056994408e8dd24412d4d8b507ed2e6f003fb2d Author: Adam Dickmeiss Date: Fri Jun 16 12:34:32 2006 +0000 More work on a fix for bug #612. We could have "dup" receive record events before. And ZOOM_event could also miss events fired in case of task "completed". commit face40cf2923792ba65702faa415a624973bf681 Author: Adam Dickmeiss Date: Fri Jun 16 10:20:17 2006 +0000 Fire ZOOM_EVENT_RECV_RECORD for cached records. Bug #612. commit 44319ea2e76c8e53ceac85188f7bed0304f84767 Author: Adam Dickmeiss Date: Fri Jun 16 10:19:23 2006 +0000 Internal version 2.1.23. commit 2cfc0533b65410ab8462eb819fb4d70f6038c8fa Author: Adam Dickmeiss Date: Thu Jun 15 14:15:17 2006 +0000 Make ChangeLog in make dist rule commit bce52f3b3f5fbfc29be0dd841d6ced3bba6d16b4 Author: Adam Dickmeiss Date: Thu Jun 15 13:38:05 2006 +0000 Towards 2.1.22 commit c18ecdaa7ecb2cbc0dff2eebc40e50b07239e339 Author: Adam Dickmeiss Date: Thu Jun 15 12:53:56 2006 +0000 hanged bend_update_rr so that diagnostics are stored in uri, message and details.. Previously diagnostics were stored in errcode, errstring. Patch by Ko van der Sloot. Breaks binary compatibility.. but he's probably the only one affected. commit d168db0590bc858a1bc9bd5a6ea66abbcd8f7d7d Author: Adam Dickmeiss Date: Thu Jun 15 10:43:15 2006 +0000 Ignore zoomst10 commit 762b8f1410065bff60b1e174ec58e9d3d229c871 Author: Adam Dickmeiss Date: Thu Jun 15 10:38:35 2006 +0000 Make the zoom programs by default. Problem is that if we don't, we won't test whehter they even compile. commit a89ed3c40c9eab3721ccbd5e91919ba06208edbc Author: Adam Dickmeiss Date: Thu Jun 15 10:34:15 2006 +0000 Changed ZOOM_query_ccl2rpn function so that it takes a CCL config as input and return error information directly. commit d1fb65aa541a7a50654b8b224f0b5303ebd9c516 Author: Mike Taylor Date: Wed Jun 14 09:15:28 2006 +0000 Fix leak of temporary connections created by ZOOM_query_c[cq]l2rpn() Thanks to Adam for spotting this. commit cc078710f81ae60a8922044313b5c4733ac90639 Author: Adam Dickmeiss Date: Wed Jun 14 05:47:10 2006 +0000 Fix complication for YAZ, when libxml2 is not present. commit cb0268ee168504b47fbf6c41da9ddbfeb5ed73fb Author: Adam Dickmeiss Date: Tue Jun 13 20:47:03 2006 +0000 Use simpler version resource. commit 202031e1ebcbec1331575150e5708be67822b388 Author: Mike Taylor Date: Tue Jun 13 17:02:12 2006 +0000 Describe ZOOM CCL support. commit 29c6ebfc19c403aa99c7f462d2b36f056ffd4dbc Author: Mike Taylor Date: Tue Jun 13 16:27:23 2006 +0000 I think this now supports CCL in scan, but I've not tested it. commit 3ee7ef4088b265faffbdcabe3eb13d5f04a3b832 Author: Mike Taylor Date: Tue Jun 13 16:21:42 2006 +0000 Add ZOOM_query_ccl2rpn() and two new error-codes that it generates: ZOOM_ERROR_CCL_CONFIG and ZOOM_ERROR_CCL_PARSE Also, new static utility function ccl2pqf() which may be useful elsewhere. Note that CCL is _not_ supported in scanning. commit 6ab8e8163865c43772a6249cb2d12dfae83259ab Author: Mike Taylor Date: Tue Jun 13 16:20:04 2006 +0000 Add ZOOM_query_ccl2rpn() and two new error-codes that it generates: ZOOM_ERROR_CCL_CONFIG and ZOOM_ERROR_CCL_PARSE commit 21f7c16c6b1b694405dbc1760d3d6cb3caac38f6 Author: Adam Dickmeiss Date: Tue Jun 13 16:01:51 2006 +0000 Mention SRU rather than SRW (where appropriate). commit bb7daed8b7299999f1c25e4e768e5e510d4b7e98 Author: Adam Dickmeiss Date: Tue Jun 13 15:36:09 2006 +0000 Emacs shell-script for these. commit 7d280285b7dd17c9a71b8d458171f40f35dd6682 Author: Mike Taylor Date: Mon Jun 12 16:12:58 2006 +0000 Avoid pointer-sign clash in yaz_marc_decode_buf() call. commit df6700d5c88cff54c491ad2a1ae7d8426f92f044 Author: Adam Dickmeiss Date: Fri Jun 9 13:29:52 2006 +0000 News about SSL commit 0aad40fcb08a072aebd1dd352bc831f43d1644d7 Author: Adam Dickmeiss Date: Fri Jun 9 13:29:21 2006 +0000 YAZ' configure searches for OpenSSL by default. commit 61a2c61568817a54422e52a1fe242b8ee1857920 Author: Adam Dickmeiss Date: Fri Jun 9 12:40:53 2006 +0000 SSL comstack uses SL_CTX_use_certificate_chain_file rather than SL_CTX_use_certificate_file. See http://lists.indexdata.dk/pipermail/yazlist/2006-June/001615.html commit 1e5f589925b0cbb16ea52243d300b02438fb3229 Author: Adam Dickmeiss Date: Thu Jun 8 20:55:38 2006 +0000 Fix other bug in yaz_filepath_resolve commit 6f3861dbfb754ceffb8587c64e7631ae6ca3b650 Author: Adam Dickmeiss Date: Thu Jun 8 10:26:10 2006 +0000 Fixed bug #606: Empty path in yaz_filepath_resolve reads from / . Added a test for it : tst_tpath. commit acbea5b1df81001dc8c0e1eb75386796dde425b3 Author: Adam Dickmeiss Date: Wed Jun 7 18:25:32 2006 +0000 Use same case for VS_RUNTIME_MANIFEST var commit 11db1845a1dfbe1e6fbc1715f9edce6071f63e0d Author: Adam Dickmeiss Date: Wed Jun 7 18:23:22 2006 +0000 Include manifest for msvcr80.dll commit 24e8ba4deca04c30ead995e4c961f08027e120a9 Author: Adam Dickmeiss Date: Wed Jun 7 14:25:43 2006 +0000 Remove debug DLLs part of dist. Add .manifest files commit c7e1a7aece8464775951ce9186988f2a881c867f Author: Adam Dickmeiss Date: Wed Jun 7 11:18:04 2006 +0000 Bundle with Visual Studio 8 by default commit f26962f9dfdbcd23a08a7f0880b1d9f8a36cbaf9 Author: Adam Dickmeiss Date: Wed Jun 7 11:17:22 2006 +0000 Removed commit 02c239d1b4b0ea8b03bfb64d08605efdc9f96705 Author: Adam Dickmeiss Date: Wed Jun 7 11:13:28 2006 +0000 Version 1.2.21 commit bb25a09cf2ddafa682867ae6a5ab2185dfa74e75 Author: Adam Dickmeiss Date: Wed Jun 7 10:51:14 2006 +0000 Changed a few types from int to size_t commit 2e5072f935bd399752daff78d8b4d347b4787fc0 Author: Adam Dickmeiss Date: Wed Jun 7 10:48:45 2006 +0000 Version 1.2.21 commit 73f741401a71bd024f03302a75403227d5bf7721 Author: Adam Dickmeiss Date: Wed Jun 7 09:25:47 2006 +0000 For VS, define _CRT_NONSTDC_NO_DEPRECATE, so we don't warnings about good functions such as getpid, chdir, etc. commit 72b7bb88d5ea8551193180c9e0f7869dd111db45 Author: Adam Dickmeiss Date: Mon Jun 5 18:13:01 2006 +0000 Use defined names for SRW diagnostics commit 88f8308cbfa3915b662f86c522d40b8f9753da58 Author: Adam Dickmeiss Date: Mon Jun 5 18:08:10 2006 +0000 Fixed bug #601: SRU decode does not issue diagnostic for bad parameter values. commit fd3974eae119ffd3ec0eded028a828bc6396f543 Author: Adam Dickmeiss Date: Fri Jun 2 14:01:34 2006 +0000 Add pkg-config to Builld-Depends commit 6deaadd7501d45aaf921edb7526689d1b95681a6 Author: Adam Dickmeiss Date: Fri Jun 2 13:31:21 2006 +0000 .dsl,.dsl not part of windows dist commit 84c9ccff7f7deb03ea8d8318c1bcad2d7fd66c3e Author: Adam Dickmeiss Date: Fri Jun 2 13:17:23 2006 +0000 Towards 2.1.20 commit 9903eb091689a6269e28742a16cb6a8705d96675 Author: Adam Dickmeiss Date: Fri Jun 2 13:12:53 2006 +0000 Bug #600: SRU GET, POST support for yaz-client. Introduced command 'sru' which selects method SOAP/GET/POST. commit d58b3c28b5efc7106f6ed65cd52c8ad56de7b6b9 Author: Adam Dickmeiss Date: Fri Jun 2 13:08:27 2006 +0000 Implemented yaz_sru_post_encode which builds a SRU POST requeste. Implemented z_get_HTTP_Request_host_path which builds a HTTP request using host, path. Updated ZOOM C to use these. commit 1429ec287c69a4a0b6a77b063af6796c529ff796 Author: Adam Dickmeiss Date: Fri Jun 2 10:50:28 2006 +0000 Move .xsl.in's to id.xsl's .. so that we reduce .in files further. commit 2fd3755bf6786b61d6b6a2342163cf1405a896cf Author: Sebastian Hammer Date: Wed May 31 16:20:41 2006 +0000 Set present->comp to NULL when no ESN is present in srw_bend_search commit ec938a2fa1feb3422d2533cbb6f7b66423d5ae80 Author: Adam Dickmeiss Date: Wed May 31 15:32:43 2006 +0000 Fixed bug #599: ODR error on incoming PDU. Error was in the ODR buffer handling for ZOOM packages (extended services). commit 3f282496986cbae7fd4bd7f95d44bf47a2cc6874 Author: Adam Dickmeiss Date: Tue May 30 22:00:09 2006 +0000 Added one type cast from char to unsigned char commit 4d1e4573d65a535e8f64527fd42434dcb08f0041 Author: Adam Dickmeiss Date: Tue May 30 21:39:15 2006 +0000 Fixed bug #598: Allow missingValueAction to be specified for sortSpec string. By default, the missing value action is null. Use ! to specify "abort". Use = followed by stringvalue to specify default value. commit f16d85c47887a02f0e1ed74dfd6d4977c1017f8a Author: Sebastian Hammer Date: Tue May 30 14:56:05 2006 +0000 Added entry about present handler commit f33b2c6a4acc73dd7c876cb5c02aa75b2e9156b6 Author: Sebastian Hammer Date: Tue May 30 04:50:04 2006 +0000 Simplified comp for present called from srw_bend_search commit 255028c8f59212f89479222cdd4477a5a6367785 Author: Sebastian Hammer Date: Tue May 30 04:01:55 2006 +0000 Arranged to call bend_present if records are displayed in SR* search commit d775854eb4b203433c54239cc447f20511850ef9 Author: Adam Dickmeiss Date: Sun May 28 19:56:24 2006 +0000 Using man COMPILE_HTML, COMPILE_MAN.. yaz.xml no longer generated by configure - only local.ent is. commit fd68bc7487e4d6b547999f21718955221f1c48a4 Author: Adam Dickmeiss Date: Fri May 26 15:46:44 2006 +0000 Define HAVE_XSLTSAVERESULTTOSTRING for Windows commit 471c6dccdbb5c5a9c08b24c9abd6a1dcda29e79e Author: Adam Dickmeiss Date: Fri May 26 15:09:03 2006 +0000 Revert commit 6bf59f76b5de3421afc0accae54d0829586398a8 Author: Adam Dickmeiss Date: Fri May 26 15:07:08 2006 +0000 Check for xsltSaveResultToString presence. commit 534fdfbf5a8c27f4695c1b73be5636e369ca1acc Author: Mike Taylor Date: Thu May 25 13:03:35 2006 +0000 Note two further Debain packages required for CVS build. commit 44e854d75508bb9af4a36f2644db4757e30ac985 Author: Adam Dickmeiss Date: Thu May 25 07:43:58 2006 +0000 Use xsltSaveResultToString instead of xmlDocDumpFormatMemory in record conversion utility. See also bug #594. commit 1ecd49d730df37f92f997957e2c9f32158bc5d0f Author: Adam Dickmeiss Date: Wed May 24 16:21:02 2006 +0000 Update info about depending packages commit 3b4164d129d859eb9595d7ab2297816e86b4f75e Author: Adam Dickmeiss Date: Wed May 24 14:44:01 2006 +0000 ../configure + make dist works from CVS commit 6e1014e43172e8b894b7726c46b146a465f2fb43 Author: Adam Dickmeiss Date: Wed May 24 14:19:32 2006 +0000 Align yaz main doc to use same header as man pages xml docs commit 85aea22217efed1ef50315fd98061dfbdab81e9f Author: Adam Dickmeiss Date: Wed May 24 12:49:45 2006 +0000 Added URI in XMl header commit c3db1e5bdc42eb3ba6c50d18b200e7c816ee6e9e Author: Adam Dickmeiss Date: Wed May 24 12:33:21 2006 +0000 Documentation for YAZ is now based on the Docbook XML/XSLT using xsltproc + N Walsh's stylesheets. It means that the CVS version of YAZ is no longer depending on jade/openjade or docbook-to-man scripts. PDF is no longer part of the distribution - but can optionally be made using DSSSL/jadetex or FOP. commit 713e1de05a39d3bab7f9becc34d7ebf244c26651 Author: Adam Dickmeiss Date: Wed May 24 09:40:26 2006 +0000 Pass SRCDIR to csvto tcl script commit 11b3a0d1c1be30f5052bf2eba788229df63f13b9 Author: Adam Dickmeiss Date: Tue May 23 20:43:37 2006 +0000 Fix output dir for diagnostics headers commit 6fff59263797b6dd62a12fd389543cb3b5416d5b Author: Adam Dickmeiss Date: Tue May 23 20:39:27 2006 +0000 Fix output dir for ASN.1 headers commit 72204554b2173de3d9aca31b28c69072f63ddbfe Author: Adam Dickmeiss Date: Tue May 23 19:13:44 2006 +0000 Mention docbook-to-man again commit 12be48d5f580afc49f3a08db84ddfddad0334509 Author: Adam Dickmeiss Date: Tue May 23 19:09:13 2006 +0000 Use docbook to man script wrapper commit 2b443dfd9c08a753c3e3e3f85b49aedac28c6bd9 Author: Adam Dickmeiss Date: Tue May 23 14:07:49 2006 +0000 No longer require GNU make. Update list of dependency ports commit aecf826f8ee83290a18c2c1415b55a46093c1a45 Author: Adam Dickmeiss Date: Tue May 23 13:43:40 2006 +0000 Fixed bug #592: CVS version of YAZ require gnu make. commit a1adc770bc8b74097e1d4388d16b1246063da7e7 Author: Adam Dickmeiss Date: Tue May 23 13:17:30 2006 +0000 Fixed bug #593: Buffers too small for MARC string buffers. commit 1a1922019030ff181fbe08491cf1760dca8d1686 Author: Marc Cromme Date: Tue May 23 10:05:28 2006 +0000 added YAZ to config output commit 277f94b778fbd0c608afb3efa9914aae6990aaf0 Author: Adam Dickmeiss Date: Tue May 23 09:54:12 2006 +0000 CVS build on FreeBSD fixes: libtool, show info about packages needed to build from commit 00abdd969f52b04d5d53e4645c30596f4040060b Author: Mike Taylor Date: Tue May 23 09:43:37 2006 +0000 Comment typo commit f230abfaa62e6a2a56ae17f1a531c55ba2973b92 Author: Marc Cromme Date: Tue May 23 09:40:43 2006 +0000 added configuration display and instructions commit 51755f9b44a6ab87089c169cb7c64b240833a909 Author: Adam Dickmeiss Date: Tue May 23 09:13:50 2006 +0000 Added check for tclsh programs commit 9f5de9011e59569e0bae5b484defe53bda38a457 Author: Adam Dickmeiss Date: Mon May 22 19:08:38 2006 +0000 Fix execution of tclsh. commit 057984051852854ce4125491a5acd2c54baa01e2 Author: Mike Taylor Date: Mon May 22 15:52:40 2006 +0000 Typo in comment commit 3f623df63496cd285de7cfb47b1bf902ac114fbd Author: Mike Taylor Date: Mon May 22 15:16:59 2006 +0000 Use FreeBSD's tclsh8.4 if it exists commit 243dcdc032523016724ee50765a8a58e9d808209 Author: Mike Taylor Date: Mon May 22 15:15:26 2006 +0000 Remind BSD users to use gmake rather than make. commit 2d247ac3b6ac4a8422e3260c3891ee1374a41c0a Author: Mike Taylor Date: Mon May 22 12:11:45 2006 +0000 Detect FreeBSD, where all the auto* tools are screwed up, and make appropriate allowances for it. *sigh* commit 95d8bd04e10519a635972a24176270ef4dbe8d2c Author: Mike Taylor Date: Wed May 17 14:12:09 2006 +0000 Fix mistake: fuzzy matching is 5=103, not 5=102 Add truncation.regexp, 5=102 commit 37287b6049ca23d7fa8e84f532eefa7e35f66520 Author: Adam Dickmeiss Date: Tue May 16 11:29:45 2006 +0000 YAZ RPM require libxslt commit 5a0004a1d8cdf8258c8b823d9026939411d2238f Author: Adam Dickmeiss Date: Sun May 14 20:03:19 2006 +0000 Removed a few yaz_log calls commit ba7e55ba0b21f2ead3ca112cc4fe9f94a80fb06a Author: Sebastian Hammer Date: Sat May 13 03:56:31 2006 +0000 Call 'present' backend function (when present) from process_searchResponse when piggybacking is in effect. Several SimpleServer gateways assume this, and I believe it's a mistake that it hasn't been called before. commit 548d17fb92d2efaa1ef637b56fcec09a7261e842 Author: Heikki Levanto Date: Wed May 10 13:58:46 2006 +0000 Higher-level interfaces, fixing the bugs these uncovered. Better defined return codes, doxygen comments, etc. commit 821e247a6d064e29703c74b21f755baaf4cc1e6e Author: Heikki Levanto Date: Wed May 10 12:52:17 2006 +0000 Added a way to get the verbosity to test programs commit 7e318eefe6a4dd4906261feb766cae881352ba07 Author: Adam Dickmeiss Date: Wed May 10 07:34:38 2006 +0000 Introduce a hash-table for the ZOOM C record caching system; makes things faster if a large number of records is fetched. commit 922617826ecc28cbdcbc5e6d5037843c7985a408 Author: Adam Dickmeiss Date: Tue May 9 21:37:02 2006 +0000 Finish Latin-1 to MARC-8 conversion handling. commit b4121b5416890fc21c34c762493161382e30a756 Author: Mike Taylor Date: Tue May 9 16:13:28 2006 +0000 Temporary fix for ZOOM_resultset_record()'s force_sync. commit 5008c98db7e9ca6291347b6ecddb946aff92d0fe Author: Adam Dickmeiss Date: Tue May 9 13:39:46 2006 +0000 Fixes for retrieval handling in SRU mode.. The "virtual" record syntax was not seen as XML , and, hence, there could be strange matches. Changed configuration format: schema and backendschema renamed to name and backendname respectively. commit 8489ef773c3c744b841f9b247dd9881bc3742473 Author: Adam Dickmeiss Date: Tue May 9 11:35:28 2006 +0000 Use OID_STR_MAX for size of oid dot string commit 7d849f69c1386fbeb27eefcc60b8d0ffbdd5218c Author: Mike Taylor Date: Tue May 9 11:09:09 2006 +0000 Render OID as string when used in error-messages. -- was type-mismatch of printf("%s", oid) commit 65f297c24c59e95f860f29928d3588c5dc98ba4c Author: Adam Dickmeiss Date: Mon May 8 19:48:26 2006 +0000 Change return values for yaz_retrieval_request a bit and improve diagnostics in the case where retrieval match fails. commit 750bc4f7094d6de74c64cfd028d66ae1261be1d1 Author: Adam Dickmeiss Date: Mon May 8 19:45:29 2006 +0000 Define max length of OID dot string: OID_STR_MAX. commit bb832e89b91e9e5fdac2e5e3ec577b903ed284cd Author: Adam Dickmeiss Date: Mon May 8 19:44:18 2006 +0000 Enable any element set and grs-1 in sample commit 5e758b60195c4115994972066dbeed7529a83cc9 Author: Sebastian Hammer Date: Mon May 8 16:58:25 2006 +0000 Calling exsltRegisterAll instead of exsltDynRegister commit fe75bce77d280de03589a9bca7e40f3c0ef79817 Author: Adam Dickmeiss Date: Mon May 8 12:20:48 2006 +0000 Using macros YAZ_LIBXML2, YAZ_LIBXSLT, YAZ_LIBEXSLT commit 62cdf9134790da1c26687d687b90528e477c07d5 Author: Adam Dickmeiss Date: Mon May 8 11:58:37 2006 +0000 Changed behavior of yaz_retrieval_request so that no rules, i.e. no retrieval elements, results in "success" (return value of 0). commit dbf7b94dbfd143f38e7e24132eca144474a65bfa Author: Adam Dickmeiss Date: Mon May 8 11:50:57 2006 +0000 Avoid using "pkg-config libxslt" on systems that don't report cflags which include libxml2. This is the case for Debian woody. For a system like that revert to xslt-config. commit 0b20fc2dcafe8d56501a3b34626b3174c60eefb5 Author: Adam Dickmeiss Date: Mon May 8 10:16:46 2006 +0000 LibEXSLT support. New configure option --with-exslt. commit 96a07bee0a27a24ba02657132fbe702f6c7beb5d Author: Adam Dickmeiss Date: Sun May 7 20:57:26 2006 +0000 Rename current_global_list to default_completer_list and localize it commit e67ac76103683fca15a5961b81068b3eb92bb9cd Author: Adam Dickmeiss Date: Sun May 7 20:32:56 2006 +0000 use strcmp instead of stricmp for -install,-remove options commit 248491b25960ff7c08860dd0065f7e04cc550e90 Author: Adam Dickmeiss Date: Sun May 7 19:43:00 2006 +0000 Rename curret_global_list to current_global_list; reformat. No code changes commit 16d6519a78fe4917ec865a7d084672579ab317ae Author: Adam Dickmeiss Date: Sun May 7 19:38:58 2006 +0000 tabcomplete only if readline is in use (second attempt) commit 60f5103f542e3f6dd2e22b6df7015f7bc4b3a937 Author: Adam Dickmeiss Date: Sun May 7 19:37:23 2006 +0000 tabcomplete only if readline is in use commit 5f9ae0e96f731be9abf8bc2eca538681fbd0279f Author: Adam Dickmeiss Date: Sun May 7 19:15:16 2006 +0000 Do nothing in command_generator if no readline is present commit 310bcbad07ab48568d6f82176241ba304192a43d Author: Adam Dickmeiss Date: Sun May 7 19:13:55 2006 +0000 Do nothing in cmd_register_tab if no readline is present commit df8e6c1a312cfc928aede6fc5eb0efa39364cfa6 Author: Adam Dickmeiss Date: Sun May 7 19:07:10 2006 +0000 Replace a few strdup/free with xstrdup/xfree commit e7004bad189b432530d20465b7b89c7777fd5645 Author: Adam Dickmeiss Date: Sun May 7 18:35:47 2006 +0000 Use strchr instead of index (which was only standard in 4.3 BSD). commit 34841706b5b43761ba4a3f3c6b0fd667b775654e Author: Adam Dickmeiss Date: Sun May 7 18:26:25 2006 +0000 Reformat comments for Doxygen commit 27481680fb1a69456e789e5bc8e1ec914337287d Author: Adam Dickmeiss Date: Sun May 7 17:45:41 2006 +0000 Added more tests for retrieval/record_conv system. For retrieval, fixed error handling which occurred in the case where syntax attribute was missing from retrieval element. Libxml2/libxslt errors may be sent to yaz_log via new utility libxml2_error_to_yazlog. commit 783d4b3820a54d9079499a4b09ad4b98b709dbde Author: Adam Dickmeiss Date: Sun May 7 17:43:42 2006 +0000 Added retrieval + libxml2_error commit d305f63028800611fd05a3bfc54db24e2634d7ad Author: Adam Dickmeiss Date: Sun May 7 14:48:24 2006 +0000 Added retrieval handling support in Generic Frontend Server to support conversion between MARC/XML as well as XSLTtransforms. See etc/yazgfs.xml for an example. commit a1c7e0185783d67c7d6022ae7d70dd890b7c0309 Author: Adam Dickmeiss Date: Sun May 7 14:31:30 2006 +0000 Initialize username and password in yaz_srw_codec. commit af895ebea6200bb5a752ae312b83a6f78edfad08 Author: Sebastian Hammer Date: Sat May 6 00:52:15 2006 +0000 Removed diagnostic output that shouldn't have been checked in. commit 0458d3cea29ddea65b66f7529590c21ac198bc0f Author: Sebastian Hammer Date: Sat May 6 00:51:04 2006 +0000 Addition of authentication parameters commit 9a931f88892b2d8be796bfafa07e430307b7c5f6 Author: Sebastian Hammer Date: Fri May 5 20:02:22 2006 +0000 Supporting Username/password in SRU server mode, either through x-username/x-password SRU parameters, or through Basic HTTP authentication. commit 0de95154d8512ee46d6b706fe019f8d1ffc18827 Author: Adam Dickmeiss Date: Fri May 5 18:37:08 2006 +0000 Implement yaz_retrieval_configure. commit c43225b3038c3fa459ac60202abf35183ad4f923 Author: Heikki Levanto Date: Fri May 5 14:04:03 2006 +0000 Removed a debug print I had forgotten in commit 065092597b2e0234d65b25b31930cbe98ec59738 Author: Heikki Levanto Date: Fri May 5 14:02:27 2006 +0000 Range converter for actually converting character ranges Fixed a nasty off-by-one in the endpoints of backrefs. Added tests for them. commit 440f23de23b0c2bce38451617cd69eb106b5c2df Author: Heikki Levanto Date: Fri May 5 09:14:42 2006 +0000 Fixed the interface to match, merged with Adam's whitespace patch, First converters work commit 76b209145568a179bb21a8d43db003ffe605b6d5 Author: Adam Dickmeiss Date: Thu May 4 20:00:45 2006 +0000 First code bits of record retrieval code commit 2ca607a50dd3ebdb0b05ce6cc1df66caa78eb544 Author: Adam Dickmeiss Date: Thu May 4 19:59:11 2006 +0000 Predefine HAVE_XSLT, HAVE_XML2 for Doxygen commit 2af6f28e5d261fa873d96611a10c56fc76681685 Author: Adam Dickmeiss Date: Thu May 4 18:58:54 2006 +0000 Reformat with a little more spacing (no code changes) commit 68175726e7a40ecd8bd16e63605b2196fbeffb9e Author: Adam Dickmeiss Date: Thu May 4 18:58:24 2006 +0000 Fixed one doxygen warning commit c55803155b03efbc55974dd5d6655f8f688e2098 Author: Adam Dickmeiss Date: Thu May 4 18:22:59 2006 +0000 Ensure tst_record_conv.c may include config.h commit 6db6a25098ef14e638db1e185330e2ba5b75e631 Author: Adam Dickmeiss Date: Thu May 4 15:31:04 2006 +0000 Make things compile --without-xslt commit b77f4b5c2b191b83cf3f213faa8b6b263e36fea4 Author: Heikki Levanto Date: Wed May 3 13:47:35 2006 +0000 The NFA seems to work now (as far as I can see). Still needs to do the output side of it. commit e26f2eaefc5fae6784beb45a1435a4fbfa25f25c Author: Adam Dickmeiss Date: Wed May 3 13:38:12 2006 +0000 Update Windows installation for libxslt enabling. commit 4be8e145d9cedeeedba4c03ec9b4caeb9e0488de Author: Adam Dickmeiss Date: Wed May 3 13:31:53 2006 +0000 Fix makefile. Added record_conv.c commit fdd2ce97843169097e9d808c78d8740d6c0d1cca Author: Adam Dickmeiss Date: Wed May 3 13:27:20 2006 +0000 libxslt part of windows build commit e70cbdfde382dd605d58fc112cc2458cfce37382 Author: Adam Dickmeiss Date: Wed May 3 13:04:46 2006 +0000 Record conversion utility (yaz_record_conv_t) supports marc and XSLT conversions. commit 6e30ece4502a0c2c875be511d2ec051598292133 Author: Adam Dickmeiss Date: Wed May 3 13:01:04 2006 +0000 Prepare test for latin-1 -> utf-8 with combo chars commit fc72f24cd9b585c819c6678befa7fffc829e9054 Author: Mike Taylor Date: Wed May 3 12:09:30 2006 +0000 Ignore generated "nfatest1" commit fd3508c19a217ebd059552cc301c76d203d03524 Author: Adam Dickmeiss Date: Wed May 3 12:02:23 2006 +0000 YAZ optionally uses libxslt. Check for xml2 obsoleted because libxslt includes it. commit ab2df1c8677d1403c766eb4dc7b9e699c7db1329 Author: Mike Taylor Date: Wed May 3 11:36:14 2006 +0000 Avoid mixed stmt/dcl commit 2b8a6e970b5ed4182a67d423ba4ba5dc74ffc6bb Author: Heikki Levanto Date: Wed May 3 11:09:59 2006 +0000 Added nfa.h to makefile.am. Work continues on the nfa commit 4d994a119a1949522fe229270983ba1b1b399c6a Author: Heikki Levanto Date: Wed May 3 09:04:33 2006 +0000 Added my new NFA character normalizer. Not yet ready, but want to have it in the cvs already now. commit a0e27aac0589d493172c73f6660b844fc6460d7c Author: Adam Dickmeiss Date: Tue May 2 20:47:45 2006 +0000 Added nmem_text_node_cdata which takes xmlNode CDATA content and creates NMEM string. Added first parts of record conversion utility (yaz_record_conv_t). commit 6fda497bc3df847077e0d72f487c2251df522715 Author: Adam Dickmeiss Date: Tue May 2 12:11:08 2006 +0000 Fixed Doxygen comments commit b2a7266c8dec5c194057670e0591b9d2cdbd3591 Author: Adam Dickmeiss Date: Sun Apr 30 07:23:08 2006 +0000 Dont use /YX commit a17a363a19bd13793c0d40dafa5a51eabf073513 Author: Adam Dickmeiss Date: Sun Apr 30 06:50:09 2006 +0000 Cosmetic fix commit b3b8edd6b3ce48471e5ed6b6870a065b2c172b5e Author: Marc Cromme Date: Thu Apr 27 20:08:49 2006 +0000 bumped yaz number to 2.1.19-1 the resting places commit 199ffcf6f817974587a9d5bcf8066531ed0f45ad Author: Adam Dickmeiss Date: Thu Apr 27 08:39:05 2006 +0000 Always include sys/stat.h commit 228ac8e67af8286708bf4ef65622e3d742272d61 Author: Heikki Levanto Date: Wed Apr 26 16:58:27 2006 +0000 Simplified outout to keep it on one line, even when verbose commit e4060b606fade264168221db5e3782d321f6918a Author: Adam Dickmeiss Date: Wed Apr 26 10:01:31 2006 +0000 More comments on path.{c,h} functions commit 68db5d6050f959bd126eec404447019b6176d2a1 Author: Adam Dickmeiss Date: Wed Apr 26 09:40:42 2006 +0000 Bump version to 2.1.19. Added function yaz_filepath_resolve. commit 23403c6f31b26b0e819a47980c42f3fc8c57d84d Author: Marc Cromme Date: Tue Apr 25 11:25:08 2006 +0000 reverting to sgml mode commit 711f37334de1dde9fee4dfdee2e9263f42373494 Author: Adam Dickmeiss Date: Mon Apr 24 23:21:25 2006 +0000 Added support for a new character set MARC8s identical to MARC8 except that it converts combined characters to single Unicode characters in the Latin-1 range (when possible). commit 6ac8148711c38d7c2a6c745d7c5cdb4086e052f9 Author: Marc Cromme Date: Mon Apr 24 12:54:08 2006 +0000 insered Emacs nxml-mode in bottom of XML files commit f0fff840ae259cab0b1c17297c4367172a7cd229 Author: Marc Cromme Date: Mon Apr 24 12:41:00 2006 +0000 corrected DOCTYPE header and called emacs nxml-mode instead of sgml-mode in bottom of files commit ef696802e6afb3df60b27070a432a48f064dc777 Author: Adam Dickmeiss Date: Mon Apr 24 12:12:24 2006 +0000 Fix a couple of URL entities commit 16ee7ff60aee87829916837bcb2a200ce72870d9 Author: Adam Dickmeiss Date: Mon Apr 24 10:30:44 2006 +0000 Cast to long commit 66d2b0af37de24e74184794825e08c540eac66c1 Author: Adam Dickmeiss Date: Mon Apr 24 09:35:10 2006 +0000 /usr/share/yaz in libyaz-devel package commit ffb747f54b057aa5c1e0f881c66296f7b2c4a2bc Author: Adam Dickmeiss Date: Mon Apr 24 09:26:10 2006 +0000 Ignore dox directory commit 6c0db91b0e046d33e2072ab007a7e31748aa90c6 Author: Adam Dickmeiss Date: Mon Apr 24 09:24:59 2006 +0000 Update release date commit 4641562b204d07a8fca9e1fa94c86593766fa165 Author: Adam Dickmeiss Date: Mon Apr 24 09:21:35 2006 +0000 Use URL entities for most link references commit 40db0160985e6d6269c005f15865421f681b0e3a Author: Adam Dickmeiss Date: Fri Apr 21 14:24:53 2006 +0000 Debian package changes: moved yaz.7 from libyaz to libyaz-dev; moved man page lists to .manpages files. commit 169c8b924e05c97b2128180cd7854ab8e513fe29 Author: Adam Dickmeiss Date: Fri Apr 21 13:50:26 2006 +0000 Back to Debian package libyaz (from libyaz2 experiment) commit b8fe093a9e425da79f7369d0a33dbaa9d1849698 Author: Marc Cromme Date: Fri Apr 21 13:02:47 2006 +0000 removed unnecessary misc:Depends commit 0b3c4bfa5acbf82ad95fb7041c3c3c29b350553a Author: Adam Dickmeiss Date: Fri Apr 21 12:54:52 2006 +0000 buildconf.sh adds GCC option -Wdeclaration-after-statement commit 3a7b7e75cb734e2edf9ef1469e9f554aad761fc0 Author: Marc Cromme Date: Fri Apr 21 12:54:36 2006 +0000 Debian package upgrade to follow policy 3.6.2 and renamed libjaz to libyaz2. Virtual package libyaz created for transition period. Lib API number bumped to 2.1.0 commit a9ad05863969a9803a709f264db875bee3faa67b Author: Adam Dickmeiss Date: Fri Apr 21 12:40:56 2006 +0000 Added comment about dh_makeshlibs in debian/rules commit 3180ed0f5c4e4a4de3be282ae3bf10adb0eb7c57 Author: Adam Dickmeiss Date: Fri Apr 21 10:30:14 2006 +0000 Revert last change commit d57ade59211707b9bcfacc61039e446c9fa3f36f Author: Adam Dickmeiss Date: Fri Apr 21 10:28:06 2006 +0000 Added several type casts due to no portable way of doing printf of a size_t variable. commit 3897c9638ab22fb5374307f63d6403c0ed754a43 Author: Adam Dickmeiss Date: Fri Apr 21 08:57:29 2006 +0000 Added common directory to be part of yaz-doc commit 8e555f1ff74875281e3c42635636bc4125d4cf4f Author: Adam Dickmeiss Date: Fri Apr 21 08:53:56 2006 +0000 API version 2.1.17 commit abd3118d2280ffe01b4ff3a7b36428b7b5c91827 Author: Adam Dickmeiss Date: Thu Apr 20 20:50:51 2006 +0000 More Doxygen stuff; for auto-generated code too commit d02fa05385c5bc77f4faafd2117bdba699e15cbf Author: Adam Dickmeiss Date: Thu Apr 20 20:45:38 2006 +0000 Remove Doxyfile. There is already another one in root dir of YAZ commit e26a0bc5ba4e66ca15bc2863b545e7d6b7d9752e Author: Adam Dickmeiss Date: Thu Apr 20 20:35:02 2006 +0000 Exteded yaz_marc_write_marcxhange new parameters, format and type. More Doxygen comments. commit 98128a8684aa2474140872c25e8c2f5a231710b1 Author: Adam Dickmeiss Date: Thu Apr 20 19:47:01 2006 +0000 Added utility yaz_marc_modify_leader which modifies a one or more characters in a MARC leader. Function yaz_write_marcxml and output mode YAZ_MARC_MARCXML sets leader byte at pos = 'a'. Actually this is not new (YAZ 2.1.16 did that too, but it was done differently). commit fc270c4515cd42f6bd7f749355464a9498badfe5 Author: Adam Dickmeiss Date: Thu Apr 20 13:46:55 2006 +0000 Fix path to id.png in copy commit 51d0b65c7d4af16f74f05638e242095ec09c7b80 Author: Adam Dickmeiss Date: Thu Apr 20 13:45:20 2006 +0000 Simplify file specs for devel+doc by using File /r. commit cb6a871ae1cac404bd751006a0ff03977f25504a Author: Adam Dickmeiss Date: Thu Apr 20 13:04:16 2006 +0000 Added common to SUBDIRS commit d79fc07b26da0378e2c036911fe1491fc3500a09 Author: Adam Dickmeiss Date: Thu Apr 20 11:56:20 2006 +0000 Updated to use doc/common (id-docbook-common) commit cf8a38eb0fc8063fbebbf3b3a0e37b900b8d6d38 Author: Adam Dickmeiss Date: Thu Apr 20 08:43:23 2006 +0000 Remove 2.1.17 from this commit 947cec98f066b45753b9fcc4da251659935900e1 Author: Marc Cromme Date: Thu Apr 20 08:38:01 2006 +0000 bumped version number to 2.1.18 commit 4d97c382557ea886ef39bb49a4f8dcbbf413881d Author: Adam Dickmeiss Date: Thu Apr 20 08:25:12 2006 +0000 ASN.1 compiler 0.4: generates brief Doxygen file header for generated .h/.c files. commit 02f53ef3b0ec345dd5288aa0b1acbaf0b4b5f322 Author: Marc Cromme Date: Thu Apr 20 08:24:54 2006 +0000 bumped number to 2.1.17 commit 60695a8a76312b7a2efd29ccbdf1b4313e6c4665 Author: Adam Dickmeiss Date: Thu Apr 20 08:24:31 2006 +0000 Let all .asn depend on yaz-asncomp commit 84d030a65b7a0fa2e2179b51c38d365af3ec245a Author: Marc Cromme Date: Thu Apr 20 08:04:13 2006 +0000 bumped version to 2.1.17-1 commit ca738bbdd47372785611f6e590e6500b76a34f2c Author: Adam Dickmeiss Date: Thu Apr 20 00:01:01 2006 +0000 Fixed bug in yaz_srw_get: case Z_SRW_scan_response missed a break. commit 8c7193a29c122745f3e4fb831cb3d62e4ef316d9 Author: Adam Dickmeiss Date: Wed Apr 19 23:49:50 2006 +0000 Updated for MARC-8 conversion commit 1069eaf4dbf89cdb270d26373f644e00e343d9ac Author: Adam Dickmeiss Date: Wed Apr 19 23:48:06 2006 +0000 Added another safe cast to prevent warning commit 4223ca41705363f737a55a6cda1ec383f6c421c9 Author: Adam Dickmeiss Date: Wed Apr 19 23:46:15 2006 +0000 Added safe cast to prevent warning commit 8626b7019b5d3d9c9594f20025e97d06a2d590fc Author: Adam Dickmeiss Date: Wed Apr 19 23:15:39 2006 +0000 Implemented yaz_iconv to support conversion to MARC-8 commit 39d32c922161800240dfcfb2b833e55872dfb2ee Author: Adam Dickmeiss Date: Wed Apr 19 11:00:26 2006 +0000 Missed this file commit 626ee9b09c95c3585c432623c042872b0d1fea92 Author: Adam Dickmeiss Date: Wed Apr 19 10:05:02 2006 +0000 New facilities for the MARC module. The reading - and writing of content are separate methods for the yaz_marc_t handle. The following read functions are available: yaz_marc_read_iso2709 (Reads MARC in ISO2709 format), yaz_marc_read_xml (reads MARC in MARCXML/MarcXchange format). Write functions have prefix yaz_marc_write_.. The existing utilities yaz_marc_decode_wrbuf and yaz_marc_decode_buf are still available. Removed support for OAI-MARC and simplexml (not the simplexml from PHP5). commit 78322aa6cb73f75c5772bd58c59fffef52597991 Author: Adam Dickmeiss Date: Wed Apr 19 09:05:09 2006 +0000 Better usage info commit a1f888c8d35ebce2c0b3a6be4e7dc4f7d9dfcf63 Author: Adam Dickmeiss Date: Mon Apr 17 07:40:15 2006 +0000 For decoding of OIDs, do more sanity checks , so that we don't end up in a situation where an OID can be decoded but not encoded. commit c19bca6828eadf24bb302e46d5de16691f0e26b2 Author: Adam Dickmeiss Date: Wed Apr 12 18:25:21 2006 +0000 Spellfix for VirtualHost examle commit 89929f93f8e83456495d777df76e48cd8c53c265 Author: Adam Dickmeiss Date: Fri Apr 7 11:27:24 2006 +0000 Added a new ZOOM event type ZOOM_EVENT_END which signals no more events to be returned for this connection. commit d281d88f97474092424163d82863b382b75596da Author: Mike Taylor Date: Wed Apr 5 12:05:36 2006 +0000 RPN buffer bumped from 512 chars to 5120. commit e9db3cf52b6df66badd97391a51e85f9c78a8c91 Author: Mike Taylor Date: Wed Apr 5 12:04:51 2006 +0000 Report SRU diagnostic 12 (too many chars in query) when rendering the compiled CQL query out into PQF tries to overrun the supplied buffer. Fixes a bug that was mystifying while we put the Alvis demo together. commit dedca4515134eb33b9e09f824a4c5dc976b36820 Author: Mike Taylor Date: Wed Apr 5 11:55:46 2006 +0000 Ignore generated tstpquery commit 65e57b77a51d4b03e6ab7a41bcc11e8e8be62e83 Author: Adam Dickmeiss Date: Sat Apr 1 11:47:41 2006 +0000 More PQF parser tests commit a7c0fe1d8d8d89204f5c25a72d556d3d67b32d35 Author: Adam Dickmeiss Date: Sat Apr 1 11:45:23 2006 +0000 Fixed 523: PQF parser does not properly diagnose @prox syntax errors. Added a few PQF parser diagnostics to improve error messages. Catch terms that aren't unsigned ints.. E.g. the invalid @attr p=q x . commit 0e1ac7200aeba08e2debbe83c951f1b47d1ef92e Author: Adam Dickmeiss Date: Sat Apr 1 07:21:12 2006 +0000 Fixed bug #558: present request out of range with presentChunk/step commit 4fac21e6986b91107dfe616fa944613e3577c8c9 Author: Adam Dickmeiss Date: Fri Mar 31 12:49:37 2006 +0000 2.1.17 commit 273b74fc2b199e9450a55b433df9b592b9fb4014 Author: Adam Dickmeiss Date: Fri Mar 31 09:55:01 2006 +0000 Towards 2.1.16 commit 4d43733b72afb2c042c06d1b91244b7b98bb3c86 Author: Adam Dickmeiss Date: Fri Mar 31 09:54:48 2006 +0000 2006 commit 2c44707f5748b152795560cb9551c4211394a8ef Author: Adam Dickmeiss Date: Fri Mar 31 09:51:21 2006 +0000 Allow multiple languages and charsets to be specified with yaz-client. Each item must be separated by comma (NO BLANKS). E.g. negcharset iso-8859-1,utf-8 Added az_set_proposal_charneg_list. commit d8b577d9635dccf489ddb3955c795fb1f754fad3 Author: Adam Dickmeiss Date: Thu Mar 30 16:30:25 2006 +0000 yaz.m4 moved to sub directory m4 commit cf139020e5158b2a6ab6ba7cfb04df3d85c74f4b Author: Adam Dickmeiss Date: Thu Mar 30 14:15:20 2006 +0000 Add YAZ_EXPORT yaz_opac_decode_wrbuf commit 09a0b5531c9286b7179625ce5f32009b2f27b8d5 Author: Adam Dickmeiss Date: Thu Mar 30 07:45:42 2006 +0000 Depends on libreadline5-dev commit c25a08abd4f2772ad2c5c8bc45de7f62d4e1978e Author: Adam Dickmeiss Date: Thu Mar 30 07:36:06 2006 +0000 More NEWS commit b761f6f993380802f05f44cd1b93b024ace20408 Author: Mike Taylor Date: Wed Mar 29 15:26:01 2006 +0000 CQL prox support. commit a43c354f46cc04bbf2168eb74b38e13c81c0b036 Author: Mike Taylor Date: Wed Mar 29 14:47:07 2006 +0000 Better rule for "fuzzy" commit f332061f06e2608957f71dd6a9acc0b67d45fc7d Author: Adam Dickmeiss Date: Tue Mar 28 16:53:56 2006 +0000 Require autoconf 2.59 or later. Extra m4 quoting commit 161e692d76b0cdb7184543c08b6619015a8423de Author: Adam Dickmeiss Date: Tue Mar 28 16:43:36 2006 +0000 Fix maintainer line commit dacd04afe05197b737e60c828c89c579d1b4b3cc Author: Adam Dickmeiss Date: Tue Mar 28 16:42:04 2006 +0000 Using config auxdir config. commit ba1c8ffb28b52f69e23cd1b199c6f235a3c1631d Author: Adam Dickmeiss Date: Tue Mar 28 16:36:35 2006 +0000 Move to automake1.8/1.9 commit 85b3adb824174e27a0e845ff67bed9f05233edff Author: Adam Dickmeiss Date: Mon Mar 27 09:57:18 2006 +0000 More news commit e17f83e1e6f332965035d74ba7ca7805fa5b5a41 Author: Marc Cromme Date: Sun Mar 26 21:00:09 2006 +0000 java script mime type added to the list of allowed mime types to be served by YAZ http server commit e461d6ab93b9d8af976e45d5cdc4491dbd58c4bb Author: Adam Dickmeiss Date: Sat Mar 25 14:42:16 2006 +0000 More testing for bug #537 commit f496a93d2049e6127b05260915f506d065588e1b Author: Adam Dickmeiss Date: Sat Mar 25 14:41:53 2006 +0000 Fixed bug #537: marc-8 -> iso-8859-1 konvertering fails for some sequences. commit 045b45e1cf3070d4eb6a95ec15686712449987c9 Author: Adam Dickmeiss Date: Fri Mar 24 13:58:43 2006 +0000 For yaz_log, allow special timeformat %! to display thread ID commit 10f391e000230e5a93c768f541a24a379809489e Author: Mike Taylor Date: Wed Mar 22 17:58:32 2006 +0000 Reinsert initialiser for __UNUSED_loglevel commit e38c23b29a89e9c4e1cd5aa9033015efc39b26c0 Author: Mike Taylor Date: Wed Mar 22 13:55:06 2006 +0000 Put __UNUSED_loglevel back into structure to maintain binary compatibility. commit 275991dfabd62de0128770c061c7f780716cc16e Author: Mike Taylor Date: Wed Mar 22 13:50:46 2006 +0000 Do not impose STAT_DEFAULT_LOG_LEVEL if the YAZ_LOG environment variable is set. Cleaner handling of logging options. commit 6b595f73431b4b38ec138ded59281632e0a1c47f Author: Mike Taylor Date: Wed Mar 22 13:38:17 2006 +0000 Removed loglevel from struct statserv_options_block -- it was only there as a hack from the days when yaz_log_init() was the only way to change any setting, and required all three to be set. commit 01d2e3a742a9ea1b083dccf68799dbf68b6e1236 Author: Adam Dickmeiss Date: Wed Mar 22 13:03:59 2006 +0000 Accept application/soap+xml as content-type for SOAP msg commit 3cbab3f245c712602c545780d13196a878e0346f Author: Adam Dickmeiss Date: Tue Mar 21 13:58:50 2006 +0000 Reestablish log_event_{start,end}. commit 41b946725f2c8d8617b3e4ece161cb9d99bfaa5c Author: Adam Dickmeiss Date: Tue Mar 21 12:54:02 2006 +0000 Remove log_event_{start,end}. Add function yaz_log_set_handler instead commit 56f715bb23c31ea1f8a551e7f1f9b58a10bafbad Author: Adam Dickmeiss Date: Tue Mar 21 12:32:16 2006 +0000 Allow Hook function to be tested (log_event_start) commit f1d7bbf6928a24c47f095193375e4c6046979521 Author: Adam Dickmeiss Date: Tue Mar 21 12:31:48 2006 +0000 Allow yaz_log logging to be disabled using yaz_log_init_file with fname == NULL. Output can be still be captured using log_event_start calls. Useful if YAZ is to be using foreign log facility.. commit b4fcff7bb8f63cf5d1c6871ecffd9c474fd57dda Author: Mike Taylor Date: Mon Mar 20 14:56:40 2006 +0000 Support for translating proximity nodes from CQL to PQF, including modifiers. commit 663d8cb7f0456d53b02d26f85dae90435a867c99 Author: Mike Taylor Date: Mon Mar 20 09:38:13 2006 +0000 Fix typo "libtools" (is now "libtool") commit fd9523b748576c5dabf640a18fcf3e95ced15dbd Author: Adam Dickmeiss Date: Thu Mar 16 12:30:03 2006 +0000 Ensure Bib-1 diagnostic is mapped to SRW diagnostic for bend_init commit b86de9339d429e755e5446fda4051f3685f67fda Author: Adam Dickmeiss Date: Thu Mar 16 08:55:28 2006 +0000 For GFS - SRU handling, empty stylesheet means no stylesheet ref commit e840ea4bc345c8cf0ffae4edc43ce5dfabedaa3e Author: Adam Dickmeiss Date: Thu Mar 16 08:36:29 2006 +0000 Bump to dev version 2.1.15 commit dfb47c5dc73f604e1b2704a4b4d9695b5e96a2f4 Author: Marc Cromme Date: Wed Mar 15 14:12:26 2006 +0000 removed superflous log message commit a6af2d19dddb0c2ef961d087d8ca0f2b3bda8f7a Author: Adam Dickmeiss Date: Wed Mar 15 13:32:05 2006 +0000 Added support for file access in GFS to facilitate static web pages, such XSL/CSS/HTML files. commit d4981d86af4a523288d1eadca634b83fad0f37e8 Author: Adam Dickmeiss Date: Tue Mar 14 09:04:07 2006 +0000 Towards 2.1.14 commit 4c6a8d0c5930e49e4937d3c3a60df7acb47c983a Author: Adam Dickmeiss Date: Tue Mar 14 08:58:56 2006 +0000 Towards 2.1.14 commit c2fcb51556930b5a360603e3cd3f08c8774c9cde Author: Adam Dickmeiss Date: Tue Mar 14 08:50:19 2006 +0000 Make bin/yazd.dll + lib/yazd.lib part of Development component. commit 1bc220ecf4e742f3ef70335a4217d9e72cca564f Author: Mike Taylor Date: Mon Mar 13 17:33:00 2006 +0000 YAZ_LOG environment variable. commit 1e8eb130ff83dedfb7382ca3e38651add9894662 Author: Adam Dickmeiss Date: Mon Mar 13 12:14:00 2006 +0000 Omit unnecessary warnings in ztest sample code. commit 27ea5a731ded352ca1b49970997be5fa570870b4 Author: Adam Dickmeiss Date: Mon Mar 13 11:59:27 2006 +0000 More informative GFS WRT Extended Services commit 1aa1abc04c0e2c40beb8b57f212b5150700b056d Author: Adam Dickmeiss Date: Mon Mar 13 10:48:14 2006 +0000 Survive in set_DatabaseNames if connection has not been connected. commit 8dde2679aeaae3fbe0cbee6c891ba07249245837 Author: Mike Taylor Date: Fri Mar 10 17:18:09 2006 +0000 Recognise the "always" configuration element. commit ca09c78fc8a550087b8f3469fd2c7842dea09a9b Author: Mike Taylor Date: Fri Mar 10 14:43:13 2006 +0000 Map structure and other attributes before indexes, so that index-specific structures can override defaults. So: structure.* = 4=1 index.dc.date = 1=date-modified 4=5 does the right thing. commit f1173ed21af445eeecf2acf2df3cbef7dfd61cf0 Author: Mike Taylor Date: Fri Mar 10 10:43:32 2006 +0000 Fix URL of SRU diagnostics list. (Yes, Ray has moved it. Thanks, Ray.) commit 3e598eec55e31da69d4ad2e15f3cb89b37d0b860 Author: Mike Taylor Date: Thu Mar 9 16:14:53 2006 +0000 Ignore yaz-xmlquery commit 732c1fae8404e9895941ffd173d0ad19fb4400e1 Author: Adam Dickmeiss Date: Mon Mar 6 08:11:41 2006 +0000 Null terminate a null-terminated string commit 00c29e543cad41be04da3c74c33cbe8f1f47d3b9 Author: Adam Dickmeiss Date: Thu Mar 2 09:38:41 2006 +0000 BNF for nested queries. commit 29ba0d3dcc93061615c53d8f22702646120338f2 Author: Adam Dickmeiss Date: Thu Mar 2 09:37:35 2006 +0000 Added sort extension commit 9dd857867cf2feb11ed3ae6f0c70db702629ec88 Author: Marc Cromme Date: Thu Mar 2 09:20:53 2006 +0000 added complex rewrite rules for multiple attribute combinations commit 1f3fe256d54ab81d998cd622abda89580cc0b3ff Author: Adam Dickmeiss Date: Wed Mar 1 23:24:24 2006 +0000 Added SRU-GET and SRU-POST support for ZOOM C. Option "sru" specifies which mode to use; one of "post", "get" or "soap" (SRW, default). commit 7816498d590a66569e6ca8d17e8a4a3723a36826 Author: Adam Dickmeiss Date: Wed Mar 1 22:33:06 2006 +0000 fix decode of resultSetTTL commit db0f3c6c74488592ae1ceb7267d41d9a23b9efc1 Author: Adam Dickmeiss Date: Mon Feb 27 21:31:33 2006 +0000 Fixed bug in GFS: bend_scan handler was not called when PQF-to-CQL conversion was enabled. commit c66f4dda30f7cb8b7d1c8503cc2eb75251187c3d Author: Marc Cromme Date: Fri Feb 24 14:07:23 2006 +0000 added some examples of XMLPQF to XMLPQF query rewrites look in the first comments of the stylesheet to see how it is run. probably this is the wrong place, but I checked it in here since I do not know of a better place. commit de11e6bdb853dce80abe2c1223fe490ae0b2ebd0 Author: Adam Dickmeiss Date: Thu Feb 23 13:15:43 2006 +0000 Fixed bug #488: tsticonv fails on Solaris with Sun C compiler. We no longer use a negative value in yaz_iconv_trie_dir.ptr member for a "null" pointer. Instead integer 0 is used and actual ptrs have an offset +1. commit a62320ec94a88d58e808511ed8ec4259974b4f95 Author: Adam Dickmeiss Date: Thu Feb 23 13:09:54 2006 +0000 Dont return value in void function commit e637973203a49a536a12a78ec9c8af55b7669fc6 Author: Adam Dickmeiss Date: Thu Feb 23 11:17:25 2006 +0000 For XML query structure, use 'operator' instead of 'binary'. For top-level of query, use .. rather than .. due to XML schemas and other unpleasant things. commit 20ba81cb8fa43d1a3837a9f3cb657384cef83a23 Author: Adam Dickmeiss Date: Thu Feb 23 11:16:22 2006 +0000 Removed redundant check commit f403b05509aac2b9da65ecb9397d9452bd3a3aab Author: Adam Dickmeiss Date: Thu Feb 23 10:40:59 2006 +0000 Added utility program yaz-xmlquery. commit 7a577f9c983bf42b294d8f1042e3ad0b4d588ba7 Author: Adam Dickmeiss Date: Wed Feb 22 19:53:02 2006 +0000 Update commit ebdd1051e91791160a961a884a02de1ed718900b Author: Adam Dickmeiss Date: Wed Feb 22 19:48:53 2006 +0000 Added a test case which exposes UTF-8 conversion bug. commit 6671d1583ced9613ab7f12bfed69fd70fd9e6b15 Author: Adam Dickmeiss Date: Sun Feb 19 18:44:23 2006 +0000 Implement yaz_xml2query. commit 78786494a1fd16e59db481444e042737cabd5cd1 Author: Adam Dickmeiss Date: Sun Feb 19 18:37:20 2006 +0000 Make ztest_explain non-static commit c1787052301876848e3b9ddd124c513de00919f7 Author: Adam Dickmeiss Date: Sun Feb 19 18:36:10 2006 +0000 Using odr_create_Odr_oct commit 4580363540605bea68d5b63de38b480d3d44ca81 Author: Adam Dickmeiss Date: Sun Feb 19 18:34:13 2006 +0000 More proper initialization ot union .. Not that it makes a difference commit 28b489257f5f5b9263659a83a4df0ad2c61428c4 Author: Adam Dickmeiss Date: Sun Feb 19 18:33:08 2006 +0000 Implemented utility odr_create_Odr_oct to create Odr_oct struct with content commit 094c2fc453eec688746dabf2e89ec9e197a6fd61 Author: Adam Dickmeiss Date: Fri Feb 10 12:45:39 2006 +0000 Fixed UTF-8 reading (for 3 byte sequences). commit 419a8eb0b2069682320ebab4868a3aac791731c3 Author: Adam Dickmeiss Date: Thu Feb 9 12:36:18 2006 +0000 For VS, use option /EHsc instead of /GX (deprecated) commit 421a6cab3464893ae0e28d929608b993912e0278 Author: Adam Dickmeiss Date: Fri Feb 3 10:44:57 2006 +0000 Added a few harmless casts . (famous last words) commit 7e156f9a105b894b600c78d0b0a55224ae9b9793 Author: Mike Taylor Date: Thu Feb 2 18:27:02 2006 +0000 Ignore generated file "tstxmlquery". commit 465343e3b3f2cd797e018b26df19c91a39cbeccf Author: Adam Dickmeiss Date: Thu Feb 2 15:00:58 2006 +0000 Supply Term type as attribute in XML RPN representation. commit 2ee27a05e8656bcba988bd138314fece797df4a2 Author: Adam Dickmeiss Date: Thu Feb 2 13:14:58 2006 +0000 Program zoom-benchmark is not part of RPM,DEB package yet, so it is not yet installed in bin. Needs a man page too. commit 0c494663a9a07cf01455ffe3b75689b7fac35b3b Author: Adam Dickmeiss Date: Thu Feb 2 13:02:55 2006 +0000 2.1.13 commit ef37a4f4d009b879da200f74b6cf5a7a15ae0e53 Author: Adam Dickmeiss Date: Wed Feb 1 21:07:02 2006 +0000 Do not depend on docbook tools in Debian build. Depend on debhelper commit f3d01eac8cac49b98e6e3520ee5b5480b0a6d865 Author: Adam Dickmeiss Date: Wed Feb 1 20:31:00 2006 +0000 Put test stuff as part of Source Windows Package commit 1bbc43ce88a03e20f3ddf503ba27ef6703d91d9a Author: Adam Dickmeiss Date: Wed Feb 1 20:29:19 2006 +0000 Use size_t rather than int commit b2062c674a33f3c6c0e5752a18408a11718afc91 Author: Adam Dickmeiss Date: Wed Feb 1 20:28:44 2006 +0000 Dont return value in void function commit e1c8b365a609e61754e5e24e72958c5f69541c5f Author: Adam Dickmeiss Date: Wed Feb 1 20:20:25 2006 +0000 Build-depend on libreadline5-dev rather than libreadline4-dev commit 300533a2f4f573ca4b40697c19ae1af61607a6be Author: Adam Dickmeiss Date: Wed Feb 1 20:14:31 2006 +0000 Added test.obj+xmlquery.obj commit 60d46ba249746bdb74d1e66d8a4a5363f640026f Author: Adam Dickmeiss Date: Wed Feb 1 20:11:22 2006 +0000 Towards 2.0.12 commit 1e6937d4f15b51c3d7be9d5bc89cd7ac6ef5aa3e Author: Adam Dickmeiss Date: Wed Feb 1 20:07:20 2006 +0000 Update link to mailing list commit 18f4359afdbd92aed268cd188505107e8a9ba8f1 Author: Adam Dickmeiss Date: Wed Feb 1 19:59:44 2006 +0000 Describe two more important changes commit 049ba50c77db8f008546899e56c8124f68cd112d Author: Adam Dickmeiss Date: Wed Feb 1 19:53:00 2006 +0000 Fix test so that it passes without libxml2-dev commit 7a025b4322380d71b3b2abb1843fcbf622ff4b56 Author: Adam Dickmeiss Date: Tue Jan 31 11:01:26 2006 +0000 Avoid mixed/stmt var declare commit dcc6cbe2a1c328c1d59f7ff350e7cd9e8a3b5a85 Author: Adam Dickmeiss Date: Mon Jan 30 16:58:06 2006 +0000 Avoid mixed stmt/var declare commit 3086f0e19e38428814c7da92fcaf21eba2bc9a64 Author: Adam Dickmeiss Date: Mon Jan 30 14:02:06 2006 +0000 yaz_query2xml complete and tested commit b65713c219e3ce0181d04ea9d3518a85ca2c6807 Author: Adam Dickmeiss Date: Mon Jan 30 08:08:23 2006 +0000 Avoid mixed stmt/var declare commit 06ae818deffa84ec4bc1308051ef411845dd4ce5 Author: Adam Dickmeiss Date: Sun Jan 29 21:59:12 2006 +0000 Added YAZ_CHECK_TERM which terminates test program. Using yaz/test.h in most existing tests now. commit be1157fee3451c37508c9ec3b4b4b8603a646c0b Author: Adam Dickmeiss Date: Fri Jan 27 19:04:15 2006 +0000 Make sure this compiles even without Libxml2. commit f332636bbd13c0d1b17ce5be702422b9f8fe56dd Author: Adam Dickmeiss Date: Fri Jan 27 19:01:56 2006 +0000 Annotate commit 886c6715463eba74b37575caa5df206ee9b970b6 Author: Adam Dickmeiss Date: Fri Jan 27 18:58:57 2006 +0000 A little more flexible test unit commit bedf53c5f2d3e240608d27a71037777fada559d3 Author: Adam Dickmeiss Date: Fri Jan 27 17:33:15 2006 +0000 First use of unit test macros. commit d1191d5f31177b3e839b32e09b2e39ce60ee91a3 Author: Adam Dickmeiss Date: Fri Jan 27 17:31:52 2006 +0000 Added xmlquery.h,test.h in build commit f7aa6f63af514f24b106b8068f610e23f7a39832 Author: Adam Dickmeiss Date: Fri Jan 27 17:31:37 2006 +0000 Added xmlquery.c in build commit cf75a1bc424083953d4f29e38177f178821de55f Author: Adam Dickmeiss Date: Fri Jan 27 17:30:44 2006 +0000 Added a few simple test framework macros (to be used in YAZ tests). commit 50bf09dd2a048e48cdb605ea224a40e672415bce Author: Adam Dickmeiss Date: Fri Jan 27 17:28:16 2006 +0000 Added initial implementation for XML Query representation. commit 84d09d80523986d05d098ee1972c426792918a02 Author: Adam Dickmeiss Date: Thu Jan 26 15:37:05 2006 +0000 Avoid mixed stmt/var declare commit b3f2d89141871dddbee9fba4061ece9fb90abcf2 Author: Adam Dickmeiss Date: Fri Jan 20 15:30:24 2006 +0000 Try to cope with subfields in multi-byte encoding - such as UTF-8. commit 2c5d2e0851ef4adf500a62f0bd179c775f13b7be Author: Adam Dickmeiss Date: Fri Jan 20 14:44:55 2006 +0000 Prevent leading blank in output of yaz_rpnquery_to_wrbuf commit f97d979896de564f24c1e18ac111223afd2f40b3 Author: Adam Dickmeiss Date: Fri Jan 20 11:01:46 2006 +0000 Make wrbuf_put_zquery public commit 2cb1374ad9b888dcb3462ec15b977fbb3a97c7cf Author: Adam Dickmeiss Date: Fri Jan 20 10:34:50 2006 +0000 Separate the logging utilities for queries in two . The multi-line logging is defined in logrpn.{c,h} as before. The one-line - PQF - reparseable output in querytowrbuf.{c,h}. commit 118e971be7e959eac406b316d25c149c367a3391 Author: Adam Dickmeiss Date: Tue Jan 17 19:04:05 2006 +0000 Have yaz-ztest support pseudo database Slow too commit 67945ae14416eb099fec28978f286ebba7f5313f Author: Adam Dickmeiss Date: Mon Jan 16 15:53:28 2006 +0000 Fixed bug in yaz_oi_get_string_oid. The function did not give categoryValue to yaz_oi_update. commit b7b983104b5eb6d9d0e18faae70a575b528ec845 Author: Mike Taylor Date: Wed Dec 21 17:13:44 2005 +0000 Describe new ZOOM CQL facilities. commit bc30d69369bfe07a94d88183d307385b66a4504b Author: Mike Taylor Date: Wed Dec 21 16:45:38 2005 +0000 Note need to document: ZOOM_connection_scan1 (ZOOM_connection c, ZOOM_query startterm) ZOOM_query_cql2rpn(ZOOM_query s, const char *str, ZOOM_connection conn) commit 6202be57112ed26410889081bb0ab87a779ae0bf Author: Mike Taylor Date: Wed Dec 21 16:41:36 2005 +0000 Add ZOOM_query_cql2rpn() commit c584380ce880fe0e0ba036f476f8a037763eac21 Author: Mike Taylor Date: Wed Dec 21 15:09:50 2005 +0000 Yikes! Yesterday's "defensive programming" introduced a bug (D'oh!) which made it impossible to transform CQL queries of more than a single term. Now fixed. commit 1eb08b83987bdbf846d7100c6231d1907275bb15 Author: Mike Taylor Date: Wed Dec 21 08:35:36 2005 +0000 Comment commit 28f52a57a140e602427fe10c3cc4309d23433e2c Author: Mike Taylor Date: Wed Dec 21 00:07:21 2005 +0000 Remove commented-out printf()s in cql2rpn() commit 67b4d800264ba7dd4c8b64719cbbc87464d3430f Author: Mike Taylor Date: Wed Dec 21 00:06:34 2005 +0000 cql2rpn() now works. Pernicious stack-whack bug fixed. commit ccb96652ac7afe10d0cd7db9f0e348001c6b3f82 Author: Mike Taylor Date: Wed Dec 21 00:04:14 2005 +0000 Abort when trying to translate a node of unknown type. This happens when (for example) the node is corrupted by its parser being freed before it's passed into the translation function ... a classic C-style bug that's taken much of this evening to find and fix. Defensive programming, guys ... commit 59686102d56120c1f244f56346e9f4e65a296d50 Author: Adam Dickmeiss Date: Tue Dec 20 23:07:27 2005 +0000 Fix double free in set_otherinfo commit 4d35e2e6ab9c8d544292cbd94a574dec6694cf9a Author: Mike Taylor Date: Tue Dec 20 22:24:05 2005 +0000 Support for scanning by CQL query (not yet debugged). commit 56d0c3a8ae8189554af1f11b5c8c828223fec47b Author: Mike Taylor Date: Tue Dec 20 22:23:04 2005 +0000 Two new ZOOM_ERROR codes, CQL_PARSE and CQL_TRANSFORM. commit 609db10a44b3423a6a1f5f33478a2e5e564c583a Author: Adam Dickmeiss Date: Mon Dec 19 20:19:29 2005 +0000 Addinfo is host when ZOOM returns failure for connections commit 6e8a098c117cb6a92c30c536f7ec939520c18e22 Author: Mike Taylor Date: Mon Dec 19 17:04:22 2005 +0000 Add ZOOM_connection_scan1(), which takes a ZOOM_query rather than a string as its start-term, thereby opening the way for scanning on CQL terms. commit bffff3b76a8401900e60096a587156a8bcbc03ef Author: Adam Dickmeiss Date: Sun Dec 18 15:58:02 2005 +0000 Avoid mixed stmt/vardeclare commit 5c8ffe664df674fe5f5331f6445019e6bfe13673 Author: Adam Dickmeiss Date: Sat Dec 17 20:22:01 2005 +0000 yaz-marcdump may dump raw records separately using -s splitfname option commit 728cddf6dff34fdfbee2d6f7562f8e4499f05878 Author: Adam Dickmeiss Date: Sat Dec 17 20:20:55 2005 +0000 Prevent YAZ from using poll on MacOSX commit 4c7661349ba9a54df9e6dc6223005466c89db19c Author: Adam Dickmeiss Date: Sat Dec 17 20:03:49 2005 +0000 No need to check for sys/poll.h twice commit d23e230497f751cccd40eca6d500fcc09b048716 Author: Adam Dickmeiss Date: Fri Dec 16 15:01:25 2005 +0000 Added sample YAZ GFS config file. commit 2d5c5f9149f57e143e59a5ec358d5664b0707398 Author: Adam Dickmeiss Date: Wed Dec 14 14:05:55 2005 +0000 Added two new utilities for encoding SRW diagnostics via a URI rather than code. The yaz_add_srw_diagnostic_uri complements yaz_add_srw_diagnostic in that it adds a diagnostic to a diagnostics list. And yaz_mk_srw_diagnostic complements yaz_mk_std_diagnostic. commit 5c3f36ce789b494e73f7bc64353dc7c324c3a55f Author: Mike Taylor Date: Tue Dec 13 17:10:32 2005 +0000 Ignore "tstlogthread", compiled by "make check". commit afbca314053ad3d8aaf5e83d27d54b48bf10bfa9 Author: Mike Taylor Date: Mon Dec 12 12:09:29 2005 +0000 Describe new options-within-host-string syntax: user=admin,password=halfAm4n,tcp:localhost:8017/db commit aa995956f023b0f5fce9c9aedf3fd996a83524dd Author: Mike Taylor Date: Mon Dec 12 12:02:04 2005 +0000 Throw out the 'user=pass%hoststring' syntax that I added a few days ago, and replace with the more general and rigorous 'key=value,...:hoststring' as suggested by Adam. commit 0190c4c6857ade1c3897a642d4d1660c495f4137 Author: Marc Cromme Date: Fri Dec 9 10:43:43 2005 +0000 upcounted debian number commit 79aa866d87464ecd3fc451668017c0fa1adb2776 Author: Adam Dickmeiss Date: Thu Dec 8 15:36:31 2005 +0000 Avoid mixed stmt/var declare commit 72009188eda06296bb8839ef16de1470ecc2d240 Author: Mike Taylor Date: Wed Dec 7 16:15:15 2005 +0000 ZOOM_connection_connect() now understands authentication parameters embedded in the host string, like this: admin:secretpw%localhost:9999/gils i.e. if there is a "%" sign, then what comes before is taken as a ":"-separated user/password pair. This is a bit hacky, but necessary to run zoomtst9 against secured databases, and it's much more general than just adding authentication parameters to that one program. commit b584d89b2b0ac60b56496762db23e33b1dd6d2fe Author: Adam Dickmeiss Date: Fri Dec 2 16:13:50 2005 +0000 Put exit command last in list of commands - so 'e'='elements' commit 473e1e9a53705645afc7123afad3ec32862c65f6 Author: Adam Dickmeiss Date: Tue Nov 29 20:40:33 2005 +0000 Make zoomtst9 part of windows build commit b3a9a74111d4f1f1e14dac4a245cd01b5fa5a9b5 Author: Adam Dickmeiss Date: Tue Nov 29 20:26:05 2005 +0000 Towards 2.1.10 commit 67c25cbfe1f268218bc25bed5e9140f38a6a16fb Author: Adam Dickmeiss Date: Tue Nov 29 20:25:38 2005 +0000 Build libyazthread.la for backwards compatibility commit 85acc151c28eeec0711a922a4a0183704909c257 Author: Adam Dickmeiss Date: Tue Nov 29 20:17:09 2005 +0000 Towards 2.1.10 commit 339c1274a943f721af8b9f36c89bc2796b95bc9b Author: Adam Dickmeiss Date: Mon Nov 28 13:21:38 2005 +0000 Another fix in extraRecordData handling commit 5c814fad6fbb79ea8943dd4da9d9a3591ca242ac Author: Mike Taylor Date: Sat Nov 26 16:56:42 2005 +0000 Ignore zoomtst9 commit fc1c67f5c7ba5e39cdfeff0631eb5f9bd8dbb40a Author: Adam Dickmeiss Date: Thu Nov 24 10:04:12 2005 +0000 Added ZOOM example program that illustrates Ext Record Update commit 4102d95bf434baaf92b1a8db63d1f7396c8e469f Author: Mike Taylor Date: Wed Nov 16 16:03:51 2005 +0000 Add ZOOM_connection_diagset() commit 5451196efde939261211e1c15e0bc373b527d33c Author: Adam Dickmeiss Date: Tue Nov 15 12:23:32 2005 +0000 Added CQL base YACC grammar. commit b3d4d4df2931f92f42f406f1bb9e6aeddd76a24a Author: Mike Taylor Date: Tue Nov 15 12:19:17 2005 +0000 Describe recent ZOOM changes. commit 6d439df429edc942dfae23f7906bc63adbc1e137 Author: Adam Dickmeiss Date: Fri Nov 11 22:07:11 2005 +0000 Fix bug introduced in srw.c revision 1.37 commit c74ab70e2005c25e517e68274cf7bb3fd9b53e34 Author: Adam Dickmeiss Date: Fri Nov 11 22:06:46 2005 +0000 Fix bug introduced in srw.c revision 1.37 commit f05880b7f0510968f2ceda2dc5860b2c223263bc Author: Adam Dickmeiss Date: Wed Nov 9 17:48:11 2005 +0000 Use int rather than short for bit field commit f985ce965530b3da821236d9c936e54c29884356 Author: Adam Dickmeiss Date: Wed Nov 9 17:47:50 2005 +0000 Fixed check for non-empty record syntax list commit 9a7cdcf5ae13e63eae0259f2a620119463e64f42 Author: Adam Dickmeiss Date: Wed Nov 9 17:47:07 2005 +0000 Avoid mixed stmt/var declare commit 7b869473f3fa47461c900c7c654814040607cbaa Author: Adam Dickmeiss Date: Tue Nov 8 21:57:47 2005 +0000 One more html doc part of dist commit c20830c3e36706390cc7a15c2a3a4ffa071dc36a Author: Adam Dickmeiss Date: Tue Nov 8 21:53:01 2005 +0000 Clarify start term in ZOOM_connection_scan. Document ZOOM_package functions (extended service facilities). commit 344311b8463f32cd4b7aec93ce0f42e090fc6cf8 Author: Mike Taylor Date: Tue Nov 8 17:12:55 2005 +0000 Note that sort1() needs documented when I do sort() commit 54833ceee2850b3de2f7ee28c6f9ca9e021b7fc8 Author: Mike Taylor Date: Tue Nov 8 16:52:29 2005 +0000 Add ZOOM_resultset_sort1() Old ZOOM_resultset_sort() is now a trivial wrapper for this. (Kept only for backwards compatibility.) commit 110d2cfec5051b981403e6aa432fa4863d401893 Author: Mike Taylor Date: Tue Nov 8 16:51:34 2005 +0000 Add ZOOM_resultset_sort1() commit 0d191bf4a0a8f0196e0ba1c42f0070255c04c1b4 Author: Adam Dickmeiss Date: Tue Nov 8 15:08:02 2005 +0000 Added ZiNG Update Support. New codecs are defined in srw.h. Extended the GFS to support this as well. Backend handler, bend_srw_update, does the update work. Code contributed by Ko van der Sloot. commit 9527520d6b18b7c74d74ff4ad42fbf7eab73d203 Author: Adam Dickmeiss Date: Sun Nov 6 01:55:06 2005 +0000 Fix bug #416 in a different way. Our handlers code in yaz_marc8_?_conv (generated by charconv.tcl) now returns 0 and no_read=1 when a sequence does not match the input. The SECOND HALFs in codetables.xml produces a non-existant entry in the conversion trie.. Hence when met, the input byte is skipped as it should (in yaz_iconv). commit a51e14df3987e0c5328d0379c059b772aa4976fa Author: Adam Dickmeiss Date: Sun Nov 6 01:28:09 2005 +0000 Remove no longer used MARC-8 conversion code commit bd1e6f0c2add0e1dced1719c7a89fdce0342ca92 Author: Mike Taylor Date: Fri Nov 4 17:15:30 2005 +0000 Clarify sort-specification syntax. commit a39eab79c04f1fa0f7a7197140a526319f2612d2 Author: Mike Taylor Date: Fri Nov 4 15:51:02 2005 +0000 Fix incorrect diagnostic. commit cf3ff0df41755297543b14f007842e1dc216ec25 Author: Mike Taylor Date: Thu Nov 3 16:49:00 2005 +0000 Fix formatting inconsistency. commit ca600d51e7c35d506e928b54fe78fb049a3cd1c3 Author: Adam Dickmeiss Date: Wed Nov 2 21:41:27 2005 +0000 Avoid mixed decl/stmt commit 2aac1412b1bfe2b6d96b72b254a0292d5e5ee056 Author: Mike Taylor Date: Wed Nov 2 14:54:01 2005 +0000 Add a list of the (surprisingly many) functions that still require documentation. commit 77f1e72ece143de75a2163369225ae15a13f7480 Author: Adam Dickmeiss Date: Wed Nov 2 13:32:58 2005 +0000 Fix path to yaz-asncomp commit e15cbdedce45f8d4ce7642182899919cf9266984 Author: Adam Dickmeiss Date: Wed Nov 2 11:54:40 2005 +0000 Change output for SearchResult-1. Display subqueryId as well commit a77e44dfd845725c768c8c60c1c01ba04209316d Author: Adam Dickmeiss Date: Wed Nov 2 10:19:46 2005 +0000 Rename serachresult options a bit commit 1b74d7ac0e734e7740dae73ea340d24334960bc5 Author: Adam Dickmeiss Date: Tue Nov 1 15:08:01 2005 +0000 Allow retrieval of Search Result-1 information in ZOOM by the use of options that are attached to a result set. ZOOM documentation updated accordingly. commit 09171d137882f80de8584a5adec1ac13c7718a4e Author: Adam Dickmeiss Date: Tue Nov 1 15:07:29 2005 +0000 Allow inspection of result set options with rget command commit 2a7d3ab36a99c81e9d33bd370cf03a020525f49e Author: Adam Dickmeiss Date: Fri Oct 28 18:36:58 2005 +0000 Fixed bug #416: First/second comb characters not handled in the MARC-8 to UTF-8 conversion. Patch by Raj Patel. commit 96278072bf26103bdd1bbd799f87328655b67756 Author: Adam Dickmeiss Date: Thu Oct 27 20:05:41 2005 +0000 Use xsl:element for document element to prevent ns commit 16d6dc8f953ccdaadd47ce6a60df22efff73bff4 Author: Adam Dickmeiss Date: Sat Oct 22 13:32:04 2005 +0000 Use xstrdup rather than strdup. Define stat(2) masks S_IFMT and S_IFSOCK when gcc -ansi is in use. commit 6d4f7e865f11d0fbcadd0820078a707f5588256c Author: Adam Dickmeiss Date: Sat Oct 22 13:28:03 2005 +0000 Do not use // comments commit a2089830bc03a6edd4130aee46e3af6964d185f4 Author: Adam Dickmeiss Date: Sat Oct 22 13:27:29 2005 +0000 tstlogthread by default prints nothing commit bbede51b2d1b9cf9674e0176d5f536d10f276962 Author: Adam Dickmeiss Date: Sat Oct 22 13:13:56 2005 +0000 yaz-benchmark uses yaz options rather than getopt commit 028cd0d846e6e44649ef699e205b2db453be5522 Author: Sebastian Hammer Date: Thu Oct 20 19:28:03 2005 +0000 Added option -m to GFS to control formatting of time stamps. commit 976e19ac608c2992096baf821426186570ea2df9 Author: Mike Taylor Date: Mon Oct 17 12:29:44 2005 +0000 Add ZOOM_connection_option_getl() -- very thin layer. commit 1a5d172598ed970a299d142cd2ff536e905659f8 Author: Mike Taylor Date: Mon Oct 17 12:28:20 2005 +0000 Add support for int len to struct ZOOM_options_entry. Factor repeated code out of ZOOM_options_setl() into new _set_value(). Add ZOOM_options_getl(). ZOOM_options_get() is now a one-line wrapper around ZOOM_options_getl(). commit 6d20344358c013b71bf23a93f1998fc6036c1aef Author: Mike Taylor Date: Mon Oct 17 12:25:39 2005 +0000 Add int len to struct ZOOM_options_entry. commit 3a12e23d93ba2aadcddefc74ebe02b90f53381c3 Author: Mike Taylor Date: Mon Oct 17 12:25:04 2005 +0000 Add ZOOM_connection_option_getl() and ZOOM_options_getl() commit 053ab437b20c680f8a4a06190a2ef08e0912bf82 Author: Adam Dickmeiss Date: Sat Oct 15 10:40:37 2005 +0000 Put static YAZ entities in separate file entities.ent. Put bookinfo section in separate file bookinfo.xml. commit abc454158e80cb39f9afb4d2731c8c1919e37450 Author: Adam Dickmeiss Date: Tue Oct 11 18:24:33 2005 +0000 Move ZOOM_task definition to private ZOOM header commit 323dd612ee1939e8082fa75edcd1083a238d5272 Author: Adam Dickmeiss Date: Tue Sep 27 17:52:46 2005 +0000 Added wrbuf_chlp_right commit a598b7f4ca1ad3c0ffcd5924aea118abc3d36574 Author: Adam Dickmeiss Date: Mon Sep 26 09:15:27 2005 +0000 Changed behavior of yaz-client's cancel command, so that it by default does not wait for a response. But if 'cancel wait' is given it will wait anyway. commit 8602fb839aceb9caf7b5e64d19cc0a35698dbe75 Author: Adam Dickmeiss Date: Wed Sep 21 19:46:33 2005 +0000 Allow multiple record syntaxes to be specified in 'format' command. If two or more are given, the syntax list in CompSpec is used for present requests. commit cf5cfe44d60e1066999eff41bd239f8f4a59cd3e Author: Marc Cromme Date: Tue Sep 20 12:07:29 2005 +0000 added a -g switch for gnuplot instructions in output. This way, the outpit stream can be used as input to gnuplot (when saved to a file, that is), and the gnuplot instruction file is obsolete, hence removed commit 0edf0cd59d2db226273f2d9f3ba3dad96834a23e Author: Marc Cromme Date: Tue Sep 20 11:29:03 2005 +0000 counting ewrror corrected such that multiple repeats do work correctly commit 66aa379343ce353b8faa99b86c666641bd0b1577 Author: Marc Cromme Date: Tue Sep 20 09:36:18 2005 +0000 moving int declaration to top of function to avoid upsetting old compilers commit 1172793f93230208d5b19c93a1d3c388060c91c8 Author: Adam Dickmeiss Date: Mon Sep 19 19:18:48 2005 +0000 Added ignore of zoom-benchmark program commit ba401b06433f6cebf02ec74bc64922293c39133f Author: Marc Cromme Date: Mon Sep 19 14:14:01 2005 +0000 better 3D graphics made possible by ordering events into groups of same connections commit 0f3124382d177e4bef923ab591220def33cc0b3c Author: Adam Dickmeiss Date: Fri Sep 16 21:46:24 2005 +0000 Use localtime_r rather than localtime if available. Only call time(2) and localtime(3) once per yaz_log call. commit 89cc3da6fca90bda52edaa8d368c755b5421ee06 Author: Adam Dickmeiss Date: Fri Sep 16 21:44:23 2005 +0000 Check for localtime_r commit 721b8849056eefbcec3965b9ae6eeb04b6580c9c Author: Adam Dickmeiss Date: Fri Sep 16 21:14:38 2005 +0000 New option -w sec for test log utility commit c6a5dc8ed65ae3ffcf8f27270c4de6f6ae05499e Author: Adam Dickmeiss Date: Fri Sep 16 21:13:54 2005 +0000 Filename passed to yaz_log_init_file assumed to be in strftime format. For each yaz_log call strftime is used to make an effective filename. If different from last yaz_log call, the log file opened. To make a log that rotates every midnight log%Y%m%d.log (year,month,day) could be used. commit 8f2212a99ffa921b44897379a5333f3bd09c2dd9 Author: Adam Dickmeiss Date: Fri Sep 16 10:51:05 2005 +0000 Remove C++ style comments. Remove mixed stmt/var decl. commit 1be28b14b54a225541d94621f325432a5d132b39 Author: Adam Dickmeiss Date: Fri Sep 16 09:16:40 2005 +0000 Implemented logging of authentication info in GFS. Bug #406. commit dad26e5daa5c4a10b926d3cd4026bf1aeb01d19f Author: Adam Dickmeiss Date: Fri Sep 16 07:05:46 2005 +0000 Boolrean and rather than bitwise and commit 5c5f9a65dedbaa37af4d1ba772568a176c9762a7 Author: Marc Cromme Date: Fri Sep 16 06:57:21 2005 +0000 tickmarks taken out commit 06aa72c00167e6611dbb41c157c65713d48871ae Author: Marc Cromme Date: Thu Sep 15 20:51:16 2005 +0000 changed output such that process comes first, then time, then progress. added3D plots commit 1632ffe4788128f6557bbaa9764e92493ae4934c Author: Marc Cromme Date: Thu Sep 15 11:14:22 2005 +0000 use points, no lines commit d7347ad7877139ce9da59cca55ac3efd91216f6b Author: Marc Cromme Date: Thu Sep 15 10:38:03 2005 +0000 made progres linearly increasing, and added gnuplot file commit 8c95dd70c139f3543227dc2f2cd43609dcb37ce6 Author: Adam Dickmeiss Date: Mon Sep 12 10:25:13 2005 +0000 Update NEWS with more info about SRU POST + resultSetId stuff commit 659228360513b8d8b5180dfc1455bf01b0f8767a Author: Adam Dickmeiss Date: Mon Sep 12 10:23:53 2005 +0000 Modified yaz_sru_decode to only perform SRU POST URL decoding if content-type is "application/x-www-form-urlencoded". commit 2bb854bbfa3e65436125c844d6a7edaf82133d8f Author: Adam Dickmeiss Date: Mon Sep 12 09:21:44 2005 +0000 Mention SRU POST commit 5009ac245dc8618eb45f4214b59c472c90869136 Author: Adam Dickmeiss Date: Mon Sep 12 09:14:57 2005 +0000 Changed yaz_uri_array to no assume ? in start of URI string. This is to fix SRU POST which does not have ? in start of URI string in HTTP body. commit 0d3acc914a510c397cb8f65bbd957697284c41d9 Author: Adam Dickmeiss Date: Mon Sep 12 09:13:26 2005 +0000 Fixed SEGV that could occur in Z39.50 v2 mode commit c3427ba84b89089ef7c2b1f5aaec843aa3af72e6 Author: Adam Dickmeiss Date: Sun Sep 11 20:21:27 2005 +0000 Compatibility fixes for older C compilers. Fixed printf format for print of time_t (changed %i to %ld). commit 1fe36f21be4d9ae40e62162651d144e0fd787df5 Author: Adam Dickmeiss Date: Sun Sep 11 18:39:10 2005 +0000 Added support for specifying SRW resultSetId + resultSetIdleTime in a Generic Frontend Server's search handler. Patch by Ko van der Sloot. commit 0c5b90281adaef44cc428df303cd54a0dee568b4 Author: Adam Dickmeiss Date: Sun Sep 11 13:32:39 2005 +0000 Put declarations before statements to make code work with older C compilers. commit 1908df105a83e97f3e404020fd9f4e2007654afd Author: Marc Cromme Date: Fri Sep 9 13:51:43 2005 +0000 pretty formatting with tabs for gnuplot reading commit 694d75cb1eaed143238ffc563414047dbfc77752 Author: Adam Dickmeiss Date: Fri Sep 9 11:29:54 2005 +0000 Fixed bug #410: Can not rotate log commit f04a7c5605e217527054d3bb617b1d22acba6f3e Author: Adam Dickmeiss Date: Fri Sep 9 11:28:48 2005 +0000 Add rules to build tstlog commit 455798a3154b5c08c872ca0fb90607ddea575038 Author: Adam Dickmeiss Date: Fri Sep 9 10:34:09 2005 +0000 Do not build the separate Multi-threaded (MT) library libyazthread.la. Instead make the library libyaz.la multi-threaded. Threading as a whole can still be disabled by configure option --disable-threads. Previosly, with older GLIBCs there were problems with MT libs under Apache. This has now been fixed a long time ago. commit fd446dea5b8ff2ac645272686f2be5308fd71f43 Author: Adam Dickmeiss Date: Fri Sep 9 10:33:45 2005 +0000 Major log system cleanup. Added various locks for the shared mask_names global structure. Also added mutex around yaz_log core code. It seems that vsnprintf or similar is not thread-safe after all (at least on Solaris 9). commit cb0de81ba19b675141bf9a8e5094e2fc973385e0 Author: Adam Dickmeiss Date: Fri Sep 9 10:32:09 2005 +0000 Changed nmem_mutex_create so that it properly handles concurrent calls. Now, only first thread will initialize the mutex. Others will do nothing. commit 40a2553a95734f7c8374e506b327bc6aca91f0cc Author: Adam Dickmeiss Date: Fri Sep 9 10:30:35 2005 +0000 Set ODR_MAX_STACK to 2000 instead of 10000. It seems that 10000 causes a stack overflow in threaded mode on FreeBSD. commit 04e7f1b09e302ca5862d752e63e2a6e396c82047 Author: Adam Dickmeiss Date: Fri Sep 9 10:20:14 2005 +0000 Document more tstlog options commit 9eca093a375190581d3ce6b4eb119dadd39692eb Author: Adam Dickmeiss Date: Thu Sep 8 13:51:27 2005 +0000 Fix cpp-if check for POSIX threads commit d8c29911dfa8d98b9adcc843bbc43fa6f139fe9b Author: Adam Dickmeiss Date: Thu Sep 8 13:25:33 2005 +0000 Added test tstlogthread which tests log system in multi threaded mode commit d061373561c647edbc7125796b53ab0c789d6648 Author: Adam Dickmeiss Date: Thu Sep 8 13:22:58 2005 +0000 Added option (-n) for tstlog to make call yaz_log a number of times commit d950c3e047f4ba482b7f36d7e81faae6d4b5dacb Author: Marc Cromme Date: Wed Sep 7 13:45:15 2005 +0000 added simple benchmark client program written over zoom api commit 23eba2ef170ee6236121e11480ad0c83b7211023 Author: Adam Dickmeiss Date: Wed Sep 7 11:53:25 2005 +0000 Document ZOOM_connection_last_event and the event types commit bd203324142f86a236b9867e10102abe14b7c676 Author: Adam Dickmeiss Date: Tue Aug 30 20:13:51 2005 +0000 Call bend_close during init if there is an old handle to release commit 457226809c15f78d68d29fd54791822d89c7ad80 Author: Adam Dickmeiss Date: Thu Aug 25 12:44:24 2005 +0000 yazphp.dsl no longer in use commit bc8a8531704e987a84f7e8d338eefc86e2b8fd70 Author: Adam Dickmeiss Date: Thu Aug 25 11:48:26 2005 +0000 Use proper location for VS C runtime msvcr71.dll commit 26bc83eeda2418e09c32f2ca4c9327901568fe98 Author: Heikki Levanto Date: Wed Aug 24 11:25:34 2005 +0000 Added 'exit' as an alternative for 'quit' in yaz-client (Per's request) commit 43a7aff23f364fd3fac6e9746c53cda01be13738 Author: Adam Dickmeiss Date: Mon Aug 22 20:34:21 2005 +0000 More type casts for char signed/unsigned and xmlChar. Using xmlStrcmp, xmlStrlen in a few places instead of strcmp/strlen. commit 637213cb79d34110cb367369ece0745cdc2b554f Author: Adam Dickmeiss Date: Thu Aug 18 18:42:37 2005 +0000 Updated to use libxml 2.6.20, zlib 1.2.3 commit b7c6d3740131ba03800c5c2cc935dc2626d12bb3 Author: Adam Dickmeiss Date: Thu Aug 11 14:21:55 2005 +0000 Increase the ODR stack size. Use different stack data structure for ODR constructed stack. commit e07c9107593d131eeb0f57cfd908e0e01be37010 Author: Adam Dickmeiss Date: Thu Aug 11 14:19:28 2005 +0000 Make test fail if circular refenced ODR does not fail commit 64e2bb98a2ecd300fc2819c2cbb0b72901f85fa6 Author: Adam Dickmeiss Date: Thu Aug 11 14:09:07 2005 +0000 Added tstodrstack to this commit aa8977f5880c963f6754cc0c4bfa05ef023e83a4 Author: Adam Dickmeiss Date: Thu Aug 11 14:08:38 2005 +0000 Test with 100 level query and another with circular refernce commit be5342e415872d9f43511f7b68fbcec42dc2c0a7 Author: Adam Dickmeiss Date: Thu Aug 11 14:00:43 2005 +0000 Added test for bad ODR nesting commit 2652e6d0585c1107642a3e53432c5a3bdd1cbb21 Author: Adam Dickmeiss Date: Wed Aug 10 09:12:53 2005 +0000 Added some news items collected frmo CVS commit 3f28795bb839ac16d929fb57180c0582e36c9de7 Author: Adam Dickmeiss Date: Wed Aug 10 09:02:43 2005 +0000 Removed /usr/share/yaz/etc from libyaz. All /usr/share/yaz content is now part of libyaz-dev. commit 8b40c551d14fe46439095674ba19cee2fe9a8e1c Author: Adam Dickmeiss Date: Tue Aug 9 18:29:35 2005 +0000 Fixed setting of record syntax for Extended Service update in ZOOM commit 162d5174d5fa510c0ee6810ae6bc0ee5f7c6fd61 Author: Adam Dickmeiss Date: Fri Aug 5 09:36:15 2005 +0000 Added missing start tag commit 4ebb00c5c13152f7c6742737ed1547b131af893b Author: Adam Dickmeiss Date: Fri Jul 22 06:23:14 2005 +0000 Implemented 'show all' command. Bug #398. Patch by Rob Styles. commit 7673e4ac1298b8557933244fc576219bd02fd640 Author: Mike Taylor Date: Tue Jul 19 12:41:20 2005 +0000 Note TCP/IP backlog change. commit aaf5a12c13670c9d034ecf809448201e1ef5d8de Author: Mike Taylor Date: Tue Jul 19 12:40:52 2005 +0000 Increase TCP/IP listener backlog from 3 (which I am guessing was copied from the SunOS manual entry way back when) so SOMAXCONN, so that the socket will queue as many incoming connections as it's able to handle ongoing connections. In other words, it will never now refuse a connection that it would be able to handle merely because it's not got around to accepting() enough of the pending connections yet. This is the behaviour anyway under Linux, where the listen() argument is ignored; but not under BSD and on systems such as MS-Windows that use BSD-derived TCP/IP stacks. The behaviour of YAZ-based servers should now be uniform across operating systems in this respect. commit c43b2d080cc557adb59b37b3d8f427871481c7e8 Author: Marc Cromme Date: Mon Jul 18 10:07:21 2005 +0000 started new developmenr version number to make side-by-side compilation with zebra feasable on debian systems commit 38e70c83aac4fabf9280fa246921e57d725424de Author: Marc Cromme Date: Mon Jul 18 10:06:36 2005 +0000 added some package names to message commit 20973de252eaeb5367d3c86f64b3db43fd9581d2 Author: Adam Dickmeiss Date: Thu Jun 30 08:34:01 2005 +0000 Check for open connection and proper protocol for update and xmles commands. Fixed uinitialized member in xmles. commit 5241f035b579b1dcf65fdbe379c0fb8f3ef7168c Author: Adam Dickmeiss Date: Wed Jun 29 22:52:54 2005 +0000 Pick latest Docbook XML DTD for 4.X commit f9828584ad6d0f66eb85b2e6d8bca5a29d569dcb Author: Adam Dickmeiss Date: Mon Jun 27 22:03:59 2005 +0000 Case insensitive CQL relations/indexes/operations. commit fb6d99a0c7e07d9cc4a315c447deaf6564a85505 Author: Adam Dickmeiss Date: Sat Jun 25 15:46:01 2005 +0000 Expanded tabs in all source files. Added vim/emacs local variables trailer. commit 67002f49611adb64993391b0cbf6c235f18080a4 Author: Adam Dickmeiss Date: Sat Jun 25 15:42:19 2005 +0000 Print ext command in help commit 2ba3d1d3bf2b57c7ac462b347cb18f06820ac73a Author: Adam Dickmeiss Date: Fri Jun 24 19:56:52 2005 +0000 WS updates. No code changes commit 0efb05eb1d586ad15c3c0b2f564b3cb58edbcd1b Author: Adam Dickmeiss Date: Fri Jun 24 12:50:46 2005 +0000 Add OID for External XMLES too commit 185028bccf8a5e6635fc5ef8f1f737c798e29c2a Author: Adam Dickmeiss Date: Thu Jun 23 15:03:40 2005 +0000 Fix relationModifier handling (incorrect value in check was used). commit 5b9a39fc00ab0969ff020f05c51c5d336e00d762 Author: Adam Dickmeiss Date: Thu Jun 23 13:09:42 2005 +0000 Changed xmles command to take OID + doc as parameter (previous version only took doc). commit 7a870687ef78606cd134e82fd9085722efe3c979 Author: Adam Dickmeiss Date: Tue Jun 21 07:34:26 2005 +0000 Describe new comman xmles. Update doc for Item Update. commit 58e7306c9f23189e136c52b21e39692392824ea7 Author: Adam Dickmeiss Date: Tue Jun 21 07:33:08 2005 +0000 Rename VAL_XMLUPDATE to XML_XMLES bacuase this is an XML extended service type facility rather than Update facility. commit 0866d407d83198a03f9876947ab29fde357f396d Author: Adam Dickmeiss Date: Thu Jun 16 09:05:10 2005 +0000 For RPM spec, use License: rather than Copyright: (obsolete) commit 7b43d0bb4e3c154246bdaba51b78e9861fd3bd97 Author: Adam Dickmeiss Date: Mon Jun 13 10:27:00 2005 +0000 For GFS, allow field record in bend_fetch_rr to hold NULL - meaning that record could not be returned and out of range. This present response will simply not include the record. Useful for Zebra 1.4 where approximate hit count is returned. commit 06cc6b7283ef5cd8e69adcfb760ea06f8a2c2c7b Author: Adam Dickmeiss Date: Fri Jun 10 17:56:35 2005 +0000 Update year in copyright message commit a0a3d5e9fb7405e286e464fcbef6d32d1bb1d246 Author: Adam Dickmeiss Date: Thu Jun 9 18:47:07 2005 +0000 LFS mode for yaz-marcdump so that it can read large ISO2709 files commit 71664fe63983cbd1a74e22dd2f5fb75df2f57981 Author: Adam Dickmeiss Date: Wed Jun 8 12:34:05 2005 +0000 Fix problem with pointer to last init response being corrupt due to set_auto_wait=off. If we have not yet received init response we assume option is set. commit ff9c21a4a93db3d49140602e6b8bdc062bde4153 Author: Adam Dickmeiss Date: Wed Jun 8 11:22:15 2005 +0000 Describe new yaz-client commands wait_response and set_auto_wait. commit fdc8cdeed79becf89c9ddedbaa0ebd6df3030c6b Author: Adam Dickmeiss Date: Wed Jun 8 09:11:17 2005 +0000 Bump version to 2.1.9. commit aafaead12e6b84b81ac131a5f2573310eed066ac Author: Adam Dickmeiss Date: Wed Jun 8 09:11:03 2005 +0000 Fixed wait_response handling so to deal with proper number of responses. commit 4fe454f1a00ab30fe2440b2bab2d9c1367dfe4e0 Author: Adam Dickmeiss Date: Tue Jun 7 19:51:45 2005 +0000 More NEWS commit 862b4ea8c948d499192abd1fd420000bec94d249 Author: Adam Dickmeiss Date: Tue Jun 7 19:47:31 2005 +0000 Use size_t for NMEM's get_block. Change space-left check to avoid signed/unsigned-ness problems. commit 8a616a92f7c17554add083af9163a8dd2d91694b Author: Adam Dickmeiss Date: Tue Jun 7 19:31:40 2005 +0000 Towards 2.1.8. commit e615729ba0e58045756f03cb409d5adc54181750 Author: Adam Dickmeiss Date: Tue Jun 7 19:25:38 2005 +0000 Fixed bug in yaz_marc_decode_buf. By mistake the routine appended MARC output rather than returning "new" buffer. commit b3aacc36f4f617fbc68126f102f6b96b7969932a Author: Adam Dickmeiss Date: Mon Jun 6 17:34:58 2005 +0000 Avoid mixed stmt, var declare commit c516122e7966c81722715371eb899655979adc8a Author: Adam Dickmeiss Date: Mon Jun 6 12:32:03 2005 +0000 Allow log level to be set for zoomsh commit fe3ae86a97bef6a815e2f04cdcaa77307801c902 Author: Adam Dickmeiss Date: Mon Jun 6 12:23:47 2005 +0000 Make a zoom,zoomdetails log level and try to make logging more consistent in ZOOM C. commit 44243f1a421921f27b7f4ab986a0d0a02285b664 Author: Adam Dickmeiss Date: Mon Jun 6 10:45:33 2005 +0000 Re-organize top-level code so main functions does less work. commit 850fbeeaac5612da71b74d277ef1588b6a57996b Author: Adam Dickmeiss Date: Mon Jun 6 10:37:14 2005 +0000 Internal package 2.1.7-1 for testing. commit b853eb3de1a249859eef71c9a285172a199656ce Author: Adam Dickmeiss Date: Mon Jun 6 10:29:33 2005 +0000 Add support for privately defined extended service, xml update, with OID 1.2.840.10003.9.1000.105.4. commit 561d51614757d3160312dca00a8aff7b9c218d3e Author: Adam Dickmeiss Date: Mon Jun 6 10:27:59 2005 +0000 Fix man page to include description of --comp. commit 48fdd95e1a026cfcc20ddd2329f0bda940f936e2 Author: Adam Dickmeiss Date: Mon Jun 6 07:28:12 2005 +0000 Bump version to 2.1.7 commit 85f1d1a0c611b54db8dd799e3b59be04a873c54e Author: Adam Dickmeiss Date: Mon Jun 6 07:25:47 2005 +0000 Warn about unknown Z39.50 options commit 8619c87efd449df46e51100488f7367e6832f4d4 Author: ja7 Date: Mon Jun 6 07:12:47 2005 +0000 Fix for bug 371 "options concurrentOperations ignores concurrentOperations" commit 9e53ad5fa700dbdf5d5c7ac518ff2458c5436da9 Author: Adam Dickmeiss Date: Fri Jun 3 20:33:13 2005 +0000 Use size_t for nmem block sizes internally commit a97174e3c213916ba968c8922ec69e9101badb2d Author: Adam Dickmeiss Date: Fri Jun 3 20:30:30 2005 +0000 Let nmem.h include stddef.h to get size_t defined. Hide strutures nmem_control and nmem_block. commit 029ba3910b555dc57c38fd8d5a27091e59338890 Author: Adam Dickmeiss Date: Thu May 26 21:47:16 2005 +0000 Add OID test. Changed prototype for ber_oidc. commit e497fb7edee04454e0f08fd1ed975fa6966341ac Author: Adam Dickmeiss Date: Thu May 26 21:46:40 2005 +0000 Allow decoding of zero-length OIDs, but reject OIDs longer than OID_SIZE. commit 2db81a6ebbae290b043cbe6b911972de3a00cb19 Author: Adam Dickmeiss Date: Tue May 24 12:16:22 2005 +0000 Towards 2.1.6. commit cbc7e0fcfe4559b017d1df1e62548f4207074780 Author: Adam Dickmeiss Date: Tue May 24 12:15:57 2005 +0000 Update dependancy libs commit df43df1a412b098478f0909e13430c3262c1e1c3 Author: Adam Dickmeiss Date: Fri May 20 19:29:18 2005 +0000 Added support for SRW sort in Generic Frontend Server. Patch by Ko van der Sloot. Member srw_sortKeys in bend_search_rr holds sortKeys - or NULL if none is provided. commit 022ffdfe3ef1fd6f868cc870c829b92f08166113 Author: ja7 Date: Fri May 20 06:22:48 2005 +0000 added 2 new commands for testing concurrent operations and cancel set_auto_wait wait_response commit 44522d349d922250169fe57b89dadbc6a1d12dab Author: Adam Dickmeiss Date: Wed May 18 20:23:47 2005 +0000 Warn if Libxml2 is not found commit 0594c1b39bd724b0f80ef9dc1ceb937f5cf2c199 Author: Adam Dickmeiss Date: Wed May 18 12:38:40 2005 +0000 Added functin yaz_del_charneg_record, which removes character set negotiation from otherInfo. commit 1db6276c63f9693d66273d710b4643572ed3f503 Author: Adam Dickmeiss Date: Wed May 18 12:30:00 2005 +0000 Reestablish LOG_APP,APP2,APP3 .. continued. commit 811aab8e16731999167fcb3cd2076e7256bf68ad Author: Adam Dickmeiss Date: Wed May 18 12:23:42 2005 +0000 Keep log level app2,app3. It is still being used commit 34406760af433ed1bf74d98df4265c4fa0c27230 Author: Adam Dickmeiss Date: Tue May 17 11:48:36 2005 +0000 Fixed bug #255: ZOOM does not decode Diagnostics in init-response. ZOOM C now decodes init diagnostics from user-information-field when present. If non-present, the pseudo error code 'Init Rejected' is issued. commit 967c7d6a006f0e4dc684b8086e08186d11311cfd Author: Mike Taylor Date: Mon May 16 12:00:31 2005 +0000 Ignore generated files "tstsoap1" and "tstsoap2" commit 3e21a17a5fbbdcacf674a943ce681207d72ce263 Author: Adam Dickmeiss Date: Wed May 11 12:19:15 2005 +0000 Bump version to 2.1.5 commit 35c80d96871b33904c9206919d2b31ce753d699b Author: Adam Dickmeiss Date: Wed May 11 12:07:48 2005 +0000 Initialize members scanClause,errcode,errstring for Z39.50 scan handling commit 725db3d87d84a1072939d74a537454a5d4e1e0cc Author: Mike Taylor Date: Mon May 9 11:17:06 2005 +0000 Ignore generated header files. commit 35aa1d01fc0569ea3022723acfcd0dc2d2f2d5fc Author: Mike Taylor Date: Mon May 9 11:16:29 2005 +0000 Ignore generated C files. commit b9bf54cdc48546ad358b829bb01e55fd612c1717 Author: Adam Dickmeiss Date: Mon May 9 11:01:07 2005 +0000 In yaz-client when evaluating time elapsed, it is done just after the incoming package has been decoded - not after display of result records etc. This to give a more true picture of target's performance. commit 7dbe4028e0cb3a7ed57fb2bbb0b05e62e112f56a Author: Adam Dickmeiss Date: Mon May 9 08:51:48 2005 +0000 Fix example commit 012d51aa722c887a9227a0c345c9663500486acc Author: Adam Dickmeiss Date: Sun May 8 22:53:59 2005 +0000 Bug fix: did not use outputCharset in the conversion of search term commit de7e9019dfe1a48e9bae5563152bed76075b850b Author: Adam Dickmeiss Date: Sun May 8 07:35:23 2005 +0000 Fixed bug #320: Improve UTF-8 -> Latin-1 conversion. The yaz_iconv utility now converts several composed UNICODE sequences to their single code Latin-1 equivalents. This improves the MARC-8 to ISO-8859-1 conversion in that more sequences are correctly converted. commit ec00e8cfc23cb7d04a9b13730607d6c094446f36 Author: Adam Dickmeiss Date: Sun May 8 07:33:12 2005 +0000 Comment out debug printf stmt commit dc068db61c02117e4e7e4aa3136f055965ec063c Author: Adam Dickmeiss Date: Sun May 8 07:13:57 2005 +0000 Fixed bug #322: yaz server does not log listener address if given commit 2539e1c4f232d30fd3e2a15f7668c6dc395c733a Author: Adam Dickmeiss Date: Fri May 6 12:18:26 2005 +0000 Encode SRW/SRU terms to UTF-8 from terminal (outputCharset). commit e8025256fa32ac74dee34da5ca49b0c8ac41508e Author: Adam Dickmeiss Date: Fri May 6 11:11:37 2005 +0000 Added two SOAP tests commit aad0bdeba9eb59ae42169cb20f1c2f4fc876d254 Author: Adam Dickmeiss Date: Tue May 3 21:32:19 2005 +0000 Collect CVS changes. commit c8caa31f42e8c22ddc30863c5df77997a338f8fe Author: Adam Dickmeiss Date: Tue May 3 12:30:13 2005 +0000 Added some help on proximity. commit 9cc8f4a4d0fd7f1e4bd6c9d5c85ef2dccaab5743 Author: Adam Dickmeiss Date: Mon May 2 19:33:55 2005 +0000 Removed a few redundant log messages commit a402baab0eac522450b628a6dcdfbc4a50e11bf0 Author: Adam Dickmeiss Date: Mon May 2 19:33:00 2005 +0000 Fix bug #307: It's impossible to specify indefinite/no timeout for ZOOM_event. Special timeout value -1 now means indefinite timeout (i.e. no timeout). commit f213113a8a7f5d311d5dc60aafbd6bc49d76e3b1 Author: Adam Dickmeiss Date: Mon May 2 19:17:48 2005 +0000 Added support for multiple languages and charsets to be specified in ZOOM. Each charset/language is separated by a blank. If negoation is in effect in init-response, Option "negotiation-charset-in-effect-for-records" set to 1(true) or 0(false). Code based on patch by Vasiliy Osadchuk. commit e627986266d8fcda1b273c1ecab36400494bf76c Author: Adam Dickmeiss Date: Mon May 2 19:14:33 2005 +0000 Added utilities nmem_strsplit and nmem_strsplit_blank which splits a string into arrays and allocates each stream using NMEM. commit 4dd0cf8a0d3ad8530d9bd6fb83b795cf73bd354f Author: Adam Dickmeiss Date: Fri Apr 29 19:06:13 2005 +0000 Fixed bug in scan handling in front end server: if preferredPositionInResponse was non-present it logged a NULL value. commit f517f60a95e2f94edd1efd750024642b5941ef08 Author: Heikki Levanto Date: Fri Apr 29 10:36:05 2005 +0000 Fixed the infinite recursion when calling yaz_log_level_init as the first call (before other log level or nmem_init calls) commit 7fdd4ae2061089485070e60cd7e2e8ea05d55b56 Author: Adam Dickmeiss Date: Tue Apr 26 19:51:31 2005 +0000 Modify one of the result set PQF examples commit a088ea8c24e28419057ddae8c23936272b578b7c Author: Adam Dickmeiss Date: Tue Apr 26 18:46:42 2005 +0000 Towards 2.1.4. commit 0714fa58662966ba0a4f4d9062de89524f539200 Author: Adam Dickmeiss Date: Tue Apr 26 18:46:24 2005 +0000 Added Mads Bondo Dydensborg commit dfd577ec0a4673580ae744babfdb9b4f8bdd80bf Author: Adam Dickmeiss Date: Fri Apr 22 15:14:24 2005 +0000 Missing quote commit b02f404f35f196079a0cd9569dace76d70c3f1c9 Author: Adam Dickmeiss Date: Fri Apr 22 15:09:36 2005 +0000 Allow srcdir!=dstdir for CVS checkout commit d675fdcc2386440425e3d230730378bc96a2664c Author: Adam Dickmeiss Date: Fri Apr 22 14:59:42 2005 +0000 Fix check for cql.c in dist-hook commit 3b703e575c88bd31b38f5af81c29aeed757ff11b Author: Adam Dickmeiss Date: Fri Apr 22 14:51:11 2005 +0000 WIN32 updates for Diagnostics from CSV files. commit 84d7b06c13daa609e93f353e655c4b02f936d65c Author: Adam Dickmeiss Date: Fri Apr 22 08:27:57 2005 +0000 Changed include/yaz/diagbib1.h and added include/yaz/diagsrw.h with diagnostic messages+codes for Bib-1 and SRW. Preprocessor defines are now defined for all those error codes. So instead of putting 109 in in a program, YAZ_BIB1_DATABASE_UNAVAILABLE can be used. The messages are now generated from a CSV files. See src/bib1.csv and srw/srw.csv. commit 00757f0ff95a6e5557823e151a7ae9d6f48f0f8f Author: Adam Dickmeiss Date: Wed Apr 20 13:51:47 2005 +0000 Towards 2.1.3 commit cd08b51966f34ed2b871f87bc07dd51a0d3fd6a4 Author: Adam Dickmeiss Date: Wed Apr 20 13:17:51 2005 +0000 Use XML comments for debug/verbose info. commit 163d307ad18c694b07f18da8071b517e6cd2095a Author: Adam Dickmeiss Date: Wed Apr 20 13:17:29 2005 +0000 Use XML comments for for meta info. commit b414bc74229f18537e6742b081aad7c4679006c8 Author: Adam Dickmeiss Date: Wed Apr 20 13:04:04 2005 +0000 yaz-marcdump skips non-digit chars betwen recs and warns about it commit 4602e6f66713b5c44cebd5a8deb2790e2cdea91e Author: Adam Dickmeiss Date: Wed Apr 20 12:59:51 2005 +0000 Exit if multiple server addresses is given (not supported) commit 22df553651d0ec221541c3df8766a114bbe05018 Author: Adam Dickmeiss Date: Mon Apr 18 08:04:36 2005 +0000 Update to libxml2 2.6.9, zlib 1.2.2 commit ee52d7a5f2325315de5391696bef64336ad88dbc Author: Adam Dickmeiss Date: Fri Apr 15 21:47:55 2005 +0000 Fix bug in CCL parser that could caused uninialized values of token member ws_prefix_len in some cases. Removed ccl_token_simple function. commit 1ee98ea192555da1959c4012736f7797cc5f91df Author: Adam Dickmeiss Date: Thu Apr 14 11:59:46 2005 +0000 Allow NULL value for basename in bend_fetch_rr struct commit b0ac22df7abdd45011addef4e726b278d5ba0f02 Author: Adam Dickmeiss Date: Mon Apr 11 08:41:39 2005 +0000 Fixed bug #280: make dist must depend on bison. The extra rule is necessary for automake 1.4pl6, not 1.9. commit 6215ff999c5f4c9ff2cc59ab99f794832ce30f1d Author: Adam Dickmeiss Date: Wed Mar 16 21:30:22 2005 +0000 Towards 2.1.2. commit 613473ea375ac8194f2cd14dd3f5f3820d6ac941 Author: Adam Dickmeiss Date: Wed Mar 16 21:28:43 2005 +0000 Get new codetables.xml from the LoC. Bug #273. commit 30d210952d2f8b305f9f79e637a4db53dcf0873c Author: Adam Dickmeiss Date: Wed Mar 16 21:26:37 2005 +0000 Change "to" type for MARC-8 -> UTF-8 conversion from 16-bit unsigned short to 24-bit unsigned int. Put code name (description of character) in output comments in C code. commit 4feb736e570d15bbc8254d593e0c44ed5066be85 Author: Adam Dickmeiss Date: Tue Mar 15 16:32:51 2005 +0000 Fixed bug #272: Preserve spacing for CCL terms. The spacing is preserved for phrases by saving the prefix (leading) white-space for tokens. Added ws_prefix_{buf,len} in ccl_token to support it. commit 5fcbf8f822406ea89d17737224232a5d0e90f2a4 Author: Adam Dickmeiss Date: Mon Mar 14 12:47:17 2005 +0000 Try again (to fix version) commit 1895c3d3396fa16d7437b1a1e0ee886dd6e62115 Author: Adam Dickmeiss Date: Mon Mar 14 12:41:14 2005 +0000 Fix bad version - should be 2.1.0-1 (was 2.0.1-1). commit e5e21b9c5dcaff4ef91c5a2f97eafd8aad6db11d Author: Adam Dickmeiss Date: Mon Mar 14 11:28:16 2005 +0000 Notes about MARC decoder changes commit adfb1e15b19027b2b2eaa9b89204fee07003842b Author: Adam Dickmeiss Date: Mon Mar 14 11:24:59 2005 +0000 Fix version commit 79b822d1cd0f781768924c32e1fdc1b210e7c368 Author: Adam Dickmeiss Date: Mon Mar 14 11:17:58 2005 +0000 Towards 2.1.0 commit bd2e35d738cb215abd9b113ffe3859a65b39d619 Author: Adam Dickmeiss Date: Mon Mar 14 11:14:21 2005 +0000 Support XInclude for XML config commit 587f46d7d56e57a3cfbbc50dd7fbc15e709190ac Author: Adam Dickmeiss Date: Mon Mar 14 11:13:12 2005 +0000 Example as given in doc commit ce9d3b203396b98a85dbc89bba85ba784ae4a3d8 Author: Adam Dickmeiss Date: Mon Mar 14 11:12:43 2005 +0000 Notes on changes for hosting commit e232998663cbfa8e9c489d99245e530c03223571 Author: Adam Dickmeiss Date: Mon Mar 14 11:12:16 2005 +0000 All elements for YAZ GFS XML config described commit 02e5bbc0d685b1f565cbd71bc7c61858e74c4382 Author: Adam Dickmeiss Date: Sun Mar 13 21:43:00 2005 +0000 Renamed ztest-options.xml to gfs-options.xml. Added GFS common synopsis to gfs-synopsis.xml. Initial work on GFS virtual hosts. commit 681b7be9d32f67cd1d7a970117d5526d348d5bd7 Author: Adam Dickmeiss Date: Tue Mar 8 13:59:08 2005 +0000 Exit GFS if XML parsing fails. commit c8e6236a5d7deea490a8c6902735f70c1515c0dc Author: Adam Dickmeiss Date: Tue Mar 8 11:48:09 2005 +0000 Call chdir before bend_{start,stop}. commit 49566a6ea1cc01c896584427ce1d327f7cd2be7e Author: Adam Dickmeiss Date: Tue Mar 8 11:07:49 2005 +0000 Read directory element of XML config so that server may chdir to proper location. commit 6ee931daadb39712436b7ba95326681de9369c14 Author: Adam Dickmeiss Date: Mon Mar 7 06:09:01 2005 +0000 New test result. commit 49dfd3f8ec91ce7ced774d66f5db9a248e574bbf Author: Adam Dickmeiss Date: Mon Mar 7 06:07:33 2005 +0000 No leading spaces in warning comments commit f514c7fcb9cd0c205b308a1213112317d564874c Author: Adam Dickmeiss Date: Sun Mar 6 21:27:09 2005 +0000 Better diagnostics for bad MARC records. commit 5a63f1bd6974a0fdd748d48ac791a414528f432e Author: Adam Dickmeiss Date: Sun Mar 6 12:54:32 2005 +0000 For record update, open file in binary mode commit af2e686d7372a0a2f4175cbe46d99fadd64bb465 Author: Adam Dickmeiss Date: Sat Mar 5 12:14:12 2005 +0000 WIN32 Updates for GFS to use TLS for control block. commit 7a5a8c9cbc588f8c52f54bacca3e8e07058f713f Author: Adam Dickmeiss Date: Sat Mar 5 09:17:27 2005 +0000 Fix compilation in mode without libxml2 (bug introduced in previous commit). commit c9d151d16586a20585bfb92607a6d578ceb07770 Author: Adam Dickmeiss Date: Fri Mar 4 12:00:00 2005 +0000 buildconf script configures directlry when -d / -c is given commit 7857ed3da7f4c6ed8bd99ad567cb3999b83b2c53 Author: Adam Dickmeiss Date: Thu Mar 3 23:16:20 2005 +0000 Added explain facility for frontend server XML config. Renamed element cql2pqf to cql2rpn. commit 89ebb6f247bae61360fe7ee2997c27e030ee1820 Author: Adam Dickmeiss Date: Wed Mar 2 23:59:22 2005 +0000 Wrap OPACXML in opacRecord as suggested by Larry Dixson. commit 8b2791efeb9e671fabf90c36c6828a5bf71c887b Author: Adam Dickmeiss Date: Tue Mar 1 20:37:01 2005 +0000 Enhancements and new bugs in Generic Frontend Server.. Reworked YAZ GFS XML config. Added pqf2cql support. commit 77d6853aec94df6c69da9cd35d8ba982b9b12299 Author: Adam Dickmeiss Date: Fri Feb 25 17:05:09 2005 +0000 Extended OPAC display utility. OPAC display utility renders bibliographic (MARC) record as well. Added yaz_opac_decode_wrbuf to supplement yaz_marc_decode_wrbuf. commit 9641621e0fbb1ac4eec857d70203637e89d184ce Author: Adam Dickmeiss Date: Fri Feb 25 17:04:45 2005 +0000 yaz_marc_decode_wrbuf no longer Wrewinds WRBUF commit dbb6de2b356dec17a7be4f118c30dad487edac52 Author: Adam Dickmeiss Date: Fri Feb 25 17:03:41 2005 +0000 Bug fix. Dump record content (-m) was duplicated for XML records commit 5265b9beb2ccb4208c503ad60c56daa97a9c194d Author: Adam Dickmeiss Date: Fri Feb 25 09:37:53 2005 +0000 Fixed bug that caused MARC decode to SEGV for some invalid MARC records. Adde marc4 + marc4.xml as a test case for it. commit 455aa1ff25e359fd7efef0a892619940a072e015 Author: Adam Dickmeiss Date: Fri Feb 25 09:36:46 2005 +0000 YAZ 2.0.35 commit 33b63ea317b9ccafa03f00ac12ffcad983dc2b3c Author: Adam Dickmeiss Date: Fri Feb 25 09:36:32 2005 +0000 YAZ 2.0.35 windows version commit 29b35858c0f8b9223be43bca5509b1dbe7635bca Author: Adam Dickmeiss Date: Mon Feb 21 14:37:54 2005 +0000 Fix M4 quotation (square brackets in strings) commit ce36f7f820809631ddafa09616d59d6d8640566d Author: Adam Dickmeiss Date: Mon Feb 21 14:37:16 2005 +0000 Quote 3rd arg to AC_CHECK_FUNC. YAZ 2.0.35 commit 4d2f3abbf60e9b3f49e1d769700ff44cc18d11cf Author: Adam Dickmeiss Date: Wed Feb 9 12:41:45 2005 +0000 Avoid unnecessary logs commit 8a836c1260ff2c7abf6752cc71262f582adf68b4 Author: Adam Dickmeiss Date: Wed Feb 9 12:40:56 2005 +0000 YAZ 2.0.34-2. commit 945e7d349478e8adddecf9aef35b62ec110c71ee Author: Adam Dickmeiss Date: Wed Feb 9 09:18:27 2005 +0000 Increase listen backlog parameter for UNIX domain sockets. commit 1425def96bbdcd685ab8634c4e655766819abd6a Author: Adam Dickmeiss Date: Tue Feb 8 23:43:56 2005 +0000 Fix option for MarcXchange commit 7acd3d5df1b0f5dd02f5ff7203934e598e1680d6 Author: Adam Dickmeiss Date: Tue Feb 8 22:47:14 2005 +0000 New MARCXML test results - due to new warning issued commit 03c6231e409402895462714b02d8d4e3ea463635 Author: Adam Dickmeiss Date: Tue Feb 8 14:58:19 2005 +0000 Dist zlib1.dll instead of zlib.dll commit 4f24bf72fe0d24c0215274d06d4cbd7e487457d0 Author: Adam Dickmeiss Date: Tue Feb 8 14:19:21 2005 +0000 Towards 2.0.34 commit 60a702f390f7e2addfdab79f2328db3ba2897c8b Author: Adam Dickmeiss Date: Tue Feb 8 13:51:30 2005 +0000 Added MarcXchange support. commit b61c6a39b6cc8152500cddb42ba99850249bf43b Author: Adam Dickmeiss Date: Tue Feb 8 13:47:10 2005 +0000 Summarize changes commit d7d0f190d7680a5b1ee4dd1635c3c30240d5782d Author: Adam Dickmeiss Date: Tue Feb 8 13:34:29 2005 +0000 Added check for usleep(3) commit 173c87dff98e363ecf2a663ae9de91bac69e77f5 Author: Adam Dickmeiss Date: Tue Feb 8 13:23:23 2005 +0000 Worked around bug #261 again. Added sleep for EAGAIN case commit 735c4cddf578265a31d960dffffc1bf65b75419c Author: Adam Dickmeiss Date: Tue Feb 8 01:01:42 2005 +0000 Look for docbookx.dtd in more places. commit 61de1faf970a0b81ef51c3c460510e186e1abee2 Author: Adam Dickmeiss Date: Mon Feb 7 11:23:47 2005 +0000 WIN32 compile fixes. No TLS for control block yet commit 65584e65c2b3b76e16c2ff984975a44813cf5353 Author: Adam Dickmeiss Date: Mon Feb 7 11:23:18 2005 +0000 Avoid ANSI inline declaration commit e728acf714651b3da99c282d27294e45981fdf91 Author: Adam Dickmeiss Date: Fri Feb 4 20:27:19 2005 +0000 Fix xmlns for SRW diagnostic in yaz_srw_diagnostics commit 85e3c8107b667d8c0701dc26974fbb3b17b74a4f Author: Adam Dickmeiss Date: Fri Feb 4 13:28:47 2005 +0000 Fixed problem with connect on Unix domain sockets that returned errno=EAGAIN. That is now treated as EINPROGRESS error. commit 7a896baab71b355189e437905513f4fdf53d1f5d Author: Adam Dickmeiss Date: Thu Feb 3 09:09:55 2005 +0000 Remove old-style logging commit 785a4eb49c2023ac55d8eac471cefcddf6d19e80 Author: Adam Dickmeiss Date: Wed Feb 2 23:27:19 2005 +0000 Fix MARC test case commit 1b22167f72a2de519e28be87aad12b1633cad835 Author: Adam Dickmeiss Date: Wed Feb 2 23:27:05 2005 +0000 Enable test case for bug #260 commit 5d66cee9efbd06349b0445661bbfd1de69ce6d75 Author: Adam Dickmeiss Date: Wed Feb 2 23:26:38 2005 +0000 Fix bug #260: Multi combining MARC-8 chars not converted properly commit 4050fa4e2dbbd93fe6297c2cab8e59ed01e9060d Author: Adam Dickmeiss Date: Wed Feb 2 23:25:08 2005 +0000 Never assume non 00X have controlfields commit 96a3a7bc95bf4014fb1224a7e3ad711e5e20e785 Author: Adam Dickmeiss Date: Wed Feb 2 23:07:56 2005 +0000 Put two spaces before datafield end tag (includes subfields) commit 1769f2fbe5b8de995b351754eec51ccdb1824dd4 Author: Adam Dickmeiss Date: Wed Feb 2 20:50:38 2005 +0000 Fixed bug #263: YAZ MARCXML dump shows extra spaces after control fields. Added yaz_marc_subfield_str which defines subfield lead string which is used in YAZ_MARC_LINE format. Default string is blank+$. Added yaz_marc_endline_str which defines end of fields string used in YAZ_MARC_LINE format. Default string is newline. commit 8258e03b8aca7dd78c650b6461e240e3f22cb8dd Author: Adam Dickmeiss Date: Wed Feb 2 20:25:37 2005 +0000 Fix statserv_getcontrol for non-threaded YAZ commit 7d212bcdc9d80ed8cc48e6dd72cb63855c936259 Author: Adam Dickmeiss Date: Wed Feb 2 17:11:05 2005 +0000 Added yaz-client command scansize commit 12cb41de8229035b3f5ca7268c6bb3fa62f19828 Author: Adam Dickmeiss Date: Wed Feb 2 10:17:02 2005 +0000 Added test case for bug #260 commit 273ad9b2ed17eaf4daa43e321ad4b96be2b92518 Author: Adam Dickmeiss Date: Tue Feb 1 21:07:19 2005 +0000 Better diagnostics for iconv test. Added case for bug #258 commit 45e7b7e3268c9d93cdecb1e9b363e2c02ae1efc4 Author: Adam Dickmeiss Date: Tue Feb 1 21:06:37 2005 +0000 Fixed bug #258: marc-8 to utf8 fails for some composed sequences commit 6bc4a3e8b7e73275e8b37e6de40e4c596302bd51 Author: Adam Dickmeiss Date: Tue Feb 1 17:23:36 2005 +0000 Added include stdlib.h commit c519e4716646be3b24f7d4d3de99e06e423da865 Author: Adam Dickmeiss Date: Tue Feb 1 14:46:47 2005 +0000 Added support for multi-homed YAZ frontend server. A backend config may be choosed based on host and/or port. For Z39.50 host is picked from OtherInfo in InitRequest (VAL_PROXY OID). For HTTP, host is picked from HTTP header. Configuration is XML based . Libxml2 is required. commit ee43c59df798a12d811827cfb2bb64aca37d492a Author: Adam Dickmeiss Date: Tue Feb 1 14:43:50 2005 +0000 Allow text/plain as HTTP Content-Type for SRW HTTP POST. I can't get ab to send text/xml. commit 31e3a0ef5a0866477a3b54dc6ffbeb0aca4e0029 Author: Adam Dickmeiss Date: Tue Feb 1 14:37:47 2005 +0000 Added member user for COMSTACK that is an opaque pointer for user-defined data. commit 25c0a712af079e5efd0b4c16a3c9094e83879b82 Author: Adam Dickmeiss Date: Thu Jan 27 09:08:42 2005 +0000 Fixed bug #255: EXTERNAL decoding with ASN.1 types in octet strings. Added a few doxygen comments as well. commit 019f1f2c2ea9a8f2b31904097933562c07365083 Author: Adam Dickmeiss Date: Thu Jan 27 09:06:51 2005 +0000 Added prototype for zget_init_diagnostics_octet. Added a few doxygen comments commit c74c6895815390dd19ec8b4f346bdb32dc1b07bb Author: Adam Dickmeiss Date: Thu Jan 27 09:06:12 2005 +0000 Added zget_init_diagnostics_octet which is similar to zget_init_diagnostics but encodes the EXTERNAL data in the octet-aligned arm. commit d2fc23a41ae7eb6bd5f6e76a45530ede776bd018 Author: Adam Dickmeiss Date: Thu Jan 27 09:05:09 2005 +0000 Fix printing of some non-zero terminated strings. WS updates. commit f0c297969e3fe8d043ef18022180b305b21b24a9 Author: Adam Dickmeiss Date: Thu Jan 27 09:04:07 2005 +0000 Fix comments for some ODR members commit fe575eb97799f141b6e97d17c0e64619c4a9cd03 Author: Adam Dickmeiss Date: Fri Jan 21 09:23:27 2005 +0000 Do not use acquire locks (NMEM_{ENTER,LEAVE}) in nmem_mutex_{create,destroy}. WS updates. commit 437e30b2d7d34613611192acf4eb7e3be153b3b9 Author: Adam Dickmeiss Date: Wed Jan 19 09:18:08 2005 +0000 Make scan logging prettier commit 274e56850a285f2b4fa1c3e5aafd3dcc2999f990 Author: Adam Dickmeiss Date: Wed Jan 19 08:26:59 2005 +0000 Do not set HAVE_.. stuff for WIN32 commit 49749c69ee15dee28948d353092d1bd8626b72df Author: Adam Dickmeiss Date: Wed Jan 19 08:26:44 2005 +0000 Added include sys/types.h if it exist. Added include sys/stat.h on Win32 commit 4e82b831a8ac31e25b246a631acde354d8161688 Author: Adam Dickmeiss Date: Mon Jan 17 13:09:43 2005 +0000 Added include stdlib.h commit 479669a3e2da231aaf11ff2a66ac5b72a4460d26 Author: Adam Dickmeiss Date: Mon Jan 17 13:08:53 2005 +0000 Added include sys/time.h commit d3b97cc263939f772a9cd0cae6c0e147278d2e96 Author: Adam Dickmeiss Date: Mon Jan 17 13:03:27 2005 +0000 Added include stdlib.h commit 6cdf6f2a3f67ce56d13b64a64a2a192f51ac445c Author: Adam Dickmeiss Date: Mon Jan 17 12:53:04 2005 +0000 Fix MAC compilation commit 811a01b02b3bf8851f13e1cdef1c01f755aa4ca5 Author: Adam Dickmeiss Date: Mon Jan 17 10:29:00 2005 +0000 Fixed includes for FreeBSD commit 5fc363ebc5bf97dc2285bceaa742b69e19c4c8b2 Author: Adam Dickmeiss Date: Mon Jan 17 10:19:48 2005 +0000 Do not declare several variables in non-XML mode commit 2407cf36ac1dfe34cbfc2a5d1c1695976233e611 Author: Adam Dickmeiss Date: Mon Jan 17 10:10:00 2005 +0000 Bump version to 2.0.33 commit 5766857b4ed71f0ebe01b1f5fb2ebfb052bd5dfa Author: Adam Dickmeiss Date: Sun Jan 16 23:20:55 2005 +0000 Define HAVE_SYS_TYPES_H in VS makefile commit 92a1c29ad9003d7dad229fd5170ed83269c87658 Author: Adam Dickmeiss Date: Sun Jan 16 22:12:39 2005 +0000 Minor include updates to make Windows happy commit 77ab03610562a282025ed218c7a0b3f8dfe2a214 Author: Adam Dickmeiss Date: Sun Jan 16 22:12:02 2005 +0000 Assume sys/stat.h is available on Windows commit f63c8f02c94733255df60469574324c7ef211f3e Author: Adam Dickmeiss Date: Sun Jan 16 22:01:13 2005 +0000 Added check for various headers, since comstack.h no longer include them commit 3126e48f1dcdd5684ef3677ac4cd6b1cc099f107 Author: Adam Dickmeiss Date: Sun Jan 16 21:56:42 2005 +0000 Do not use exit commit d35bf56a106a37b249e6ee4ab9f7eabd86662edb Author: Adam Dickmeiss Date: Sun Jan 16 21:56:24 2005 +0000 include stdlib.h commit 825d22351b1d59c71e98357b4931bf7bb67daa3a Author: Adam Dickmeiss Date: Sun Jan 16 21:51:49 2005 +0000 Removed away include of system headers in comstack.h. Instead include them in the various implementation C files. Added more headers in AC_CHECK_HEADERS. commit 434f8168ad00b6530158055cb9c7b4adaf9ebd9f Author: Adam Dickmeiss Date: Sun Jan 16 21:40:51 2005 +0000 WS update commit bcdea3c551bcbbbb94d69fbea014f26c85ff7ef7 Author: Adam Dickmeiss Date: Sun Jan 16 00:16:56 2005 +0000 Update for Libxml2-2.6.15, zlib-1.2.1 commit 4c176312acdc3444c9afc820f76a393e64668e52 Author: Adam Dickmeiss Date: Sat Jan 15 19:47:08 2005 +0000 Bump year commit 163ca1323081c3a85323b55cb0ff668b8f7c83a1 Author: Adam Dickmeiss Date: Tue Jan 11 12:13:18 2005 +0000 Towards 2.0.32 commit 2b3dd45defce5c722aea0d5cecfbd8db7df55818 Author: Adam Dickmeiss Date: Tue Jan 11 12:07:54 2005 +0000 Added SRW Scan support in yaz-client and Generic Frontend Server. commit 1c24ea5eab2eb460ba34f3b1b64fd7219916db4c Author: Adam Dickmeiss Date: Tue Jan 11 12:05:32 2005 +0000 match_xsd_string returns empty string rather than NULL for empty CDATA commit d85dad0f037288e50eddd2883f42403ff038c057 Author: Adam Dickmeiss Date: Tue Jan 11 10:50:06 2005 +0000 Added SRU decode of maximumTerms, responsePosition and extraRequestData commit fe4819bb8bb296f3d6b3db9121cd648672c95537 Author: Adam Dickmeiss Date: Tue Jan 11 10:48:47 2005 +0000 Fixes for value and pScanCluase in scan SRW codec commit 99deca38579f9e6c01550312e8004477a26921a8 Author: Adam Dickmeiss Date: Tue Jan 11 10:44:07 2005 +0000 Check for database in ztest_scan commit d62fb74edd3775095d23f2bffbace2b60cd3c57f Author: Adam Dickmeiss Date: Sun Jan 9 21:52:48 2005 +0000 Added whereInList member to SRW Scan Term commit 40317def0c00a4bb9ed1ec8c195af46e6c02c463 Author: Adam Dickmeiss Date: Sun Jan 9 21:50:26 2005 +0000 Rename pqf scan parameter from x-ScanClause to x-pScanClause commit f64aa61c61bf8bf851d7b66a5fc137669dc77452 Author: Adam Dickmeiss Date: Sat Jan 8 01:20:18 2005 +0000 Added support for SRW scan in yaz-client commit 5c3d2d2ab097e4bb59ba5718a396b020a2d302c0 Author: Heikki Levanto Date: Fri Jan 7 10:28:28 2005 +0000 Added a warning (always to stderr) when opening the log file fails commit 7788edff9108cafc593759e9e406d6da6509c799 Author: Adam Dickmeiss Date: Wed Jan 5 10:29:42 2005 +0000 Check that assignments to NMEM memory for some basic types commit 0e79cb04d61eec08580aa2ccc2883b9459db3cf1 Author: Adam Dickmeiss Date: Wed Jan 5 10:23:41 2005 +0000 Only use type 'long long' when available. commit d35622cea47fdf58f47d31023e28e49eaf1ecb47 Author: Mike Taylor Date: Tue Jan 4 21:31:44 2005 +0000 Recognise yet ANOTHER location where docbookx.dtd may be found -- this time, it's /usr/share/sgml/docbook/dtd/4.2 which is what my Debian testing laptop uses. Must be a change in sarge. commit 8aa7ee02ee4abdda2f19b42236600f2954ce6c05 Author: Mike Taylor Date: Tue Jan 4 21:29:10 2005 +0000 Ignore generated file tstlog commit ff0a9444cf86678ba0838569d1d610fa9fda9c57 Author: Mike Taylor Date: Tue Jan 4 21:28:06 2005 +0000 nmem alighment. commit 42dcf1902943937854ceacc8e3c72ec40fe2f48c Author: Mike Taylor Date: Tue Jan 4 21:27:54 2005 +0000 Return aligned blocks on the smallest boundaries that are suitably aligned for all possible types on the particular architecture YAZ is being built for. commit 11b2bb8143a6831d797df9f042ade8078f465802 Author: Adam Dickmeiss Date: Tue Jan 4 09:41:34 2005 +0000 Bump version to 2.0.31 commit 5b03be7b32fa5963aed1e575478a716b031cb17f Author: Adam Dickmeiss Date: Tue Jan 4 08:34:41 2005 +0000 Fix date commit 22bdebf29b4a1be5186ce72960a978d7adc8b8c6 Author: Adam Dickmeiss Date: Tue Jan 4 01:39:22 2005 +0000 Mention most important changes commit 9320dd82ebf2e4c0e656139618b897c26331702c Author: Adam Dickmeiss Date: Tue Jan 4 01:25:20 2005 +0000 Align NMEM blocks to 2*sizeof(long) commit 87307e08d8caeab5cd574fbe696878e8f0469e49 Author: Adam Dickmeiss Date: Mon Jan 3 13:36:06 2005 +0000 Towards 2.0.30 commit 6c35039e69102dbbce08e8f39a2fbbade4406c16 Author: Adam Dickmeiss Date: Mon Jan 3 13:28:35 2005 +0000 Towards 2.0.30. commit bc1239ae8cd63c0d42fbffebf68cdb452159f8f2 Author: Adam Dickmeiss Date: Mon Jan 3 12:34:09 2005 +0000 Towards 2.0.30 commit 6480fba1d587bfbd67e0a3e7775969669f8b2b5b Author: Adam Dickmeiss Date: Mon Jan 3 11:56:08 2005 +0000 Fix threading commit 66d6c2af06d2b293f183cfead975924e9da709c6 Author: Adam Dickmeiss Date: Mon Jan 3 09:18:36 2005 +0000 For daemon mode (-D), let parent wait till child has created PID file commit 9b9bfb10cc46f2d97c38bc9a0a9f96e9a5f385f4 Author: Adam Dickmeiss Date: Sun Jan 2 20:31:39 2005 +0000 Make negotiationCharsetRecords of type int commit b8cceb769510f6f0ebaac93e6b056de7950c53e8 Author: Adam Dickmeiss Date: Thu Dec 30 00:25:20 2004 +0000 Cast PIDs to longs so they can be printfd commit 6fad29ebb31777f3e01ad80f0c59a7a4dede9989 Author: Adam Dickmeiss Date: Thu Dec 30 00:21:12 2004 +0000 Avoid signed char subscript commit f2f3c5ba7374be95aba4f8f35bccd3c4c067e625 Author: Adam Dickmeiss Date: Thu Dec 30 00:20:15 2004 +0000 Include unistd.h always commit 905df6869e5ad8ab9f34590cce771fe50c444473 Author: Adam Dickmeiss Date: Thu Dec 30 00:11:00 2004 +0000 Avoid signed char subscript commit 2af25caef50026e60e2ae91dbf175e86c31463df Author: Adam Dickmeiss Date: Wed Dec 22 23:48:34 2004 +0000 Remove extra space in request log output commit 8071f0286b3c551df57bc22b11125d00d12725e6 Author: Adam Dickmeiss Date: Wed Dec 22 23:47:11 2004 +0000 Change GFS so that it listen&accept in parent process rather than child. This avoid the synchronization pipe, and seem to make the GFS a little faster. commit 2f5963dcec74ca26d9b0c2d75b007d98efe56f2e Author: Adam Dickmeiss Date: Wed Dec 22 23:45:13 2004 +0000 Added OID for charneg-4. commit 672bc1d4d13f12c0d291b0cff62be84fbe69f961 Author: Adam Dickmeiss Date: Tue Dec 21 20:25:39 2004 +0000 Command negcharset may take up to three args charset records version where records is an integer (0=false, 1=true), version is charset negotatition version (3 or 4). commit 9378c985aa6ea1ec9d5ddd6c34978051312dd035 Author: Adam Dickmeiss Date: Tue Dec 21 00:34:31 2004 +0000 When receiving no records in present response don't throw non-surrogate diagnostic "decoding failed. Instead add surrogate diagnostic record 14: System error in presenting records. commit dc641263aab10156d81d8c053ecd66dce9a46b85 Author: Adam Dickmeiss Date: Tue Dec 21 00:31:03 2004 +0000 Minor tweaks in logging (mostly for SRW search) commit ab405e9374f3fbbff57b5c69e3ee9bf9c7aa7351 Author: Adam Dickmeiss Date: Mon Dec 20 23:38:39 2004 +0000 Prefix PRN/Type-1 queries with RPN: rather than Z: commit cc8dd1424e89a4ad96ce0b30a1bd0a6ecf4f8715 Author: Adam Dickmeiss Date: Mon Dec 20 23:38:03 2004 +0000 Fixed bug in pack_records that caused piggyback searches to crash. Improved logging of diagnostics a bit. seshigh now using zget_- utilities. commit d40d934f291620fb4f37664c6908386297170371 Author: Adam Dickmeiss Date: Mon Dec 20 23:36:13 2004 +0000 Define YAZ_USE_NEW_LOG for YAZ itself commit b66b19957ce2c2c4db41ca6986bd7978b42db618 Author: Adam Dickmeiss Date: Mon Dec 20 23:35:42 2004 +0000 Added functions to initialize various structures for diagnostics: zget_DefaultDiagFormat, zget_surrogateDiagRec, zget_init_diagnostics, zget_DiagRecs, zget_DiacRec. commit 3e818921e959b654fe072fc7419f1b7f89007b21 Author: Heikki Levanto Date: Mon Dec 20 15:52:53 2004 +0000 Added YLOG_FLUSH to the default log level, to avoid problems on Solaris. Maybe this should be conditional on the OS, as it works fine under Linux? commit 5475567b7f05fbc245cedb1b3ecdbc63ac671685 Author: Adam Dickmeiss Date: Thu Dec 16 08:59:56 2004 +0000 Include marcdisp.h so that atoi_n gets public on WIN32 commit 130c4f389f6e2166f533beb831e991f806130f72 Author: Adam Dickmeiss Date: Thu Dec 16 08:59:36 2004 +0000 Fix declaration (WIN32 section) commit 86385826e403a1e2e194f41657e7e8470c33d4ed Author: Adam Dickmeiss Date: Wed Dec 15 09:10:12 2004 +0000 Get rid of tex messages commit bf3a7598b58514d7f8d864ccc5e37019af9455a6 Author: Adam Dickmeiss Date: Tue Dec 14 10:52:13 2004 +0000 Include stddef.h because of size_t use in header. commit 91905e9defa685f0c38914372a188721c38d0942 Author: Adam Dickmeiss Date: Mon Dec 13 20:17:41 2004 +0000 Change wording WRT ylog.h/log.h commit 202a9b4632862b584c3d024881d4bbe0d5b2bee5 Author: Adam Dickmeiss Date: Mon Dec 13 20:16:50 2004 +0000 Change order but not semantics regarding old LOG_-defs. commit f4ed92d039e200b903bd7330a9fd58bd11d71825 Author: Heikki Levanto Date: Mon Dec 13 14:31:19 2004 +0000 Included xmalloc.h from log.h, if usingthe old system, as it used to be there... If using new system, you need to include it yourself commit f4c095a042b1bcccb78136be87944e46412386aa Author: Heikki Levanto Date: Mon Dec 13 14:21:54 2004 +0000 Moved back to a single log.h, with the new #define YAZ_USE_NEW_LOG commit 8894d816ae5a3dfaa800dde0d6442f2bef144782 Author: Adam Dickmeiss Date: Mon Dec 13 14:15:55 2004 +0000 Define YAZ_USE_NEW_LOG=1 if app require YAZ > 2.0.28 commit 769837bc0ae28324b0a793549e1a20036e42e2e5 Author: Heikki Levanto Date: Fri Dec 10 10:42:33 2004 +0000 Deprecated yaz-util.h with a warinng in place. Re-enabled the warning in log.h Note: All these warings can be avoided with CFLAGS="-Wall -g -D YAZ_USE_OLD_LOG" ./configure commit 8862e24160fcdd1d99da8b8203e6d4fe942b91de Author: Adam Dickmeiss Date: Thu Dec 9 09:37:00 2004 +0000 Fixed place for YAZ_END_CDECL commit bbee0df765624f1596f9063d7284dc8874c66056 Author: Adam Dickmeiss Date: Thu Dec 9 09:30:00 2004 +0000 Document commands: list_all, set_auto_reconnect, negcharset, displaycharset, register_tab, sleep, zversion, options. commit 307671c871f04d55325ed94fc2c403797376efa3 Author: Adam Dickmeiss Date: Thu Dec 9 09:27:51 2004 +0000 Document .yazclientrc commit 3a98dc2732d34893d13b3b10e9cc9dd216ec01ae Author: Adam Dickmeiss Date: Thu Dec 9 09:25:44 2004 +0000 3rd argument for charset is marccharset commit 20554c224bb8e4dfec150889ebd91c6494fb92ce Author: Adam Dickmeiss Date: Thu Dec 9 07:53:21 2004 +0000 Implemented commands negcharset and displaycharset that specifies character set for negotiation and display respectively. Command charset works as usual and is implemented using the two. commit 6d8cd9d9df0209d1103dd9d4d78fd2879dce1b58 Author: Adam Dickmeiss Date: Wed Dec 8 09:08:01 2004 +0000 Had to remove. We will enable after has been public available for one or two months. commit cfdf8897f78ff0fe95ade83ba62c1952a9979779 Author: Adam Dickmeiss Date: Wed Dec 8 09:06:06 2004 +0000 Include old yaz/log.h so that old things still work (for some time) commit 74d40e99d2ea24a62dd59ec39dd9c18a825a533d Author: Adam Dickmeiss Date: Thu Dec 2 19:12:52 2004 +0000 Fix double-free in code that handles encoding errors (from backend) commit aeba0c2ad379a8779cd3f97965d10ad2beaf0dae Author: Adam Dickmeiss Date: Thu Dec 2 14:04:17 2004 +0000 Return values in cmd_source_ functions commit 085ad99f5717a64563effb8d8f1b8b36ec1182f5 Author: ja7 Date: Thu Dec 2 13:55:35 2004 +0000 Fixed bug 227 and bug 228 commit 242dd9f346cdc5c8295d99c27868e139d2b3e4b0 Author: Heikki Levanto Date: Fri Nov 26 11:06:29 2004 +0000 Added a way to get around the old log warning commit 9c0401b44ce62a030b9968ccbf7a5b445b2ab506 Author: Adam Dickmeiss Date: Fri Nov 26 11:01:05 2004 +0000 yaz-log.7 man pages part of RedHat package yaz commit 05a79698b4956c63642ebd0b4deedf56098c255c Author: Adam Dickmeiss Date: Fri Nov 26 11:00:27 2004 +0000 yaz-log.7 man pages part of Debian package yaz commit 14f4eaaffa771604e1cbb54edc51d6f213a3e30c Author: Heikki Levanto Date: Fri Nov 26 10:58:38 2004 +0000 Reintroduced the bit "defines for those log bits that are deprecated and not defined in the new ylog.h commit f5234a7d67df11584a2f29b35d999a603ab9cc80 Author: Adam Dickmeiss Date: Thu Nov 25 09:43:10 2004 +0000 Treat field as having subfields even if first char is blank/other commit b6ed17b957403d2db0475df7759de72ce3eda2ee Author: Heikki Levanto Date: Tue Nov 23 14:11:03 2004 +0000 Added a man page for yaz-log (7) commit 27a9c86e28cd54204d12517a94b338b30805c747 Author: Heikki Levanto Date: Tue Nov 23 14:10:47 2004 +0000 Re-enabled the -v notime option, it was broken. commit 469ab1a5bc1014b93bedd8dc034dbbd779ab4a00 Author: Adam Dickmeiss Date: Mon Nov 22 10:54:23 2004 +0000 Fix new bug introduced by previous commit (../yaz* not used) commit 6a07d35e5125e4a07ffcc75cfbd63052790b4605 Author: Adam Dickmeiss Date: Sun Nov 21 21:56:28 2004 +0000 Update SRW/SRU diagnostic message definitions and store them in separate source: diagsrw.c. commit 783a6ef05f341c0bb27bac3e78def89df7fc37df Author: Adam Dickmeiss Date: Sun Nov 21 21:55:31 2004 +0000 About log system changes commit 08eb8faf0366e6e0814ecd80ddd0ce6392424a52 Author: Adam Dickmeiss Date: Sun Nov 21 21:55:15 2004 +0000 Update log chapter for new log system commit c3241bc91ec9cf0ff52f107df66d1ea2718752bf Author: Adam Dickmeiss Date: Fri Nov 19 18:31:05 2004 +0000 Fixed bug #212: make distcheck uses global yaz, not a local one commit b4a967015d26ad86b1b089c77df61d14f71ae231 Author: Heikki Levanto Date: Fri Nov 19 10:07:08 2004 +0000 Moved the #define of logf back into log.h, so that it won't be available innewer software using ylog.h. It conflicted with a math function commit 95dfab01523e56dd46cba0dde323c9dd24585a48 Author: Heikki Levanto Date: Fri Nov 19 09:59:31 2004 +0000 Fixed a CDECL thing that broke yaz++ commit 3b96525a40981e162b959f3e842e0ff20e314320 Author: Heikki Levanto Date: Thu Nov 18 15:18:10 2004 +0000 Deprecated log.h and created a new ylog.h Renamed all LOG_ #defines to matching YLOG_, and used them everywhere Used the new dynamic log system in deveral places commit a94620ffd6001681474a94f5de767f168d772d1c Author: Heikki Levanto Date: Wed Nov 17 13:03:07 2004 +0000 Added an option to specify -word in the loglevel parsing, to clear a specific bit: -v all,-log commit 30e703f75c26ad4b564e380d586d122edd49046d Author: Adam Dickmeiss Date: Wed Nov 17 00:18:54 2004 +0000 Modify wrbuf_put_zquery and wrbuf_scan_term so the generated PQF code is valid for reparsing. commit b2277d52bde3d48087e288d23f78067ec561a8ed Author: Adam Dickmeiss Date: Wed Nov 17 00:17:17 2004 +0000 For @prox operator, the "which" member being known or private was not set correctly. Use odr_intdup where appropriate. commit 713dfee4f059554f5450ef5f914a8bc4d8648af3 Author: Adam Dickmeiss Date: Tue Nov 16 22:51:52 2004 +0000 Avoid generating tsticonv.log commit e2652e701d723d6bf549ee361e140385748b7ce6 Author: Adam Dickmeiss Date: Tue Nov 16 22:44:31 2004 +0000 Clean up temp CQL test files commit a4916ca87f9921a945ef68479f33c2bfe6fa6897 Author: Adam Dickmeiss Date: Tue Nov 16 22:10:29 2004 +0000 Avoid new ANSI inline declaration commit 8233c05994729938fdfe9ac5865094a44be9fdfb Author: Adam Dickmeiss Date: Tue Nov 16 17:12:28 2004 +0000 Make sure test only write to build directory to make distcheck happier. commit e958092d7a7b66ff71cb05434b900d871e1f30fa Author: Heikki Levanto Date: Tue Nov 16 17:08:11 2004 +0000 Improvements in the log system, especially on the server side. Now logging on levels 'server', 'session', 'request', and 'requestdetail', and on 'request', making only one-line log entries for each request. Documented it too! commit 9a32992b1041bf622fdc4825262f5f7110494cce Author: Adam Dickmeiss Date: Wed Nov 10 09:26:43 2004 +0000 Bump version to 2.0.29 commit c23776e0c46dc3ae8bff5e4f4a2086a44fedbf07 Author: Adam Dickmeiss Date: Tue Nov 9 20:54:08 2004 +0000 Use strchr,strrchr instead of index/rindex. commit b01dc00d2cc67780bc5dde45de163ee6b61f844d Author: Adam Dickmeiss Date: Tue Nov 9 20:42:32 2004 +0000 Added marc these regressions test MARCXML records commit d684d84696ff6bb6ed8eb5593889d5968282718f Author: Adam Dickmeiss Date: Tue Nov 9 20:35:30 2004 +0000 Towards 2.0.28 commit e3eb1582ad4be427e5faf145d6a51fe0e29376f8 Author: Adam Dickmeiss Date: Tue Nov 9 20:33:48 2004 +0000 Announce 2.0.27 because of new functions in log.h commit 4a09e50d43c74f8a07f76f44575ed9c78dcab925 Author: Adam Dickmeiss Date: Tue Nov 9 20:31:13 2004 +0000 Describe the new log utilities commit 5d309bb5cfcf1fd46efb31c6d240aeb36fc915b5 Author: Heikki Levanto Date: Thu Nov 4 14:19:58 2004 +0000 Fixed a bug that caused extra [level] tags in the log commit 3dc194a876fec3eeb9623f7a14cabf7eb0b4a2dc Author: Adam Dickmeiss Date: Wed Nov 3 22:33:17 2004 +0000 Using blanks for assignments (no code changes) commit 36197e32322202a7518d821aa7306cf24de77c39 Author: Adam Dickmeiss Date: Wed Nov 3 22:30:52 2004 +0000 Added test program for logging. commit 7244158c402939245200a87f9f85562f6b06cba2 Author: Heikki Levanto Date: Wed Nov 3 17:52:53 2004 +0000 Fixed a silly typo that made a numeric -v crash commit 8d57c383d5f05e759cb31b33a5b78b3cea2033d6 Author: Heikki Levanto Date: Wed Nov 3 14:25:06 2004 +0000 Added dynamic log-levels: - yaz_log_mask_str (and _x) can now be called with a previously unknown name, which will get a new log bit assigned. This happens in most programs when parsing the -v command line option. - yaz_log_module_level can be called with a name, and if that name has got a bit defined, this bit will be returned, otherwise zero. This can then be used as the log_level in yaz_log and logf calls. - the names are cleaned from prefix paths and suffixes, so ./foo.c becomes foo. Also added a routine to set the maximum log size, and a few comments in log.h commit 6f5c63a8b759040d31028a4f1437a9cbc7a21fd6 Author: Heikki Levanto Date: Tue Nov 2 15:47:31 2004 +0000 protecting log rotation with a mutex commit 22f22577949124de2a1761bbbe195189d84018de Author: Adam Dickmeiss Date: Tue Nov 2 14:13:11 2004 +0000 Ignore .lib, .map, .exp commit 0e967e932ab262eb724f19922594359a4bb3336e Author: Heikki Levanto Date: Tue Nov 2 14:13:09 2004 +0000 Rotating logfile if exceeding a gigabyte (need to add a semaphore around it, for multithreaded things) commit e667f42aeb4ad7ef6c863ac9a8d888371a0ba90e Author: Heikki Levanto Date: Tue Nov 2 13:52:54 2004 +0000 Not buffering the log file, unless LOG_FLUSH is set. Reopening if necessary commit 05e1dd414a3bcf5601a620ecd7b85f530517bc64 Author: Heikki Levanto Date: Tue Nov 2 12:57:54 2004 +0000 oops, forgot to give a name to LOG_FLUSH. Now added commit 86ed958b7fd25d668f426da532a2a5c0a78bc9ef Author: Heikki Levanto Date: Tue Nov 2 12:55:04 2004 +0000 Added a new log flag LOG_FLUSH that forces flushing the log after every write. Yaz used to do this unconditionally, now it only does if LOG_FLUSH or LOG_DEBUG are set in the log level. Presumably speeds up stuff that writes many log entries... commit d7b75f236b92e98bff554317e123753d0549c3c3 Author: Heikki Levanto Date: Tue Nov 2 11:37:21 2004 +0000 yaz_log_time_format sets the format of the timestamp. See man 3 strftime Calling with "old" sets to the old format "11:55:06-02/11" Calling with NULL or "" sets to the new format "20041102-115719" If not called at all, the old format is used, for backward compatibility commit d4f295af18b4678342ac477c3cbc6705438a035b Author: Adam Dickmeiss Date: Mon Nov 1 21:19:08 2004 +0000 Use Sleep(mseconds) on Windows commit f5f6f769af0077f31d0fae81b9bbdeab18f10544 Author: Adam Dickmeiss Date: Mon Nov 1 20:59:23 2004 +0000 Towards 2.0.27 commit 16ba4ea8a26971aff40e56398d6d826fd6107889 Author: Adam Dickmeiss Date: Mon Nov 1 20:16:44 2004 +0000 Reformat a bit commit 87ca9b11fd146605fc3b54fcafbcad9869487295 Author: Adam Dickmeiss Date: Mon Nov 1 20:13:02 2004 +0000 Fixed bug #148: CQL parser may leak. CQL nodes now allocated using NMEM instead of xmalloc. For this reason, few prototypes were changed in include/yaz/cql.h. commit 49cab9854f19abbef3a618a41514872039c316a3 Author: Adam Dickmeiss Date: Sun Oct 31 19:23:22 2004 +0000 Bug fix: explainRequest decoder did not initialize some members when explain record was missing. commit bbc84cdd3100e834c38e20aebe200ea99dcf170c Author: Adam Dickmeiss Date: Wed Oct 27 08:18:55 2004 +0000 Return proper value for --comp (yaz-asncomp) commit 05c274ef315384faafcc5900c17468f0ea2474e6 Author: Adam Dickmeiss Date: Fri Oct 15 00:18:59 2004 +0000 Doxyfile file description. Indentation. No change of code. commit 0420d74c15267c4cb7903503b51937f836096b7a Author: ja7 Date: Tue Oct 12 13:23:46 2004 +0000 Added a sleep command .. commit 451c575ae8c09aea34037ae2e7169337b38e89d0 Author: Adam Dickmeiss Date: Sun Oct 10 22:44:34 2004 +0000 Fix setting of AM_CPPFLAGS commit 1e19310ec1746e0c27f4cb8135650c875f1e8dbd Author: Adam Dickmeiss Date: Sun Oct 10 22:21:01 2004 +0000 Testing Deb commit 75dee2a58a9764c56c61fe40303f34d93db3ce8e Author: Adam Dickmeiss Date: Sun Oct 10 22:17:55 2004 +0000 Remove make rpm rule that is never used anymore commit 942203900c897670ff5b764a1d128b190653e334 Author: Adam Dickmeiss Date: Sun Oct 10 22:17:29 2004 +0000 Abort if OpenSSL does not exist and --with-openssl is given commit e25948f52421d8d0a1914f77dd7627db1aca7bb7 Author: Adam Dickmeiss Date: Sun Oct 10 21:48:18 2004 +0000 Dont define HAVE_WCHAR_H since wchar_t is a 16-bit int rather than a 32-bit int. So wchar_t can't represent the whole UNICODE anyway. commit 2d2263d4725895b9bc52a91d3a2b1ceca85e2919 Author: Adam Dickmeiss Date: Sun Oct 10 21:43:21 2004 +0000 Use other type to avoid warning commit 00a44ce036714ab57696ef7ca415e69422745706 Author: Adam Dickmeiss Date: Sun Oct 10 21:12:25 2004 +0000 Update NEWS with most important changes commit b09f6cf9d1feacf68efcf92ccc57d1e635de414e Author: Adam Dickmeiss Date: Sat Oct 9 08:49:55 2004 +0000 Fixed bug #176: Dont throw diagnostics on empty SRU args. commit 7c5d526290c4d003ce685a8a988934c0b7e631cc Author: Adam Dickmeiss Date: Sat Oct 9 08:21:38 2004 +0000 Fixed bug #172: surrogate diagnostics in SRW lacking NS. commit be3968a60792190ba6a87b9c60513c1fa761f512 Author: Adam Dickmeiss Date: Sat Oct 9 08:03:26 2004 +0000 Fixed bug #172: RPM builds does not enable SSL. commit b54dc2e9cad5da1763387f64146662a331cdd127 Author: Adam Dickmeiss Date: Thu Oct 7 07:42:34 2004 +0000 Not in use commit f53079fadcadb1eeef45e1e6d254801d984d6068 Author: Adam Dickmeiss Date: Sun Oct 3 22:34:07 2004 +0000 Initial work for Doxygen based YAZ reference commit 740ed563d470a188a1cf09971de266e8a2a830ce Author: Adam Dickmeiss Date: Sat Oct 2 13:41:46 2004 +0000 Update documentation about CQL nodes commit 70fa293577cb6f8077293cd16ace73d9e3e45e08 Author: Adam Dickmeiss Date: Sat Oct 2 13:41:14 2004 +0000 Remove unused define CQL_NODE_MOD commit dd7de5f04a0de631f98ad9c4774f2111a85388e5 Author: Adam Dickmeiss Date: Sat Oct 2 13:28:26 2004 +0000 Added several type casts for C++ compile commit 905200e7c7288464a3951f6eeb4c9b420aa27997 Author: Adam Dickmeiss Date: Sat Oct 2 13:27:26 2004 +0000 Add --with-xml2 to RPM spec commit 09d7eedf90e167c0493270eded1d2b1f2d2a7221 Author: Adam Dickmeiss Date: Fri Oct 1 23:01:57 2004 +0000 Add --with-xml2 to configure commit 26f5b2f33c2302130ed2301084620f55a7df7af4 Author: Adam Dickmeiss Date: Fri Oct 1 23:01:26 2004 +0000 If --with-xml2, --enable-tcpd is given and they cannot be found, configure stops. commit 1d308bb4c51f70f7c58b1c4b0c7f5a28a4d80e56 Author: Adam Dickmeiss Date: Fri Oct 1 19:34:09 2004 +0000 Extend CCL chapter. Describe r=r commit 684820a9cddcbe5abd359d468a06c2cb0dc3efef Author: Adam Dickmeiss Date: Fri Oct 1 13:16:30 2004 +0000 No TESTS here commit 36823208064a499a7813301dd494bdeb88d230d7 Author: Adam Dickmeiss Date: Fri Oct 1 13:16:18 2004 +0000 Added ()s to avoid warning. commit 370c346822ae752b601cbddc6a5fbf01df08caff Author: Adam Dickmeiss Date: Fri Oct 1 13:05:09 2004 +0000 Towards 2.0.26 commit 537450adf56c59b3f26ac9320cc6dd12b3ffdbb5 Author: Adam Dickmeiss Date: Fri Oct 1 11:45:48 2004 +0000 Fixed MARC utilities to use proper conversion to XML CDATA for subfields, tags, etc. to ensure validity of generated MARCXML records and others. commit ed9a470b2dbe08cfe51079bdb3e7fbd720f857c8 Author: Adam Dickmeiss Date: Fri Oct 1 11:44:46 2004 +0000 Prevent XML CDATA with ASCII control chars (except TAB,CR,LF) commit 48e3b97da367521131aa740054e51f30f1d00225 Author: Adam Dickmeiss Date: Fri Oct 1 11:43:43 2004 +0000 Adding test for MARC->MARCXML conversions with 3 weird records commit 8a8f1d9c4e73cbf616fff1d40ff88e521e0d9c67 Author: Adam Dickmeiss Date: Thu Sep 30 21:54:22 2004 +0000 Server returns surrogate diagnostic 14: "System error in presenting records" when single record cannot be converted to XML. commit 370a23c50a2583a93b0faf2116bb11b43f359080 Author: Adam Dickmeiss Date: Thu Sep 30 21:51:59 2004 +0000 Convert Z39.50 surrogate diagnostics to SRW diagnostics. Return SRW diagnostic 61: "First record position out of range", properly. commit b2aa1ebda116fb5ddfaec50e97f19c6a9a7193f8 Author: Adam Dickmeiss Date: Thu Sep 30 18:40:27 2004 +0000 Rephrase commit c437556fbbc225557c621c28d5c3a70e03c345de Author: Adam Dickmeiss Date: Thu Sep 30 18:40:13 2004 +0000 Bug fix: YAZ GFS did not return schema in explainResponse. commit f4d4b4e02b36802f7932f87413f3783c39b52093 Author: Adam Dickmeiss Date: Thu Sep 30 11:23:25 2004 +0000 Towards 2.0.25 commit 83c4bd6ae175bfc59576f76c5508c0c12a8f253f Author: Adam Dickmeiss Date: Thu Sep 30 11:15:52 2004 +0000 Added typecast and removed bad assignment commit 04b2fff543057fc1f6df0b5fb0347466bf51660c Author: Adam Dickmeiss Date: Thu Sep 30 11:13:42 2004 +0000 The YAZ GFS when converting SRW/SRU requests to Z39.50 structures now converts recordSchema to elementSetName as well as schema URI. commit d4bf9f0fc12586d2c0c38b77b6d4c865158a62ba Author: Adam Dickmeiss Date: Thu Sep 30 11:06:41 2004 +0000 Create NMEM automatically for odr_{str,int}dup. commit 1344321cfcf923b9b2bbffe31e81d6870587f5ef Author: Adam Dickmeiss Date: Thu Sep 30 10:00:17 2004 +0000 Fix serious bug regarding HTTP requests (introduced in YAZ 2.0.24) commit 9510c6c592b84da4a6b2616a61f0cebfce5a1c87 Author: Adam Dickmeiss Date: Wed Sep 29 21:08:22 2004 +0000 We added new functions so require 2.0.24 if YAZ is used. commit 1b8b5cb2b718a805d40ce904c270ea5fbf5b1e7c Author: Adam Dickmeiss Date: Wed Sep 29 20:44:44 2004 +0000 Towards YAZ 2.0.24 commit e4baade57ba02d625ecd6452b0f4383b24c25f2d Author: Adam Dickmeiss Date: Wed Sep 29 20:37:50 2004 +0000 Added CCL facility r=r "range" which is similar to r=o "ordered" but does not require white-space before and after the dash, e.g. x=-1990 is equivalent to x <= 1990 iff r=r, but equivalent to x= -1980 iff r=o. Added CCL tests for ranges. Fixed memory leak in CCL parser that occurred when proximity was used. commit 7bfa924f0f58b494c4aba33320183374ffd594cd Author: Adam Dickmeiss Date: Wed Sep 29 20:15:42 2004 +0000 Added include stdlib.h commit 29b883c70ce2c68da5be667fe52f86551c1de45b Author: Adam Dickmeiss Date: Wed Sep 29 20:14:56 2004 +0000 Remove unused variables commit 245a9ee60bf478011acf24aaa235a4ca7c575bf8 Author: Adam Dickmeiss Date: Wed Sep 22 19:22:24 2004 +0000 Rephrase info about option -m commit 4fa314498f1528ed66674ada044076a2ba75e815 Author: Adam Dickmeiss Date: Wed Sep 22 19:22:08 2004 +0000 Document scanpos and scanstep commit 5e0f6514b51d60187037b62f464adfd2723c1693 Author: Adam Dickmeiss Date: Wed Sep 22 19:12:53 2004 +0000 Notes about changes commit e09c0d10d5ccdde669713f9b1db52a3e85250115 Author: Adam Dickmeiss Date: Wed Sep 22 14:50:04 2004 +0000 Do not declare static function f in AC_TRY_LINK test. It is not necessary but more importanly the function f gets optimized away which resulted in error(s) in test result. commit c1c19e1c040869f7c767d4e52acc096b3cd45f83 Author: Adam Dickmeiss Date: Wed Sep 22 13:58:10 2004 +0000 Debian yaz-2.0.23-3 commit a1d70786445f8cb27761b776fa67b08a80e0d8a4 Author: Adam Dickmeiss Date: Wed Sep 22 13:21:37 2004 +0000 Added commands scanpos and scanstep that sets preferred position and scan step respectively. Renamed cmd stepsize to scanstep. commit efcfc53528435f8d6fb3a7d41a22a64e9731a690 Author: Adam Dickmeiss Date: Wed Sep 22 13:08:31 2004 +0000 Add command stepsize that sets stepSize for Scan (default 0) commit ce02a7514071a45dea4423dcb8e12b22d89bb1f5 Author: Adam Dickmeiss Date: Wed Sep 22 12:17:24 2004 +0000 Add prototype for ccl_qual_buf. commit 590aa50e623466e84242cb03b8704102def784ca Author: Adam Dickmeiss Date: Wed Sep 22 11:22:10 2004 +0000 Windows 2.0.23-6 commit 1b7116b57dee317a8ccc2d53401b629fabd8b9d8 Author: Adam Dickmeiss Date: Wed Sep 22 11:21:51 2004 +0000 Added CCL utility ccl_qual_buf which parses one or more CCL spec lines in a buffer. commit 6f64c3aec8f77d8378f8d06742041828ae7b75ba Author: Adam Dickmeiss Date: Wed Sep 22 09:30:42 2004 +0000 Prepare for new Debian commit 779f1d959e8b91db0e259648e6d5597bc2e06736 Author: Adam Dickmeiss Date: Tue Sep 21 16:28:17 2004 +0000 Fix saving of SRW query for show. Bug introduced by previous commit so no official YAZ release was affected. commit b7f03b57557b9da147ff84f172dac4f8eb8850d8 Author: Adam Dickmeiss Date: Tue Sep 21 14:59:01 2004 +0000 Fix problem with decoding of HTTP responses with no Content Length specified. commit 15a37a1983020a7266366cbfddda427c880d4f01 Author: Adam Dickmeiss Date: Fri Sep 17 08:44:23 2004 +0000 Remove Id from header due to inconvenient diffs when yaz.m4 is copied commit 0788928649e97f42c99cd5c1e8c0e3c0eb600555 Author: Adam Dickmeiss Date: Thu Sep 16 17:59:52 2004 +0000 Rephrased comment in NEWS commit 454369fd9e16211e97c8decd7be3c4e9729df6bf Author: Adam Dickmeiss Date: Mon Sep 13 09:24:42 2004 +0000 If queryType is prefix, yaz-client sends PQF to SRW server. commit 326efc2de5c707a312a3b0a0dc809245250e7f55 Author: Adam Dickmeiss Date: Mon Sep 13 09:23:33 2004 +0000 Log CCL and Z39.58 queries commit a87770ed51d988ce5a0b2f5f886dd4211c4055d6 Author: Adam Dickmeiss Date: Sat Sep 11 20:52:14 2004 +0000 option --with-yazconfig renamed to --with-yaz commit f1c754c5a459f86a455795a494ce98f0cdc0599b Author: Adam Dickmeiss Date: Fri Sep 10 11:28:58 2004 +0000 For SRW, do not set numberOfRecords when diagnostic is returned commit 85dc21cfee478bc99c95dce7e2d3d9ddc46cc755 Author: Adam Dickmeiss Date: Thu Sep 9 09:54:37 2004 +0000 DTD_DIR assignment commit 56afd8ef095a52912d1c74f3ee49f91e07d0cf77 Author: Adam Dickmeiss Date: Thu Sep 9 09:53:08 2004 +0000 Align text in configure --help commit 8153b48e80244618f32e3db56d88ed3e267ef409 Author: Adam Dickmeiss Date: Thu Sep 9 09:51:16 2004 +0000 Describe with-yazconfig change commit e148d5a5d75380bf3ee88e93d30e5aa756b931d3 Author: Adam Dickmeiss Date: Thu Sep 9 09:40:04 2004 +0000 Rename Docbook related --with options to --with-docbook-{dtd,dsssl,xsl}. Rename --with-yazconfig to --with-yaz-config. commit 0ef85492914ba31cc19d4ca65682c4d61fd69145 Author: Adam Dickmeiss Date: Fri Sep 3 18:55:59 2004 +0000 Manually test for OCLC UI OID and print commit 89791feaa7fab60e510bb893361a594553ebff0a Author: Adam Dickmeiss Date: Fri Sep 3 18:55:19 2004 +0000 Do not decode OCLC UI by default. commit 388a09802a50b37d3b3679949ac91b13594d3260 Author: Adam Dickmeiss Date: Tue Aug 24 08:44:10 2004 +0000 Clear ODR error in odr_setbuf commit a39fada8894d54eecd6a82f31d0b5fd672c5aef2 Author: Adam Dickmeiss Date: Thu Aug 19 07:47:59 2004 +0000 yazd.{dll,lib} instead of yazdebug.{dll,lib}. commit bc9313eae3f0735bf3382d994af1cfd558cd6991 Author: Adam Dickmeiss Date: Thu Aug 19 07:42:20 2004 +0000 Distribute msvcr71.dll with dist. Do not distribute yaz debug DLLs. commit c9520f65b13d4b0fef62b156aabd75838082dd70 Author: Adam Dickmeiss Date: Thu Aug 19 07:36:55 2004 +0000 Rephrase comment about windows DLL/lib commit 2e23fabe25973c7614b83ca1151b6c7be7df9024 Author: Adam Dickmeiss Date: Wed Aug 18 10:47:48 2004 +0000 Make sure dll,client,ztest rules depend on dirs,generate commit c0ed3a7cdb7fd412791154eab2fcd26a4bdd63a7 Author: Adam Dickmeiss Date: Wed Aug 18 10:05:20 2004 +0000 Bump minor win version commit 5655212777a8fe68bf5cc1e563287c0f075a0ae5 Author: Adam Dickmeiss Date: Wed Aug 18 10:03:01 2004 +0000 Added CCL utility ccl_qual_line which adds CCL qualifier line consisting of name and value - ignoring empty lines and comments. commit 7829806edcad05b4ecbe764eaba75ed639132f0a Author: Adam Dickmeiss Date: Wed Aug 18 10:01:07 2004 +0000 Adding to interface so update shlib depds commit 8f2c3e6f52ae02c7da85292088d03cc7d894bd4d Author: Adam Dickmeiss Date: Wed Aug 18 09:43:10 2004 +0000 Do not build debug mode exe files for dist (nsis rule) commit 103dfdda7d65dc866dfb07cb4f16b2fbc9bc2cf0 Author: Adam Dickmeiss Date: Wed Aug 18 09:08:58 2004 +0000 Document the changes WRT WIN32 debug DLL/lib. commit 248e1ad70322ee05a64c8c505490affb05c84b5e Author: Adam Dickmeiss Date: Wed Aug 18 09:01:13 2004 +0000 Use yazdebug.{dll,lib} for debug version of YAZ to allow both debug/release version of YAZ to be in use. Debug libraries are now part of WIn32 install. commit e494610db1c879925ce6d9e1c4efcf86904f243c Author: Adam Dickmeiss Date: Fri Aug 13 12:59:50 2004 +0000 YAZ 2.0.23-3 commit 58fea445ccce30dc82ffe09bc32bf41b4541937b Author: Adam Dickmeiss Date: Fri Aug 13 12:54:37 2004 +0000 Rephrase commit 2b17f66a25f1e9cf6e6a072736ea4459eefcc2b8 Author: Adam Dickmeiss Date: Fri Aug 13 11:36:48 2004 +0000 Cast to unsigned char to prevent assert in MS. Studio .NET commit c9408db23d24baece38e05035864f933ea5ea071 Author: Adam Dickmeiss Date: Fri Aug 13 11:35:37 2004 +0000 Cast to unsigned char to prevent assert in MS Studio .NET. commit 2b2afeeaa041c39c6fcafb225feba8b9e1dad010 Author: Adam Dickmeiss Date: Fri Aug 13 08:59:07 2004 +0000 Remove unused variable commit 0016aef97122936cb847026f5a70e03dd0542ab9 Author: Adam Dickmeiss Date: Fri Aug 13 08:58:59 2004 +0000 Move declaration to start of block commit 6ee1cba1206017fafc79b5ed58ff573d4e4d4681 Author: Adam Dickmeiss Date: Fri Aug 13 08:40:19 2004 +0000 Make clean removes .pdf too commit 3cef72d7093afaa8b106e4160ef0885b2ac50335 Author: Adam Dickmeiss Date: Fri Aug 13 07:30:05 2004 +0000 Reworked odr_set_stream a bit, so that write handler now takes a buffer and a length + ODR handle. Also implement odr_get_element_path that returns current path of elements. commit 5d82112ae34413cae5553fc3e3e2c55ce45fc145 Author: Adam Dickmeiss Date: Fri Aug 13 07:26:28 2004 +0000 Added Larry E. Dixson commit 5c3254b421ce3cc5f3d8c4f294a48f233a6cf3f7 Author: Adam Dickmeiss Date: Wed Aug 11 20:13:36 2004 +0000 Fixed bug in CCL parser where truncation char was not removed when truncation=both was in effect. commit f34de3e6a08dfb7e5440264730b75ba713e55789 Author: Adam Dickmeiss Date: Wed Aug 11 12:47:35 2004 +0000 Document odr_setpring and odr_set_stream. commit d094a0772f5a1d6d8bb6c390018f488307ae8410 Author: Adam Dickmeiss Date: Wed Aug 11 12:16:56 2004 +0000 Mention CQL char bug fix. commit 0a7d4354288c747883261e9f430a7e0069225a5b Author: Adam Dickmeiss Date: Wed Aug 11 12:15:38 2004 +0000 Added odr_set_stream which is is a more generic to odr_setprint. odr_set_stream takes a stream handle, pointer to puts function and pointer to close function. The close function - if non-NULL - will be called during odr_destroy. commit 93027bf060203898f33d1425585303945e58acbd Author: Adam Dickmeiss Date: Wed Aug 11 12:01:22 2004 +0000 Add check for proximity commit 6085aae155dd3bf339d82a7846cfd3903b9cfe92 Author: Adam Dickmeiss Date: Wed Aug 11 11:46:54 2004 +0000 Make 2.0.23-2 for Windows with fixes for MS. NET commit 8fa3d0c0967fd6db5c7a2b2ffc504cb48407a586 Author: Adam Dickmeiss Date: Wed Aug 11 11:44:30 2004 +0000 Use unsigned char pointers to prevent assert for 8-bit on MS .NET commit 9977ff5ba57bf5646f06d94dad206d0596fe7e38 Author: Adam Dickmeiss Date: Wed Aug 11 09:05:56 2004 +0000 Towards 2.0.23 commit 6e8a8f144dfc8225d07a56d6a7f18056cb18ee22 Author: Adam Dickmeiss Date: Wed Aug 11 09:02:48 2004 +0000 Fix buffer overrun in CCL parser for proximity commit b6d34be5a1131d2bb7ff367b7d5e498599f791a8 Author: Adam Dickmeiss Date: Sat Aug 7 08:18:19 2004 +0000 Fixes for MARC-8 in yaz_iconv character set utilies. The MARC-8 to UTF-8/UCS conversion is now only based on codetables.xml. Thanks to Larry Dixson for reporting this error. commit 95f9f397e64bd7a933482008f7afe647e56648a2 Author: Adam Dickmeiss Date: Sat Aug 7 08:06:57 2004 +0000 For MARCXML, set leader pos 9 to a to signal unicode commit b55ea70d15d3ffaa247cc30db0e6b8dcc4d6ac7c Author: Adam Dickmeiss Date: Fri Aug 6 08:31:02 2004 +0000 Towards 2.0.22 commit ac7fba8675ca9a61f93128a0b3c1683f7cce274d Author: Adam Dickmeiss Date: Wed Aug 4 09:30:30 2004 +0000 Remove unused code. commit 34a5c44eeae489d41e05323a4738bcd069eb0a1d Author: Adam Dickmeiss Date: Mon Aug 2 10:13:27 2004 +0000 Add support for more "commit changes" in ZOOM (uses Extended Services). commit 012ebe86693784419f1ab4c62a727d8c3a7aabf0 Author: Adam Dickmeiss Date: Mon Aug 2 10:06:34 2004 +0000 Add ES package of type commit commit 74b2585ecf03192ddc7cf9796634b9cde008ec8b Author: Adam Dickmeiss Date: Fri Jul 30 08:37:52 2004 +0000 For yaz-client, command set_marcdump and -m dumps SUTRS/XML/.. records as well. commit 719e0dcf2d15c08086a06457701e21c6aff3d791 Author: Mike Taylor Date: Mon Jul 26 12:16:56 2004 +0000 Fix typo. commit 2097571f3770669012ec51e2973f4740a201f62f Author: Adam Dickmeiss Date: Tue Jun 15 10:53:26 2004 +0000 Avoid using size_t for length modifier in printf format commit f4c4fc8248cfd5ceb834003b237359343aca9b38 Author: Adam Dickmeiss Date: Tue Jun 15 09:58:13 2004 +0000 Use db_printf instead of dprintf which is a public symbol in many systems commit a4c13e5a8035fed703ebcd1580e9dcfdd9929722 Author: Adam Dickmeiss Date: Tue Jun 15 09:33:12 2004 +0000 Specify that default is 15 minutes in timeout for GFS commit 78dcafef3ed6903e922e2cdd6479392d78a6b3a2 Author: Adam Dickmeiss Date: Sun Jun 6 20:56:56 2004 +0000 libyaz-dev depends on libssl-dev commit 6e8e985ed2ed85ebad7ee26a86dabcafebc18573 Author: ja7 Date: Thu May 27 21:24:44 2004 +0000 added new command for testing cancel cmd_cancel_find which makes a find command and then cancel's it. extended the buffer when processing input files commit 1e9120dcb40344edefe683feac5eb303c04d9dfa Author: Adam Dickmeiss Date: Wed May 26 11:14:29 2004 +0000 Yet another small fix for configure of SSL. commit 33bfb14559d5991bf34f99be507a89ffefe41632 Author: Adam Dickmeiss Date: Tue May 25 14:06:15 2004 +0000 Do not throw error if truncation.none is not given commit 6a50a0cb60cf23154bc37675a87225cfaf5f669c Author: Adam Dickmeiss Date: Fri May 21 12:27:38 2004 +0000 Swap definition order for YAZ_DOC and YAZ_INIT commit d57c9b0a346d64f0ed2a1003d90365794564e0b6 Author: oleg Date: Wed May 19 05:32:47 2004 +0000 Fixed use of dprintf(). The define of dprintf() is a part in some linux based OS. commit 422c5109f981fefdd87bd3f95c41cc799a645ffc Author: oleg Date: Wed May 19 05:28:06 2004 +0000 Added check of dprintf(). commit 8797798afa88b715781dcbd55fae8a2fabeb5c79 Author: Adam Dickmeiss Date: Fri May 14 08:19:15 2004 +0000 Towards 2.0.21 commit dfaf449760014172f167c413437cd57e2eb5c854 Author: Adam Dickmeiss Date: Thu May 13 13:11:24 2004 +0000 Fix SSL libs for configure when --with-openssl=DIR is given. commit bbd68e685f0eaab7bae461e04903a71a380605ca Author: Adam Dickmeiss Date: Thu May 13 10:07:14 2004 +0000 Fix SSL -L -lssl order commit 11e1b74da53b7403f5faf0f1771fefeb962e92dd Author: Adam Dickmeiss Date: Mon May 10 18:42:16 2004 +0000 Bump year commit bdbea3605bd2d48e76a671069156412aca1bd79f Author: Adam Dickmeiss Date: Mon May 10 12:32:01 2004 +0000 Upgrade to NSIS 2 commit 31f8cc74d05ca68c2fb011c2f7aa3087808826c7 Author: Adam Dickmeiss Date: Mon May 10 11:56:33 2004 +0000 Use libxml 2.6.9 commit 7d8ce865edf7af1329b506590717fc846c9becb6 Author: Adam Dickmeiss Date: Mon May 10 11:40:51 2004 +0000 Declare cs_set_ssl_certificate_file in non-ssl mode too commit 43b2549e1810961f9b00ac36b388336f29744b6b Author: Adam Dickmeiss Date: Mon May 10 11:27:54 2004 +0000 Updated Debian version dependency to 2.0.20. commit 589d16db6e07b56a5cb15b8f1e303a858734771b Author: Adam Dickmeiss Date: Mon May 10 11:24:59 2004 +0000 Towards 2.0.20 commit 16a3072e6e8e215fbcc4b46e03ad8f32715a0afe Author: Adam Dickmeiss Date: Mon May 10 11:21:18 2004 +0000 Build new Debian package commit f32747a49af98569b58b97461a2f86813f4764bc Author: Adam Dickmeiss Date: Mon May 10 10:47:04 2004 +0000 Rename cs_set_ssl_certf to cs_set_ssl_certificate_file commit 876a13d858b70e6f2c34eaefad90d0577f5f1583 Author: Adam Dickmeiss Date: Mon May 10 10:46:26 2004 +0000 Describe new SSL comstack functions commit 1c695d2fbcb0692e978237aef6cf2426678c9fdd Author: Adam Dickmeiss Date: Mon May 10 10:45:28 2004 +0000 Do not use obsolete YAZ defines commit 1a36f8a099705318313a2942f55ca081a625bdf6 Author: Adam Dickmeiss Date: Mon May 10 07:52:07 2004 +0000 Keep old defines for now. Reverts last commit commit 725fc033b729b22a1e0cfba614192b6fbfaeda4f Author: Adam Dickmeiss Date: Mon May 10 07:48:56 2004 +0000 Do not mention windows.txt anymore. Point to HTML doc commit e12cd77c1050b5722c19f9e6d312c99e14565efe Author: Adam Dickmeiss Date: Mon May 3 09:00:50 2004 +0000 Added a few casts commit f7acb94a8f4ddda59fa695163785a6756e92c21b Author: Adam Dickmeiss Date: Mon May 3 09:00:29 2004 +0000 Use better OID utilities. Simplify commit 2f1ad68193fa6825fc561a09684585280bd67895 Author: Adam Dickmeiss Date: Sun May 2 00:07:34 2004 +0000 Better check for SSL on non pkg-config systems commit 480c3cf04004acef3a792d1914382b38b0f79bfa Author: Adam Dickmeiss Date: Sun May 2 00:07:11 2004 +0000 Make sample SSL certificate part of dist commit 7a60e6ae656c6bc2825b6244c88bbd59106f3da9 Author: Adam Dickmeiss Date: Sat May 1 23:45:43 2004 +0000 Clarify stuff about libxml2 commit e23eae6ada71a70849bcdab7ee179579aad248e1 Author: Adam Dickmeiss Date: Sat May 1 23:32:20 2004 +0000 Get rid of SSL_{CFLAGS,DEFS,LIBS} commit 5cbf8c25b69296ba93015e6c7669f5298aefa7d8 Author: Adam Dickmeiss Date: Sat May 1 23:19:49 2004 +0000 Link with libxml2 2.6.9 commit cc6dad5cffd577eed9d001a82f08a552c2740525 Author: Adam Dickmeiss Date: Fri Apr 30 19:34:05 2004 +0000 dd autoconf m4 macro YAZ_DOC for YAZ documentation setup (docbook). commit 7bb5e2926727e963de8411dbba9cc18df967bfbb Author: Adam Dickmeiss Date: Fri Apr 30 19:10:35 2004 +0000 SSL comstack now uses yaz.pem certificate file on server side by default. Certificate filename can be configured by calling comstack function cs_set_ssl_cert before cs_bind is used. commit 89995b1f8d06d97dacbbce5fcc4fa0c059c0e1bd Author: Adam Dickmeiss Date: Fri Apr 30 12:43:32 2004 +0000 Handle duplicate connect commit 1ed99bdb19b146122c028871f5b707baceab336a Author: Adam Dickmeiss Date: Thu Apr 29 21:27:22 2004 +0000 Dont print system error when comstack cannot be created commit 69758252fce6231073cb288a4f5bbf8f7febc249 Author: Adam Dickmeiss Date: Thu Apr 29 21:19:23 2004 +0000 Implement cs_set_ssl_ctx which sets SSL_CTX for SSL comstack. Do not create SSL_CTX in cs_create (ssl_type). Create in tcpip_bind, tcpip_rcvconnect instead. This allows user to set custom SSL_CTX. commit c58035e31f65574542f72955007b1935c3669186 Author: Adam Dickmeiss Date: Thu Apr 29 21:15:14 2004 +0000 Get rid of GCC warnings commit 80f8ae2b0879fb9bcc811fbbcb3a72bc8064ae7a Author: Adam Dickmeiss Date: Thu Apr 29 08:55:17 2004 +0000 Relax http/https URL check a bit commit f5c26a76213127c130098547cbd361a4db11dd7e Author: Adam Dickmeiss Date: Thu Apr 29 08:54:56 2004 +0000 Get rid of SSL check code commit e72e394106dd25d6a8a8c7c2fa677f40ef5e7eb6 Author: Adam Dickmeiss Date: Wed Apr 28 22:44:58 2004 +0000 ZOOM now allows inspection of X509 peer certificate for verification. The X509 buffer is retrived by reading ZOOM option "sslPeerCert". Removed libyazssl.la. When SSL is enabled, libyaz.la has SSL support and all programs have too (yaz-ztest, yaz-client, zoom..). May not be as "modular" but it simplifies things. Added cs_get_peer_certificate to that returns peer X509 PEM. commit a159d35487ce391123e8e82274fd2ee95055c3a6 Author: Adam Dickmeiss Date: Wed Apr 28 13:25:57 2004 +0000 More SSL details for yaz-client commit 8dc67a9430644549801c18ec7e3a725e5a4ef782 Author: Adam Dickmeiss Date: Wed Apr 28 12:10:51 2004 +0000 Added cs_get_SSL. yaz-client-ssl prints peer info commit 552daed9f1e10b6979346194fe4ce781298b4b0d Author: Adam Dickmeiss Date: Mon Apr 26 21:23:24 2004 +0000 Update ASN.1 for UserInfoFormat-multipleSearchTerms-2. commit 1b59302c8003251955f2850039f463dd63c6dff3 Author: Adam Dickmeiss Date: Thu Apr 22 18:44:40 2004 +0000 Check for HTMLFILES commit 3ecb9c4867ae1915c01031611697da4fb2c15921 Author: Adam Dickmeiss Date: Thu Apr 22 18:25:41 2004 +0000 Revert commit e77fbf07b0a8d31165e643565d18e9ac71c322d6 Author: Adam Dickmeiss Date: Thu Apr 22 18:24:59 2004 +0000 Mention new docs on MARC commit ee254a91ecc9e3e03f85d6cc3a365eea3be8dd28 Author: Adam Dickmeiss Date: Thu Apr 22 13:12:49 2004 +0000 Document MARC API commit c39d5674598a4da3e194baae1927a648bd444638 Author: Adam Dickmeiss Date: Sat Apr 17 08:24:03 2004 +0000 Fix --disable-tcpd to really disable tcpd. Patch by Robin H. Johnson. commit 50a87fb7c533ee1a5f543c699e92c3480772ec86 Author: Mike Taylor Date: Fri Apr 16 12:34:08 2004 +0000 Ignore generated test programs. commit 8b607c83e5dcbca433f2c0f8354dcfaddfea2887 Author: Adam Dickmeiss Date: Wed Apr 14 12:58:27 2004 +0000 Fix code for ODR_DEBUG. Thanks to Ian Ibbotson commit e64c126967a22812f544317b1ca77fbba1f7c5b5 Author: Adam Dickmeiss Date: Sun Apr 11 15:02:00 2004 +0000 Make buildconf.sh part of dist commit a6866a0c08c5b0b853d2385ec2f28a0832cc3241 Author: Adam Dickmeiss Date: Wed Apr 7 13:51:50 2004 +0000 Check class for display of XML/HTML commit c365079c73de2cc75ca3630098c448f788a9007c Author: Adam Dickmeiss Date: Wed Apr 7 13:47:59 2004 +0000 Display records even if OID is unknown commit b067fd8539eb2348bf9f3928ff62006fb6021d7c Author: Adam Dickmeiss Date: Tue Apr 6 17:47:24 2004 +0000 Fixed charset spec parsing for ZOOM_record_get commit fa3ba5394671fe058f82eda2b888ae112bfc8fdf Author: Adam Dickmeiss Date: Tue Mar 30 14:15:56 2004 +0000 Fix RedHat package due to rename of CHANGELOG to NEWS commit f4adf254279a4fd165a18a77c8d4ee48a71eb24a Author: Adam Dickmeiss Date: Mon Mar 29 20:13:07 2004 +0000 Towards 2.0.19 commit 08516fefc3253bf9e414fecb48f475fa26b8869a Author: Adam Dickmeiss Date: Mon Mar 29 20:11:13 2004 +0000 Rename CHANGELOG to NEWS commit bf6876570c2eeade25f5ed23052d0e94244d568c Author: Adam Dickmeiss Date: Mon Mar 29 15:09:13 2004 +0000 Fix bug with missing initialization of member in init_diagnostics. This bug affects threaded version of GFS server. commit 8746c08e36ba07edc839f1396c17a27ea2915dc0 Author: Adam Dickmeiss Date: Wed Mar 24 10:14:24 2004 +0000 Spell fix commit 2750b61cf8ee6cf2632fbd57e6764559ae6e56cc Author: Adam Dickmeiss Date: Sat Mar 20 12:54:18 2004 +0000 Rephrase note commit dd472005b2c12e54a0436d22e56970f48bc32704 Author: Adam Dickmeiss Date: Sat Mar 20 07:16:25 2004 +0000 Use "" instead of 0 for last field 'from'. And test for end of list by checking 'to' instead of 'from'. commit 3261e100ea2fed86d45a15930af074098f072c26 Author: Adam Dickmeiss Date: Sat Mar 20 07:02:22 2004 +0000 Use wrbuf_xmlputs_n instead of wrbuf_write_cdata to avoid clash with Zebra symbol. Towards 2.0.18. commit 18a2b4f1c3da6d4206d8ee248a55c7526f4c96aa Author: Adam Dickmeiss Date: Fri Mar 19 21:13:02 2004 +0000 Build 2 commit 4cc34f9a4eec65d0eb629d070150dd55c5977522 Author: Adam Dickmeiss Date: Fri Mar 19 21:12:13 2004 +0000 Fix a few links. Mention zlib. commit 373fe4a394d22622621d6add4fac3217488b142c Author: Adam Dickmeiss Date: Fri Mar 19 20:57:44 2004 +0000 Make zlib.dll part of YAZ if libxml2 is enabled commit c2e6bfb2dcdaa71a6532ec3d1d429f9586d78b11 Author: Adam Dickmeiss Date: Wed Mar 17 20:00:11 2004 +0000 Fix date in top commit 770b443f619cd78a313b5cde3b10b4a34bfce728 Author: Adam Dickmeiss Date: Wed Mar 17 19:07:09 2004 +0000 Use libxml2-2.6.7 and iconv-1.9.1 commit 75ada5241cd3a0adf2a5623c7a392dd657e2c15b Author: Adam Dickmeiss Date: Wed Mar 17 18:47:41 2004 +0000 Towards 2.0.17 commit 6d50f66faab9c47d834c5433ae776ec6fc7df994 Author: Adam Dickmeiss Date: Wed Mar 17 18:43:35 2004 +0000 Fix encoding of xsd:string to use text instead of CDATA commit 4c7863aac66ff92802fcd5476f8b7ae1feb8ebdf Author: Adam Dickmeiss Date: Wed Mar 17 18:31:11 2004 +0000 Fix endless loop in CQL parser with unbalanced commit d30e034fc508f9d901f0fa60113eb160e2d7406f Author: Adam Dickmeiss Date: Wed Mar 17 11:00:04 2004 +0000 Use more compact way to store MARC-8 conversion tables commit a1d6c3e37313363550600ebcf45ec41ff9f1410b Author: Adam Dickmeiss Date: Wed Mar 17 10:59:41 2004 +0000 Indentation commit be9a7af42fad4d69ab2d4077f193c695407fa685 Author: Adam Dickmeiss Date: Tue Mar 16 23:07:04 2004 +0000 Depend on charconv.tcl commit 15b8df11c04098a83b1d7e545ee07ad4589e484f Author: Adam Dickmeiss Date: Tue Mar 16 13:29:43 2004 +0000 Towards 2.0.16 commit fa1dff894130765cb4a8fed41c42fc7125702c9c Author: Adam Dickmeiss Date: Tue Mar 16 13:22:16 2004 +0000 Get rid of a few warnings commit 80b89a67e69a53fb3dc7b58c5abc9bf99af93139 Author: Adam Dickmeiss Date: Tue Mar 16 13:15:58 2004 +0000 Remove unused var commit e3678b79cc201f61c67f46f558cfdbcb4a999ba3 Author: Adam Dickmeiss Date: Tue Mar 16 13:13:34 2004 +0000 Get rid of table commit f72e3ad49303bc42c4ea9343ae59f0dbed4b0694 Author: Adam Dickmeiss Date: Tue Mar 16 13:12:42 2004 +0000 All MARC-8 codetables, but G1 uncertain commit ee0442c5c2a8ea8dbac911edd15961997f457106 Author: Adam Dickmeiss Date: Mon Mar 15 23:14:59 2004 +0000 Allow length 100 for cjk conversion commit 47acd69a8a66bd220b56900cc2bc495aaa284ffa Author: Adam Dickmeiss Date: Mon Mar 15 23:14:40 2004 +0000 Use unsigned short rather than int for char conversion trie commit 9ee70f4c22c4990e7fe62a5238caa6b4e71f6a0f Author: Adam Dickmeiss Date: Mon Mar 15 22:51:10 2004 +0000 Skip multiple of ($, in MARC-8 ESC sequence commit 00106dc85fcaa3b02f9a0d471ea90a594bf3a175 Author: Adam Dickmeiss Date: Mon Mar 15 21:39:06 2004 +0000 Extend MARC-8 to handle ESC-G0 EACC. Fix conversion order for MARCXML output. Let CQL parser resolve prefixes to identifiers. Updates tests. commit b1133253fc7a5ebb20ae41cac2a38c061d6facc0 Author: Adam Dickmeiss Date: Thu Mar 11 20:40:02 2004 +0000 Mention Olegs fix commit af30aafd05572139098f984ddf13ba12072afa47 Author: oleg Date: Thu Mar 11 10:09:11 2004 +0000 Fixed error with UTF8 <-> UCS4, UCS4LE encoding (reverse direction for bit operation). For Latin-1 charcters the patch has not value, only for characters, which has code greater then xFF in UTF8. commit 08c3a57c9782652a28ca9a2a9966e3f75e943415 Author: Adam Dickmeiss Date: Thu Mar 11 09:34:42 2004 +0000 Update cql2xcql, cql2pqf to use options (same style) commit 50c8d7b43fda660f9d331135ba87b16da584a273 Author: Adam Dickmeiss Date: Wed Mar 10 21:09:01 2004 +0000 Add shelvingData too for OPAC XML commit d6efff2900cb1a9d4da10999d258ed0a4ceaf565 Author: Adam Dickmeiss Date: Wed Mar 10 19:42:45 2004 +0000 Show OPAC shelvingData commit 06151390083d3f8875bf7ed4b113942f6cccf9f4 Author: Adam Dickmeiss Date: Wed Mar 10 18:50:56 2004 +0000 Mention origin commit 6eef3434bf7d353f060f8a10d3dad6fad38e1edc Author: Adam Dickmeiss Date: Wed Mar 10 17:29:18 2004 +0000 Make cql test work if srcdir != . commit 76a636f169d66bea401275a41e8149b12584fa22 Author: Adam Dickmeiss Date: Wed Mar 10 17:18:08 2004 +0000 Add yaz-config to DISTCLEANFILES commit 42f18e58ed67f77727cde23bcee44dbd32ed242a Author: Adam Dickmeiss Date: Wed Mar 10 16:34:29 2004 +0000 Update CQL parser to use CQL 1.1 modifiers for booleans and relations. Add CQL regression cases. commit a4c9e87155ec7e343559946290ed8262cf5acf81 Author: Adam Dickmeiss Date: Tue Mar 9 20:49:04 2004 +0000 Remove fprintf about bad null commit 94d2f62cf9d0185e933e238ae36081b00e43d1a0 Author: Adam Dickmeiss Date: Mon Mar 1 17:33:02 2004 +0000 Another fix for decoding of XML packed records. Version 2.0.15. commit 59cf60844792d6f2b04af223cabc4d441bb28029 Author: Adam Dickmeiss Date: Thu Feb 26 14:46:01 2004 +0000 Map SRW unsupported relation modifier to Bib-1: 117 commit 42e7f88749275a5113afb561abc76cee88621986 Author: Adam Dickmeiss Date: Wed Feb 25 13:03:46 2004 +0000 Update Changes commit a23ee5449742beee9dc2ebf56c70f065d6239df3 Author: Adam Dickmeiss Date: Wed Feb 25 12:59:56 2004 +0000 Skip HTTP chunk extension (if present). Towards 2.0.14. commit 993e46ad4aa8360fb25367191b760f3990965e16 Author: Adam Dickmeiss Date: Wed Feb 25 10:37:02 2004 +0000 Initialize content_{len,buf} always commit 19e26d53c9fba91febbd197f088602c08478a13e Author: Adam Dickmeiss Date: Wed Feb 25 08:47:41 2004 +0000 Debian yaz-2.0.13-2 commit 34de58723fd367e50e9261089cffa86f1ac3750d Author: Adam Dickmeiss Date: Tue Feb 24 07:48:02 2004 +0000 Fix Debian package to announce >= 2.0.13 commit a04895cd2f66c3e5adcfb57eae54c795c2c6f1cc Author: Adam Dickmeiss Date: Mon Feb 23 12:58:12 2004 +0000 Rewrite changes. commit 9911c0d04369165de4401aa6f9c908da3b22038e Author: Adam Dickmeiss Date: Mon Feb 23 12:57:19 2004 +0000 Update NS for SRW diagnostic elements. commit d6fb3aa1d14381512225362ac585de1dd426ce1e Author: Adam Dickmeiss Date: Mon Feb 23 12:12:25 2004 +0000 Use default namespace for SRW diagnostic elements commit 8c9d442bdc292941b9f71bce1c9a10536cd94003 Author: Adam Dickmeiss Date: Mon Feb 23 11:04:24 2004 +0000 Update year commit 0cc88e06f6f9da823d51ea963857659e3685c2de Author: Adam Dickmeiss Date: Mon Feb 23 10:14:06 2004 +0000 Fix use of strcasecmp for WIN32 commit 2b1085e05e143d1e6fdbe0c961a926dd1b77d89a Author: Adam Dickmeiss Date: Mon Feb 23 09:30:17 2004 +0000 Towards 2.0.13 commit 1c793310ab772f41040bdf954d8a2b5e5da8b8ad Author: Adam Dickmeiss Date: Mon Feb 23 09:26:11 2004 +0000 Implement ZOOM_resultset_{sort,cache_reset} which sorts and resets cache for result set respectively. commit c04068990b0b702ea90bb191a199bdc9e67538e1 Author: Adam Dickmeiss Date: Thu Feb 19 23:39:13 2004 +0000 Use 1.1 by default commit ee8cea4c1d359ba7e46b69a418619b7f3b358c84 Author: Adam Dickmeiss Date: Thu Feb 19 23:37:36 2004 +0000 http_version var commit 8fb5c6c99b6fb42df8539ea457038aca8ac1f70b Author: Adam Dickmeiss Date: Thu Feb 19 23:22:33 2004 +0000 Implement chunked HTTP transfer commit 0e48274dd7b0ba3fd4d3f91e898f3d28bdf23dfa Author: Adam Dickmeiss Date: Thu Feb 19 23:21:44 2004 +0000 Support Transfer-Encoding: chunked commit aa8b9d245d1ff378c907669a350a4e484b35eac5 Author: Adam Dickmeiss Date: Thu Feb 19 23:20:44 2004 +0000 Define for CHUNK_DEBUG commit 8fc4b6ad422bdd99be8439f88693a86ca36b8e13 Author: Adam Dickmeiss Date: Tue Feb 17 10:29:51 2004 +0000 Mention tcl commit afabe5eef1993c5b71602942f2e50a0d27ecbf33 Author: Marc Cromme Date: Tue Feb 17 09:23:16 2004 +0000 build-dependencies added commit c34bc1a5b78e47a8b681aa2458d5636c76e57bce Author: Adam Dickmeiss Date: Mon Feb 16 23:46:14 2004 +0000 For SSL, use -lssl -lcrypto on systems that don't have pkg-config. commit 975c22d3fb94aaf91399f1967dbb173129205888 Author: Adam Dickmeiss Date: Mon Feb 16 21:40:39 2004 +0000 Fix type cast warning issued by GCC 3.3.3 commit 433cdda34f42f164b599d34d922a7cf83c5f030b Author: Adam Dickmeiss Date: Mon Feb 16 18:28:18 2004 +0000 Towards 2.0.12 commit 78723254cce0fc4e86db7e8d2bc503527d7c08f9 Author: Adam Dickmeiss Date: Mon Feb 16 17:57:05 2004 +0000 Towards 2.0.12 commit 06395306e21cd9e9235e14483a88ba70c3325030 Author: Adam Dickmeiss Date: Mon Feb 16 11:30:33 2004 +0000 2.0.11 commit 7e6099dcfa2a7d2f93642e5873286a84fc595cc0 Author: Adam Dickmeiss Date: Mon Feb 16 11:22:34 2004 +0000 Include stdlib.h for zoom.h commit 317ee76a1bbe9de384aea464c829b8ad627518a2 Author: Adam Dickmeiss Date: Sun Feb 15 07:19:42 2004 +0000 Set default preferred/maximum record size to 1 MB commit 97554b23cfc19394bb77f7f3c4bf0c8abf89297b Author: Adam Dickmeiss Date: Sat Feb 14 15:58:42 2004 +0000 SRW/SRU update: use uri instead of code for diagnostic commit 64a4f78d5566927b12b374157edf72f68232ffa3 Author: Adam Dickmeiss Date: Sat Feb 14 15:44:15 2004 +0000 Added init command for yaz-client which sends extra init request commit 0a1e9944179033c72f1fa9f9c13fabddc1945aeb Author: Adam Dickmeiss Date: Wed Feb 11 23:49:28 2004 +0000 Fixed two bugs in OID codec - ber_oidc. Throw error when encoding or decoding bad truncated OID. Fix decoding of OID X.Y when X=2, Y>39. commit 51f5ff156a2550d96b6d27fd901edaab161b32c8 Author: Adam Dickmeiss Date: Wed Feb 11 21:39:44 2004 +0000 Fixed a bug in ASN.1 compiler that caused Type-1 Operator codec to fail commit 8811f4c9c5a84976b696349b5dc4d7ae0faf66b6 Author: Adam Dickmeiss Date: Wed Feb 11 13:37:16 2004 +0000 Make separate error code for invalid query commit c0d273015235ff18b755a5375d468cbb9f14af19 Author: Adam Dickmeiss Date: Mon Feb 9 12:38:57 2004 +0000 New Debian Policy commit e9d0ea23cc3d9b9f6156e679a475d59289c0f3ef Author: Adam Dickmeiss Date: Mon Feb 9 09:54:57 2004 +0000 Fixed compilation for SSL commit 93d4cfa840acd64c55976bae197644000b5d8774 Author: Adam Dickmeiss Date: Mon Feb 9 08:41:49 2004 +0000 Ensure that YAZ is compiled with libwrap commit 02e141ff9bcfd2c6cfe2ad13991015018ca787b0 Author: Adam Dickmeiss Date: Thu Feb 5 14:15:42 2004 +0000 Remove extra AC_MSG_RESULT entry commit a1e8950b3ac76b9b8a85d9261b07c558ad8a3c9b Author: Adam Dickmeiss Date: Thu Feb 5 11:55:56 2004 +0000 2.0.10 commit 41e72cae5a6e59a2135765ad091dabb0de7221d5 Author: Adam Dickmeiss Date: Thu Feb 5 11:54:09 2004 +0000 Allows second argument for YAZ_INIT to hold required version of YAZ. commit 4b7f94b22a4a670274c028db7f0e438f2d7d74a0 Author: Adam Dickmeiss Date: Tue Jan 27 21:22:43 2004 +0000 Use prefix for SRW diagset in ZOOM commit 163abf332e441c2d39cf6ee4e83bad169fa1c59c Author: Adam Dickmeiss Date: Tue Jan 27 12:15:11 2004 +0000 SRW diagnostic code now a URI commit ccd8958b42e2d3d6aee55dd1201d56eb7a278b56 Author: Mike Taylor Date: Mon Jan 26 21:05:34 2004 +0000 Rolling tweaks, not yet running commit 764d3e4552e9a6c56f9cc07eadf9b6a5142722d0 Author: Adam Dickmeiss Date: Fri Jan 23 18:16:07 2004 +0000 Allow any PDU size if preferredMessageSize is 0 commit 0ff4f5bd6fc1007c322530ba6a3633869140f448 Author: Adam Dickmeiss Date: Fri Jan 23 11:52:52 2004 +0000 ASN.1 compiler sets Type pointer to NULL when DECODING omitted stuff commit 552f5f29bd93694954609b4669bca00752b92653 Author: Adam Dickmeiss Date: Thu Jan 22 11:20:54 2004 +0000 Allow recordID{Opaque,Number} to be se for ES upÃdate commit 832a7cfb01c097bb6afeac6f767b9a61c5355203 Author: Adam Dickmeiss Date: Sun Jan 18 21:11:11 2004 +0000 Debian sample init.d YAZ server script commit 83ac63cea12d7b176008739ac5fdafd01f628bef Author: Adam Dickmeiss Date: Sun Jan 18 02:28:42 2004 +0000 Fixed PID file so it is generated after fork (-r & -D) commit c7753f2a498076aae60b9a4682041c573792d0cd Author: Adam Dickmeiss Date: Sat Jan 17 01:20:12 2004 +0000 Implement option -D, -p for GFS commit 4fb9818b0657f561397b29e55d87cc8d4f194436 Author: Adam Dickmeiss Date: Fri Jan 16 10:04:54 2004 +0000 Make ZOOM C recognize option password commit 69074d2162afddc94e48d98d260f2dd70d6462b7 Author: Adam Dickmeiss Date: Thu Jan 15 23:33:29 2004 +0000 Fix sequence of diagnostic element commit 76bd6780cebee47ffefa4170fa2daa1f079d9559 Author: Adam Dickmeiss Date: Thu Jan 15 10:16:26 2004 +0000 Change proto of yaz_init_opt_decode. Added new function nmem_print_list_l (variant of nmem_print_list). Added new yaz-client command zversion that sets Z39.50 option bits - using yaz_init_opt_encode. commit 26978ebf6e44361779446e66a9891149d9032d59 Author: Adam Dickmeiss Date: Thu Jan 15 10:05:56 2004 +0000 Avoid reverse lookup in GFS commit b9c35fd3860882cc3804a4a9d69bec9b96099c57 Author: Adam Dickmeiss Date: Thu Jan 15 10:04:39 2004 +0000 Allow frontend server to stop (for debugging purposes) commit 5a8d9b1f3dc37b9e2420298e0daf1dc75f0a5433 Author: Adam Dickmeiss Date: Wed Jan 14 00:15:56 2004 +0000 Fix SOAP SRU encoding leak commit 4ddee9959ca6f59d3f8bd4259dfecee04b12c925 Author: Adam Dickmeiss Date: Tue Jan 13 11:19:24 2004 +0000 Use yaz_init_opt_decode to show options commit 11b76ecdb94556ae09761a5d43f0635c2f9a2974 Author: Adam Dickmeiss Date: Mon Jan 12 13:21:52 2004 +0000 Changes commit 6d9e8305bb173398dc9b886070a72b40618304ca Author: Adam Dickmeiss Date: Mon Jan 12 12:11:57 2004 +0000 Small utility to encode/decode init options as a string commit f1fef5aeb2f4aad16d5c66e7ed4b58def0a26464 Author: Adam Dickmeiss Date: Mon Jan 12 12:10:44 2004 +0000 Use displayTerm in zoomsh commit 81b54a15b8c4277b1e25338d21188ea1e209edda Author: Adam Dickmeiss Date: Mon Jan 12 12:10:17 2004 +0000 Fix displayTerm. Prepare for xpath for record element fetch. commit 5443d85bcd6ac9a3ca444586ab7a83c3ba85bc6b Author: Adam Dickmeiss Date: Fri Jan 9 19:54:05 2004 +0000 Update SRW messages strings to version 1.1 commit a38742c388bd6ad26a978d9b09525b6fd79d0418 Author: Adam Dickmeiss Date: Fri Jan 9 19:53:42 2004 +0000 Encode SRW/SRU diagnostic message from diagnostic code. commit 073195289eb9b73d6793fa283e5a7dca7a24fba8 Author: Adam Dickmeiss Date: Fri Jan 9 18:10:31 2004 +0000 Picky SRU decode. yaz_srw_get supports scan commit ced98df62664982b6340c504d90b9309d41f4a1b Author: Adam Dickmeiss Date: Wed Jan 7 22:27:41 2004 +0000 Read recordXPath for SRU commit e2572abf240cdd295a1761e5912ada162c435e61 Author: Adam Dickmeiss Date: Wed Jan 7 21:43:20 2004 +0000 2.0.9-5 commit cdf3162d32f13fd58d0b7fb06b3252bab2bc78ad Author: Adam Dickmeiss Date: Wed Jan 7 21:02:42 2004 +0000 Add z_soap_codec_enc_xsl commit b462b5047a365a76a5be26341e62b69076a33d3a Author: Adam Dickmeiss Date: Wed Jan 7 20:36:44 2004 +0000 Stylesheet support. commit b0663a3c3827d354e197fa9b8d42526bd3785cdd Author: Adam Dickmeiss Date: Wed Jan 7 20:33:57 2004 +0000 Fix warning commit bd005058ce4832b581a4f81ec5667212e995a49e Author: Adam Dickmeiss Date: Wed Jan 7 14:01:24 2004 +0000 Add isbn to bath commit 2bfedb1881eea1eb4e158779348794979ca9b681 Author: Adam Dickmeiss Date: Tue Jan 6 20:21:37 2004 +0000 Use _strnicmp on Windows commit 82988dd4a36739a5559015cb7df4dd757765d289 Author: Adam Dickmeiss Date: Tue Jan 6 19:12:19 2004 +0000 Fix a bug with decoding of XML packed records commit e87b4d274ad846d5cc5e1e443d2f1fc2c63ac633 Author: Adam Dickmeiss Date: Tue Jan 6 13:38:56 2004 +0000 Debian/window 2.0.9-3 commit 342d9afa535d530e54c1124705fde9d594a29a76 Author: Adam Dickmeiss Date: Tue Jan 6 13:38:39 2004 +0000 Report missin record data commit c39e347facce3cd8c3186f22ab14933119f8ae08 Author: Adam Dickmeiss Date: Tue Jan 6 11:21:04 2004 +0000 Fix record/literal XML decoding commit c0cae2eb789bb55c6e3739f169973a3ab54a62a7 Author: Adam Dickmeiss Date: Tue Jan 6 11:20:15 2004 +0000 Tweak error mapping commit b3d0700ef5df9c96be4c08dcb9ac2a7e123c9f48 Author: Adam Dickmeiss Date: Tue Jan 6 09:10:02 2004 +0000 SRW/Z39.50 diagnostic mapping: make bad ESN to bad schema commit 5b7816b7d347df94a6f3c3ec80680450b64e1e42 Author: Adam Dickmeiss Date: Tue Jan 6 09:09:13 2004 +0000 Rename variable commit 983b28466be0739a9408c79624aedb47894504a3 Author: Adam Dickmeiss Date: Mon Jan 5 14:46:52 2004 +0000 Allow empty ODR (NMEM=0) for odr_oiddup and odr_getoidbystr. commit 09745ff1f817a049d0cd412977f02144ade9c4fb Author: Adam Dickmeiss Date: Mon Jan 5 14:06:25 2004 +0000 Changes commit 67f0b922040d236afc88b8d247acca84e5fa0d73 Author: Adam Dickmeiss Date: Mon Jan 5 14:05:56 2004 +0000 Fix bug in diagnostics decoding commit 20ce1ea958eef4ff90fc8e5486ab058deec7065f Author: Adam Dickmeiss Date: Mon Jan 5 09:50:54 2004 +0000 Year commit 2c622539de3e2a0a5e6ca42f20c7f0379901b12d Author: Adam Dickmeiss Date: Mon Jan 5 09:45:49 2004 +0000 Remove yazmalloc references commit 8b1f021032708fbb64d8bee92be590f8ac3066a7 Author: Adam Dickmeiss Date: Mon Jan 5 09:41:31 2004 +0000 Fix flags for XML2 commit c82bbc07fb53f78aab88bb4121629daeef42ed2a Author: Adam Dickmeiss Date: Mon Jan 5 09:34:41 2004 +0000 2.0.9 candidate commit da52cf68299952193806f8093c04e46d1bbf8375 Author: Adam Dickmeiss Date: Wed Dec 31 00:14:00 2003 +0000 Fix problem with print ODR/HTTP/odr_reset commit 9fbebacf10f546b98ade3d7f7389b4241304f3a4 Author: Adam Dickmeiss Date: Tue Dec 30 15:18:53 2003 +0000 Fix ODR pritn of HTTP requests commit b1419c61a0ac369638256f2afd1fc6b8ecd8fa34 Author: Adam Dickmeiss Date: Tue Dec 30 00:29:53 2003 +0000 Fix several compile warnings commit b8daa05e7f9c86d3dc2d4204276ec7a6f9d18258 Author: Adam Dickmeiss Date: Tue Dec 30 00:23:28 2003 +0000 Remove obsolete /pdb switches commit 1df74413ba9a51d9cdcfb4ae7b5f32aae0d213e0 Author: Adam Dickmeiss Date: Tue Dec 30 00:22:11 2003 +0000 Fix return statement commit e2b321b91b26903966a53146e0fec1875199482e Author: Adam Dickmeiss Date: Tue Dec 30 00:16:24 2003 +0000 Missing return statements commit 582597c00fa0cab08133741f281b816719445198 Author: Adam Dickmeiss Date: Tue Dec 30 00:13:05 2003 +0000 Let GFS accept SRW 1.0 commit afd69722f67d2178a0286387afcd1e444f83517a Author: Adam Dickmeiss Date: Tue Dec 30 00:12:50 2003 +0000 Init recordXpath commit 037037e14faa1f992ed3574817086eabc469c9c4 Author: Adam Dickmeiss Date: Mon Dec 29 14:54:33 2003 +0000 SRW scan commit bf994e8c94edd6af6add9a94d6b14958da51a63f Author: Adam Dickmeiss Date: Mon Dec 29 13:39:41 2003 +0000 GFS could drop first record in a result set exceeding preferred message size. Reported and fixed by Irina Dijour. commit 92a2ec88190fdae80bde0730b81038c01452f51f Author: Adam Dickmeiss Date: Sun Dec 28 11:46:03 2003 +0000 Updated changes with GFS record fix commit 23d4b6d353d8f2727c3a6ff875eb04ad80063b2f Author: Adam Dickmeiss Date: Thu Dec 25 15:25:08 2003 +0000 Fix calculation of length of structured records in GFS record packer commit 0d7bebc5bead24c1cdd6c3bfdc2a9bf2b3678c07 Author: Mike Taylor Date: Wed Dec 24 16:59:12 2003 +0000 Option parsing. Still no functionality. Time to stop for Christmas. commit 9e678d07eb1deabb1cd342c6510512e9c82685cf Author: Mike Taylor Date: Wed Dec 24 16:23:43 2003 +0000 Empty benchmarking application commit bc6066a0d123d68d14074ad399926a96ad78a383 Author: Adam Dickmeiss Date: Tue Dec 23 08:47:25 2003 +0000 Note changes. commit 1eab9deeb96ddadbf8edf6b301ad9555196c1f99 Author: Adam Dickmeiss Date: Mon Dec 22 22:47:20 2003 +0000 Fix SRW/SRU NS for diagnostic commit fbb6eed845e784c43b0167712787b812ed214152 Author: Adam Dickmeiss Date: Mon Dec 22 19:46:22 2003 +0000 Handle unexpected HTTP closed sessions better commit 2fecc9fe2221c1bcbecca9730a96d7fdb04da2c3 Author: Adam Dickmeiss Date: Mon Dec 22 14:52:05 2003 +0000 Changes. commit f6010bba2dda2b3890e58961deec4a48cf2d4941 Author: Adam Dickmeiss Date: Mon Dec 22 14:46:26 2003 +0000 Towards 2.0.8 commit 49c5b42617e1fcd2e36d6f4e6628a93232b99b0f Author: Adam Dickmeiss Date: Mon Dec 22 14:24:10 2003 +0000 Init member database for explain request commit d21c0a79df949a31f337094b8e169d04a939a9dc Author: Adam Dickmeiss Date: Sun Dec 21 11:33:29 2003 +0000 HTTP header lookup case insensitive commit 7ae022686fea1c7d71db914b867032f8569ddb5f Author: Adam Dickmeiss Date: Sat Dec 20 22:40:46 2003 +0000 Init all SRW explain response members commit e28a34b085aa1970ff0ae49bb658e94a9a564e8a Author: Adam Dickmeiss Date: Sat Dec 20 19:11:39 2003 +0000 Fixed ODR usage in SRW decoding commit 9ef0cd3dce91d8effe3259ede499aaa972108c33 Author: Adam Dickmeiss Date: Sat Dec 20 00:52:08 2003 +0000 Fix SRW/SRU ns commit 06eb0818f902a5d6805b656e0ba2e39ac2ed7817 Author: Adam Dickmeiss Date: Sat Dec 20 00:51:19 2003 +0000 SRW/SRU 1.1 commit 30580efb58e1e71dfd4743db723a79a01206bac4 Author: Mike Taylor Date: Fri Dec 19 12:16:19 2003 +0000 Support for CQL transformations involving wildcard patterns, which were previously passed through untouched. We now make an effort to emit the most primitive (i.e. Bath-friendly) truncation attributes we can, based on what's in the configuration file, falling back on Z59.58-like wildcarding when necessary. The logic turns out to be non-trival (sigh ... so unlike an OpenURL resolver.) Although the code, once I'd finally arrived at it, turned out to be gratifying short and clear: If a term begins and ends with * and has no other WC characters in it AND we have a truncation.both element in the configuration file, strip the *s and use truncation.both. Otherwise, if it begins with * and has no other WC characters in it AND truncation.left is configured, use that. Otherwise, if it ends with * and has no other WC characters in it AND truncation.right is configured, use that. Otherwise, if it has any WCs anywhere in the string, transliterate * to ? and ? to # and use truncation.z3958, generating error 28 "Masking character not supported" if it's not configured. Otherwise it must be the case that it has no WCs. Use truncation.none, generating error 30 "Too many masking characters in term" if it's not configured. This arrangement allows some flexibility in the configuration file, e.g. you can omit the special-case left-, right- and both-truncation elements if you always want Z39.58-style truncation. I also fixed a small and harmless bug of Adam's, which I am pretty sure could _never_ have any effect, but which offended me anyway. This change is far too trivial to be worth mentioning in the CVS log, but I'm expecting Adam to read this, and probably go and see what the bug was :-) commit ce3481bda4af7147e61cb88f7e628e57c4c443c2 Author: Mike Taylor Date: Fri Dec 19 12:00:36 2003 +0000 Add truncation attributes. commit 2f5de47d0b100194d42e6ae9d17a994e8203da0d Author: Adam Dickmeiss Date: Thu Dec 18 23:04:23 2003 +0000 Fix memory leak in SRW/SRU encoding handler commit f3fed9cc883fdb00d409b84c3f3784368775d2d7 Author: Mike Taylor Date: Thu Dec 18 17:30:28 2003 +0000 Describe recent CQL changes. commit b7dce0eae6656ccb499233e04f5a5bf90178c7cd Author: Mike Taylor Date: Thu Dec 18 17:27:31 2003 +0000 All changes to the CQL section: Talk about context sets instead of index sets. Talk about indexes instead of qualifiers. Document new "index.set.name" specifier. (The old "qualifier.set.name" specifier is mentioned as DEPRECATED.) Describe default use of cql.serverChoice instead of srw.serverChoice. Update the example configuration file according to the above. commit 0698a93c2bb1b8e7fa7a63d906bb863ffdac40e9 Author: Mike Taylor Date: Thu Dec 18 17:05:01 2003 +0000 index set -> context set commit 9b9e5015dba09e7480f09351cfccdfafd99b2d30 Author: Mike Taylor Date: Thu Dec 18 17:02:24 2003 +0000 Comment commit 1bb6c593dea33c483d06114ab5fee75c06bc90e1 Author: Mike Taylor Date: Thu Dec 18 17:00:55 2003 +0000 Comment. commit 8e9026976dd4ff7786ceb73507ff0f0b4b6a8b6d Author: Mike Taylor Date: Thu Dec 18 16:59:28 2003 +0000 Look for cql.resultSet as well as srw.resultSet. Fall back to cql.serverChoice rather than srw.serverChoice when no index is provided for a term. (Unfortunately the structure of the code makes it hard to check both.) commit 160dbbfc3752e5be9e506bd9ab824b54e2e73e81 Author: Mike Taylor Date: Thu Dec 18 16:49:07 2003 +0000 s/qualifier/index in comments. commit 9691e3376fe3f178ac95e707610b83b36e8635c5 Author: Mike Taylor Date: Thu Dec 18 16:45:19 2003 +0000 Typo in Usage: message. commit 9c0500654d398012434385e07f44aa2a7545133b Author: Mike Taylor Date: Thu Dec 18 16:44:20 2003 +0000 Replace leading "qualifier." with "index." throughout. commit 0e2fe400d9cb82150d83c48404bead5b5d447a16 Author: Mike Taylor Date: Thu Dec 18 16:42:52 2003 +0000 Look up index-names as "index." in the qualifier configuration file, falling back to the old "qualifier." only if this fails. commit 1f8974fbf70eb3f6b1168bd2e0037284f1df1250 Author: Mike Taylor Date: Thu Dec 18 14:40:20 2003 +0000 More considered Bath Profile support. May need changes to the software to generate more Bath-friendly queries. Add support for "cql" set (replaces "srw" which is retained but deprecated) Add support for "rec" set (required by Bath) Add support for the "bath" set. Remove some old qualifiers that shouldn't be there at all. Remove qualifier.bath.remoteSystemRecordNumber (use rec.id instead) commit d46ff174293651723309c8a33312bee64556c6e4 Author: Mike Taylor Date: Thu Dec 18 13:44:59 2003 +0000 Very, very basic support for Bath profile. commit 2f42dd80660f2fe5b5bab74f0db83d968f806ba7 Author: Adam Dickmeiss Date: Thu Dec 18 13:08:48 2003 +0000 Fix @attr set for CCL to RPN commit a19316337aa3e23b74dac29e5dcad06493ecf083 Author: Adam Dickmeiss Date: Wed Dec 17 12:28:07 2003 +0000 Warn for bad base address in MARC parser commit 8d0e0fa62fea7c440a92d43452774523b5cf5faa Author: Adam Dickmeiss Date: Tue Dec 16 14:51:45 2003 +0000 Mention .NET version commit cbc706398c215b137f93d81986fd44029270a57a Author: Adam Dickmeiss Date: Tue Dec 16 14:45:59 2003 +0000 Towards 2.0.7 commit 79275c8b7ec33ad44f787051d0c47ca57daba8c5 Author: Adam Dickmeiss Date: Tue Dec 16 14:36:28 2003 +0000 Add C decl for cql.h commit 6ad80c673e9591ae178154cfe2ce002834cfdafd Author: Adam Dickmeiss Date: Thu Dec 11 00:37:19 2003 +0000 ISO2709 output for yaz_marc utility commit e323a843d06898d46d0aaac39d345bdd560c0c59 Author: Adam Dickmeiss Date: Tue Dec 9 17:13:35 2003 +0000 Fixed bad memory reference - when bad SRW/HTTP response was received commit 5b417578fa8bce4671d29d59201ae0ad0c7e5653 Author: Adam Dickmeiss Date: Tue Dec 9 12:51:16 2003 +0000 Added missing C decl macros for soap.h and srw.h. commit 95d3dcd343af68f6979dedb1e44f5781f1575df7 Author: Adam Dickmeiss Date: Thu Dec 4 13:20:39 2003 +0000 Towards 2.0.6 commit a020d200f829b4c3fb5fbb44fd83572405f8cf87 Author: Adam Dickmeiss Date: Thu Dec 4 13:02:28 2003 +0000 Changes commit b0940b7daa836cd50ed2be23d539fec9de602c89 Author: Adam Dickmeiss Date: Thu Dec 4 12:57:30 2003 +0000 Remove unused local var commit f52a29d87484996d9e18397b2bf07d28ad8cf99e Author: Adam Dickmeiss Date: Thu Dec 4 11:48:06 2003 +0000 Transfer decode memory to stream commit e5e0009a3e78e4ca72b5e0a4768e300091170323 Author: Adam Dickmeiss Date: Thu Dec 4 11:47:50 2003 +0000 memset freed NMEM block to Y (59 Hex) commit cc411c43c6681ea13581b8fbf17fd197f2612cd9 Author: Adam Dickmeiss Date: Thu Dec 4 11:46:36 2003 +0000 Add missing CDECL around this commit 5bd7d278653dd178ca7da5a1bcc79724017ecd5e Author: Mike Taylor Date: Fri Nov 28 09:02:19 2003 +0000 Kang-Jin Lee's typo commit afb64801b0ba90d99482d66eeb675e280628c996 Author: Adam Dickmeiss Date: Thu Nov 27 15:39:16 2003 +0000 Remove Index Data/ from implementationName (for response as well) commit b1cbe58ba4e530026c0d586eb1fbacd44e08cff6 Author: Adam Dickmeiss Date: Thu Nov 27 15:37:23 2003 +0000 Remove Index Data/ from implementationName commit a38648255b03b429e900f150cdf59eec987a7371 Author: Mike Taylor Date: Wed Nov 26 22:47:42 2003 +0000 Use odr_prepend() to assemble "implementation*" strings. commit 96886341515b414c7aed9112d41b1f346f95e24c Author: Mike Taylor Date: Wed Nov 26 16:56:00 2003 +0000 Omit leading space from ZOOM-C version number extracted from $Revision$ commit 4fbc7c05a14d80187951b2fc690ba71374449124 Author: Mike Taylor Date: Wed Nov 26 16:23:42 2003 +0000 Add odr_prepend() commit 23794062255aca1313eaff359edb7b73a5f1a742 Author: Mike Taylor Date: Wed Nov 26 16:22:35 2003 +0000 Use odr_prepend() to generate implementation{Id,Name,Version} commit 79c6d1159a62591c6fe14452fd09a3bd7394344f Author: Adam Dickmeiss Date: Tue Nov 25 23:19:59 2003 +0000 Allow command to send extended service package commit 6e27325647596d80d9fcf1c9ad8f10be7004718a Author: Adam Dickmeiss Date: Tue Nov 25 23:18:08 2003 +0000 More work on extended services, create database, drop database, update record commit 823ed165c1796f9d554178c6177b6e495b4290ba Author: Adam Dickmeiss Date: Tue Nov 25 19:46:18 2003 +0000 Mention -installa commit 8827b69f7d7ac9aee5fa3bdddc8f727b18497630 Author: Mike Taylor Date: Tue Nov 25 10:08:06 2003 +0000 ZOOM-C options changes. commit 1615d14c893250613d6670abe2b71533687aec4d Author: Mike Taylor Date: Tue Nov 25 09:55:20 2003 +0000 Describe "presentChunk" option in preference to old "step" (though that is also still mentioned). Clarify its meaning. commit f87d2eee00acc830ada9ee98c347f3d1415ea74b Author: Mike Taylor Date: Tue Nov 25 09:50:35 2003 +0000 Use new "presentChunk" options in preference to old "step" if it's defined. (But still fall back on "step" if it's not.) commit e8dc7001d403b6b4364753fcd194647cbfd737a1 Author: Mike Taylor Date: Mon Nov 24 11:27:57 2003 +0000 Document the newly-supported standard ZOOM options "serverImplementationId", "serverImplementationName" and "serverImplementationVersion" (as specified in the forthcoming AAPI 1.4), but note continues support for the old "targetImplementationId", "targetImplementationName" and "targetImplementationVersion" for the benefit of old applications.) commit bb0c882cc25ef16cea865719e4f51df16f645ea9 Author: Mike Taylor Date: Mon Nov 24 11:25:07 2003 +0000 Support the standard ZOOM options "serverImplementationId", "serverImplementationName" and "serverImplementationVersion" (as specified in the forthcoming AAPI 1.4), but continue also to support the old "targetImplementationId", "targetImplementationName" and "targetImplementationVersion" for the benefit of old applications.) commit 81c23570ac55dbb3faa04a6625a45d9c617c5c02 Author: Adam Dickmeiss Date: Wed Nov 19 22:24:57 2003 +0000 Add MARC21 as an alias for USMARC commit 6f5f4e50b5ca6f814995222adfff91f47ca45385 Author: Adam Dickmeiss Date: Wed Nov 19 22:06:06 2003 +0000 Updates OID, display term, etc commit 2bf08e725ba16cfa16df8d03468891c57c1670b8 Author: Adam Dickmeiss Date: Wed Nov 19 22:05:15 2003 +0000 Added a few URLs commit 13799de54193c0805742fcea46b493b2e2bcd98e Author: Adam Dickmeiss Date: Wed Nov 19 22:04:58 2003 +0000 Better looking frontpage commit cbd3dfed0ab7919bf1deb0e8af5fed4ffb8bdf5d Author: Adam Dickmeiss Date: Wed Nov 19 21:17:26 2003 +0000 Mention yaz-iconv, yaz-marcdump in documentation commit 8d92137c228ec24df2d62a8039635bb8ad19558d Author: Adam Dickmeiss Date: Wed Nov 19 19:07:26 2003 +0000 Implement ZOOM_scanset_display_term commit 2f405fd826dd2f2e837fe3557274fdc2c08d2f02 Author: Adam Dickmeiss Date: Wed Nov 19 19:06:41 2003 +0000 For Scan, yaz-client shows displayTerm if present commit ea46811da745f751b8db974a0a53517244e4a89d Author: Adam Dickmeiss Date: Wed Nov 19 19:04:12 2003 +0000 More tweaks for documentation CSS commit 0f2384e1337d9c4a23262a81312d54eccb8efaf6 Author: Adam Dickmeiss Date: Wed Nov 19 14:49:10 2003 +0000 Sans-serif fonts for headlings. Indent examples. Italic captions commit c40fa4c2f95aba19456731fa51c5a19a1aa19cb2 Author: Adam Dickmeiss Date: Wed Nov 19 14:03:36 2003 +0000 Configure uses pkg-config to get OpenSSL compile info where available commit 422a45e862fa7d6ed7ff4f5b5dcd7a7b503631f1 Author: Mike Taylor Date: Wed Nov 19 13:47:05 2003 +0000 Add OID for the new ExtLite attribute set. Add OIDs for NACSIS-CATP, FINMARC2000 and MARC21-fin record-syntaxes, as requested/supplid by Ere Maijala commit 75673d92aa9bc56afbf443569d9636fa4b95d2ec Author: Adam Dickmeiss Date: Tue Nov 18 21:06:26 2003 +0000 RedHat package updates for yaz-iconv commit 65f59a503a2450254dad6b8ce22330095a61a6ea Author: Adam Dickmeiss Date: Tue Nov 18 20:48:36 2003 +0000 yaz-iconv man page commit ec00b639169c2fb10e295ad712cb417156839d09 Author: Adam Dickmeiss Date: Tue Nov 18 20:34:34 2003 +0000 man page for yaz-iconv commit 4a27cb183d61f160ea6c012026d015437783d33a Author: Adam Dickmeiss Date: Tue Nov 18 18:39:24 2003 +0000 Make libyaz-devel depend on libxml2-devel commit 4f1622d17926aa4b30b0332905b087f912a5b5f6 Author: Adam Dickmeiss Date: Mon Nov 17 22:36:37 2003 +0000 Debian package updates commit 7330ea6fe4f984d5bd0498aa7e962ad4d7462916 Author: Mike Taylor Date: Mon Nov 17 21:32:58 2003 +0000 Reverse the order of "toolkit-supplied / application-supplied" strings sent as implementationId, Name and Version. Also, remove the spaces around the slash. This brings the GFS in line with the behaviour of ZOOM-C on the client side. commit 3dad3dbf94b411b5ebaf0714aa40d91def9d0945 Author: Mike Taylor Date: Mon Nov 17 16:52:52 2003 +0000 Note ZOOM-C enhancements commit 9236c79b8c1ea40370333bdce0f41145a9cb889e Author: Mike Taylor Date: Mon Nov 17 16:01:12 2003 +0000 Add support for implementationId and implementationVersion options to go along with implementationName. commit e7f794c7bf10e503d83fbb4284e5b3ad3df20c7e Author: Mike Taylor Date: Mon Nov 17 15:00:41 2003 +0000 Clarify description of piggy-backing, including moving all the elementSetSmallerThanSomewhatColour options from the Result Set Options table into the Connection Options table (since that's where they need to be set: by the time you set them on a Result Set, it's too late). This emerges from the work to standardise ZOOM options across bindings and implementations. commit 078ac9ebd245ab061726b49c41218549665dc61e Author: Mike Taylor Date: Mon Nov 17 10:40:56 2003 +0000 Include system-level error message in cs_errmsg() output when appropriate commit d8bba5ddfc90e17c8ce8eb509b868e74aed4765b Author: Mike Taylor Date: Mon Nov 17 10:40:08 2003 +0000 Add CSLASTERROR commit 000e5d43c17d2fd2bc91c48be97cb288a9746f8f Author: Adam Dickmeiss Date: Sun Nov 16 23:02:08 2003 +0000 Customize DSSSL for YAZ to use CSS commit 282f6995f72787ec08d70dd4c5ada29728ba49f3 Author: Adam Dickmeiss Date: Sun Nov 16 22:56:53 2003 +0000 Customize XSL for YAZ and add CSS for it commit a60b4f503640ee9ba810fbb5f07f754f22f922d0 Author: Mike Taylor Date: Mon Nov 3 21:30:23 2003 +0000 Ignore generated files commit 95caf42425fc1c7b6ba46fb35178a0e8a6b54ec8 Author: Adam Dickmeiss Date: Mon Nov 3 14:05:54 2003 +0000 Fix address commit bd704a58e941b7539473acd766c0ba3d155c3b29 Author: Adam Dickmeiss Date: Mon Nov 3 10:56:15 2003 +0000 Ooops commit 02892c02c9a5151b57db6d14e9a01a8d8c0d750d Author: Adam Dickmeiss Date: Mon Nov 3 10:55:44 2003 +0000 Mike author too commit 83826a4336911dffd420ce9c147156d7c7fbc894 Author: Adam Dickmeiss Date: Mon Nov 3 10:54:49 2003 +0000 minor commit 25bb8e0408680b477ff222771ab0544ac5f314c5 Author: Adam Dickmeiss Date: Mon Nov 3 10:54:01 2003 +0000 Fix link to europagate commit ae3d95927f9d9d0a02a271ee6bdce89b26b3ff4e Author: Adam Dickmeiss Date: Mon Nov 3 10:47:24 2003 +0000 Use example tag consistently commit 76194825bc72e6a8a710af2e9332b7dd034cf6a9 Author: Adam Dickmeiss Date: Mon Nov 3 10:47:06 2003 +0000 Fix spelling commit 96ca9f70fe68d941a7604f3dd1a6d5817556ddf0 Author: Adam Dickmeiss Date: Mon Nov 3 10:46:52 2003 +0000 Use example tag. Using Apache as SRW/SRU frontend commit ead1fed26c763853e05c25163d1916bee1684fc5 Author: Adam Dickmeiss Date: Mon Nov 3 10:45:05 2003 +0000 Use example element. Pointer to BER/ASN.1 standards/tutorial commit d1ad544488a515cb6ad80d1b98863baa57abb567 Author: Mike Taylor Date: Mon Nov 3 09:49:58 2003 +0000 Describe encoding of string attribute-values commit 29c7ed2c90cd7aa5b69ec785c618b260f9525b1b Author: Mike Taylor Date: Mon Nov 3 09:34:02 2003 +0000 Fix typo in grammar for @term commit 4d16fbc7b32700afd686bbaa51c2253d7f3287ec Author: Adam Dickmeiss Date: Sun Nov 2 17:59:28 2003 +0000 For HTTP requests, specify Host header (required by HTTP 1.1) commit accf4ae2bea381ba902f2058e8182510f96a0b5d Author: Adam Dickmeiss Date: Sun Nov 2 17:58:16 2003 +0000 Use 'Host' rather than 'host' for HTTP header commit 54462bdd66000b20ff13b8545ed58a838a12b793 Author: Adam Dickmeiss Date: Wed Oct 29 13:26:34 2003 +0000 Allow user,group,umask to be specified for Unix file socket commit 56d270b5025b8a6482f2d5cae6c8c72ce7f54b50 Author: Adam Dickmeiss Date: Mon Oct 27 13:43:43 2003 +0000 Fix documentation NSIS section commit a20cd84700c6053806bd89d37ab55eea6d160047 Author: Adam Dickmeiss Date: Mon Oct 27 13:35:24 2003 +0000 Update Windows Installer for new source layout commit e7895a6921a66c64484ef1d2434ffb8f9a8d9464 Author: Adam Dickmeiss Date: Mon Oct 27 12:34:09 2003 +0000 yaz-marcdump man page commit 97e3dda0b95f4f7a86d1bab2a0ba8eceaeff44ca Author: Adam Dickmeiss Date: Mon Oct 27 12:32:03 2003 +0000 Restructure of YAZ source commit c6e47cbbff56f39f6d81b079ebaeac41d793d4d9 Author: Adam Dickmeiss Date: Mon Oct 27 12:21:21 2003 +0000 Source restructure. yaz-marcdump part of installation commit c71d717ada2a9ef730d527f161eb5ba9aa641a9f Author: Adam Dickmeiss Date: Thu Oct 23 09:56:57 2003 +0000 Fix sample PQF commit e0b4bd0a5d34761d221be1d8809ec466e51b6754 Author: Mike Taylor Date: Tue Oct 21 12:44:42 2003 +0000 Tweak output format for nicer Init diagnostic messages commit c80275992d29b4815dd25d9203e094ae2880f1ae Author: Mike Taylor Date: Tue Oct 21 12:35:50 2003 +0000 Nice rendering for otherInfo in Init Response, including init diagnostics returned in accordance with Implementor Agreement 5 commit 0ee9db55cdfd44205cd2e389b27a79c3a2cb7dd6 Author: Adam Dickmeiss Date: Tue Oct 21 09:48:23 2003 +0000 Fix another request leak that occured on bad HTTP requests commit 2e0cefa8b248dafdbc6518d12d0ba646d2f19565 Author: Adam Dickmeiss Date: Tue Oct 21 09:30:32 2003 +0000 Flag zero-zero as error in completeBER commit b3c7ee20442440628e2772c087bdf55c8b007fce Author: Adam Dickmeiss Date: Mon Oct 20 20:48:37 2003 +0000 Fix release of requests (bug introduced by previous commit) commit 6588b4176290d756fa422b9b93e297ddba3e22d8 Author: Adam Dickmeiss Date: Mon Oct 20 18:21:45 2003 +0000 Do not allow more than 8K HTTP header (potential DOS attack) commit ea27f95dc32881b53a436c22b92e704f28a553a6 Author: Adam Dickmeiss Date: Mon Oct 20 18:20:55 2003 +0000 Fix leak in GFS that occurred when on ODR decoding error commit 99837f06c78dde81614bab9a3a58c005b004338d Author: Adam Dickmeiss Date: Mon Oct 20 13:44:05 2003 +0000 Prevent completeBER from returning 0 (PDU incomplete) on bad packages: it eats all memory until the process dies. commit 29a22396d7d7b1219f5b83c35983c8fb1cd79e8f Author: Adam Dickmeiss Date: Fri Oct 17 14:14:10 2003 +0000 Document -x and -k commit 4ba35f416af215511bfecb60a6c1e17d5723bddb Author: Adam Dickmeiss Date: Fri Oct 17 14:13:59 2003 +0000 Option -d to dump raw PDUs commit 668acdac33bd70daab674b47cd8654c83327e027 Author: Adam Dickmeiss Date: Thu Oct 16 10:37:06 2003 +0000 Add const to odr_perror message string commit 8195969f51aeb023710b6dd7ae39daaf7d625313 Author: Adam Dickmeiss Date: Thu Oct 16 10:18:56 2003 +0000 Fix warning commit e903da3b97a96b97de07a6a6deebf4b64d63a152 Author: Adam Dickmeiss Date: Thu Oct 16 10:18:29 2003 +0000 Remove extra ; commit 47665d5b746ad35798802738a6bb9118b8b1f20d Author: Adam Dickmeiss Date: Thu Oct 16 08:29:07 2003 +0000 Set YAZ_VERSION to 2.0.5 commit dca2c0c7693ce74885bedb35b3189173aa8a3d92 Author: Adam Dickmeiss Date: Thu Oct 16 08:27:40 2003 +0000 Compress man pages commit 88f9a8d15a81e2f425c57752047502d42b2827bc Author: Adam Dickmeiss Date: Mon Oct 13 21:28:27 2003 +0000 Towards 2.0.5. Update CHANGELOG commit fa3f53eb473b7d7cb50f83e094526dbd58cd5760 Author: Adam Dickmeiss Date: Thu Oct 9 15:51:36 2003 +0000 Towards 2.0.5 commit cfaa7c613385207003734b508b7bdff51ff90a7e Author: Adam Dickmeiss Date: Wed Oct 8 21:48:19 2003 +0000 Use new name for present-status-success commit bef6611df76c31df3c12bfe3f16084133ad5b52a Author: Adam Dickmeiss Date: Wed Oct 8 21:47:15 2003 +0000 Use bitmask for COMSTACK blocking parameter. Bit 0 (&1) controls whether socket is blocking or not. Bit 1 (&2) specifies whether reverse lookup should be performed in cs_addrstr; 0=full/slow ; 1=IP/fast. commit 64fdfaf56bcdb9144ec528f01771967f9981679f Author: Adam Dickmeiss Date: Thu Oct 2 19:47:41 2003 +0000 Remove symlinks for docbook2man. Add link for apilayer.png commit ea8a7e8ee5a459c4a995bf7d422ae2bca97c644d Author: Adam Dickmeiss Date: Thu Oct 2 06:30:45 2003 +0000 Quote ICONV_DIR/LIBXML2_DIR as suggested by Michael Freidgeim commit 34abcc554c790d1353f7ff1e7d76f223ac2c5388 Author: Adam Dickmeiss Date: Wed Sep 24 08:37:16 2003 +0000 Changes commit 0608ae655027f416c99b64e92fd468ab4d9a6c32 Author: Adam Dickmeiss Date: Tue Sep 16 20:48:28 2003 +0000 Fix rare SEGV in unix_addrstr with bad reference of UNIX socket path. commit 63f0ec14ae0d0f47e12c6fae2bfadb590ae2442a Author: Adam Dickmeiss Date: Tue Sep 16 20:15:48 2003 +0000 Changes commit 7ac44ff02a85cb8300da48bf08597af743f9b0ee Author: Adam Dickmeiss Date: Tue Sep 16 19:46:56 2003 +0000 Only C89 comments commit 0d82f249f832e8b0a6f2dc099304219e2ad29f72 Author: Adam Dickmeiss Date: Tue Sep 16 19:38:53 2003 +0000 Remove , commit ae9c5cbeb43ef0dc02d1c54d4a3b6291263a1641 Author: Adam Dickmeiss Date: Tue Sep 16 10:15:29 2003 +0000 Fix DOS format , no end of line commit f2b835100d3af6249f8659de9ecd15b5ce7446a9 Author: Adam Dickmeiss Date: Mon Sep 15 13:48:35 2003 +0000 Fix permission of postinst commit fb37a88ea31abe662d996deeeff6f2eca111f68c Author: Adam Dickmeiss Date: Mon Sep 15 12:57:29 2003 +0000 Fix permissions commit 2ba9155a6148802abc4949db2ed27a8b2934d5dc Author: Adam Dickmeiss Date: Thu Sep 11 12:45:11 2003 +0000 Reinstate THESAURUS since Elvil (better named 'evil') uses it. commit 53e939f11632e0ef384eee99983478c6bd88c7c8 Author: Mike Taylor Date: Thu Sep 11 12:30:59 2003 +0000 Reinstate VAL_SPAWN_OF_SATAN_THESAURUS since Elvil (better named 'evil') uses it commit 6aa60532542a01bfe78be0c91cbf57ce7cf851ce Author: Mike Taylor Date: Tue Sep 9 20:20:25 2003 +0000 Init diagnostics commit 58f8067bb0bac4d08b7fae8e0e93159759ce4dfa Author: Mike Taylor Date: Tue Sep 9 16:03:46 2003 +0000 When the back-end refuses initialisation, return diagnostics in a UserInfo-1 external in the Init response's User-information field, in accordance with Z35.90 Implementor Agreement 5 (Returning diagnostics in an InitResponse) at http://lcweb.loc.gov/z3950/agency/agree/initdiag.html (It's bothered me for literally about six and a half years that YAZ didn't do this -- right back to when I made the Index+/Z39.50 gateway for SSL in 1997.) commit 0b14b8e823580f06a417e38b6be7c875f3b4e5f5 Author: Adam Dickmeiss Date: Thu Sep 4 18:52:02 2003 +0000 Minor changes. Use libxml-2.5.10 commit 4acb9088c874e971fbe37f3d65ea4f47764e6219 Author: Adam Dickmeiss Date: Thu Sep 4 18:51:49 2003 +0000 Fix return of value commit e7819dea9102895078079cbf7db26a5e563463e3 Author: Adam Dickmeiss Date: Thu Sep 4 18:18:07 2003 +0000 Towards 2.0.4 commit 13cf18688ed84678703cf643bf8b140d091c226e Author: Adam Dickmeiss Date: Thu Sep 4 18:13:39 2003 +0000 Allow any CQL relation commit f06ca89e9eb0d0205a5ed97154d81e0064942d02 Author: Adam Dickmeiss Date: Thu Sep 4 17:44:49 2003 +0000 Fixes for OCLC UI ASN.1 so that it works with SilverPlatter targets too commit 4b3d1e197d75fcb2607be8d86d244f20c4180000 Author: Adam Dickmeiss Date: Tue Sep 2 12:12:12 2003 +0000 Implemented command update0 in YAZ client which is equivalent to update but uses old of Ext Update ASN.1. Use OID 1.2.840.10003.15.1000.81.1 for privately defined charsets in charset negotiation. Added VAL_ID_CHARSET in oid.h. Previously no OID was used for this info. commit 73dfa31aa3d623a2032525637ac07e78886cd4fd Author: Mike Taylor Date: Mon Aug 25 19:53:33 2003 +0000 failReason is no longer OPTIONAL, as advised by OCLC commit 83f95c956c2a3574759677b50f37e4fafb750cbf Author: Adam Dickmeiss Date: Tue Aug 19 12:32:28 2003 +0000 Use smallSetUpperBound=1 for ZOOM piggyback commit 472125ab093c3d31a28bbda92899bf8425679542 Author: Adam Dickmeiss Date: Wed Jul 30 22:33:12 2003 +0000 Fix ODR charset to use negotiated charset. Patch by Aaron Lav commit adc23cad74e4685c31fb088f84c34df347a5a6ee Author: Adam Dickmeiss Date: Wed Jul 30 11:39:45 2003 +0000 Yet one more OPAC fix commit 08ba4c2c26f2653c1e3ede909dc49bc17361ce7a Author: Adam Dickmeiss Date: Wed Jul 30 10:00:27 2003 +0000 Fix missing element, duplicate element commit a13492cef8a221e561ce1aa61865f03585e23799 Author: Adam Dickmeiss Date: Wed Jul 30 08:57:34 2003 +0000 OPAC record fixes commit 03c4f31ffb1a8a3c31d82dba28de87eb5b82ebd3 Author: Adam Dickmeiss Date: Tue Jul 29 15:09:19 2003 +0000 More ZOOM logging commit f9536e142ac3a38116fae114ab2f832b4cb58da1 Author: Adam Dickmeiss Date: Tue Jul 29 15:08:28 2003 +0000 Missing z-oclcui.h in _headers commit fed4c59a3c26f04ba3764947aa2f7ecdd9b46889 Author: Adam Dickmeiss Date: Fri Jul 25 11:11:19 2003 +0000 Change order of compilation to reflect Unix AM. commit 6164387805efc64a201204fa81e531a201d77014 Author: Mike Taylor Date: Thu Jul 24 09:44:52 2003 +0000 Fix the OID of "admin" extended service. Swap the human-readable text corresponding to the CQL and OCLC-userInfo OIDs, which had somehow got confused. Bring the CHANGELOG up to date with these and other changes. commit b258a14997c70bf78310b2e094eb6bcf14b26a55 Author: Mike Taylor Date: Wed Jul 23 12:57:22 2003 +0000 Note incorrect ID-private OID for VAL_ADMINSERVICE commit 94c77ca831e55b3dee31184347f25dd0583085d2 Author: Mike Taylor Date: Wed Jul 23 12:07:30 2003 +0000 Note incorrect ID-private OID for VAL_ADMINSERVICE commit 8edb56d9b3ffbf66b0d022b69fb926edb624535a Author: Adam Dickmeiss Date: Sat Jul 19 13:48:49 2003 +0000 makefile updated for oclcui.asn commit 0442642bb213139271943552e5c1bc731ee96872 Author: Mike Taylor Date: Fri Jul 18 22:41:25 2003 +0000 Tidy up debugging output commit 759184a854d23a99ca8ac0d401d5e3886cfde45b Author: Mike Taylor Date: Fri Jul 18 22:36:39 2003 +0000 Tweak as dictated by Adam, who is much better at reading packet dumps than I am :-) OCLC should be ashamed of themselves, sending ASN.1 that bears so very little resemblance to what they document! commit 5381b2f81bb793e364cd5b2a910e026ce84d9d05 Author: Mike Taylor Date: Fri Jul 18 19:54:30 2003 +0000 Support for the UserInformation DPU OCLC-UserInformation: - Add VAL_OCLCUI to oid.h - #include in include/yaz/proto.h - #define Z_External_OCLCUserInfo in include/yaz/prt-ext.h - Add Z_OCLC_UserInformation *oclc branch to Z_External.u - Add "OCLC-userInfo" entry to OID database in util/oid.c - New file "oclcui.asn" in z39.50 directory - Mention "oclcui.asn" and "z-oclcui.c" in z39.50/Makefile.am - Add VAL_OCLCUI registration in z39.50/prt-ext.c - Add arm to union-database in Z_External() in z39.50/prt-ext.c - Include UserInfoFormat-oclcUserInformation in z39.50/z.tcl (This is a handy checklist next time I need to add something.) More verbose authentication-setting in command-line client. Temporary debugging code in client (for OCLC diagnostics). commit d3f87757eae53fd87d2e3e48a392a9e06872f71b Author: Mike Taylor Date: Fri Jul 18 19:53:28 2003 +0000 Support for the UserInformation DPU OCLC-UserInformation: - Add VAL_OCLCUI to oid.h - #include in include/yaz/proto.h - #define Z_External_OCLCUserInfo in include/yaz/prt-ext.h - Add Z_OCLC_UserInformation *oclc branch to Z_External.u - Add "OCLC-userInfo" entry to OID database in util/oid.c - New file "oclcui.asn" in z39.50 directory - Mention "oclcui.asn" and "z-oclcui.c" in z39.50/Makefile.am - Add VAL_OCLCUI registration in z39.50/prt-ext.c - Add arm to union-database in Z_External() in z39.50/prt-ext.c - Include UserInfoFormat-oclcUserInformation in z39.50/z.tcl (This is a handy checklist next time I need to add something.) More verbose authentication-setting in command-line client. Temporary debugging code in client (for OCLC diagnostics). commit aeb5cc9755e2e4d6a788f0bf162017215772cbf8 Author: Adam Dickmeiss Date: Wed Jul 16 21:02:05 2003 +0000 Set resultCount to 0 in sort handler of frontend server commit 45b64d66df5092f645ce3eb5b979e28d16ed0b07 Author: Adam Dickmeiss Date: Tue Jul 15 08:26:26 2003 +0000 opacdisp.obj commit 6607d0bd04b26591614a84a9aa9bad7e7b00e7e9 Author: Adam Dickmeiss Date: Mon Jul 14 12:59:22 2003 +0000 OPAC record support for ZOOM commit 9360e7e7d56e77fb1253faa1232c0417cd5d3ee3 Author: Adam Dickmeiss Date: Mon Jul 14 12:58:18 2003 +0000 New utility wrbuf_xmlputs commit e1efa4cdf426e7eb952584ed4b9d3b818c8ff070 Author: Mike Taylor Date: Fri Jul 11 09:51:13 2003 +0000 Add documentation for oid_name_to_oid(), oid_to_dotstring() and oid_name_to_dotstring() commit bfad6661c8f3102304f1d79ed0ba2ff9aee2031b Author: Mike Taylor Date: Fri Jul 11 08:13:17 2003 +0000 New OID-translation functions commit 6636ca51def4b3e20a12505812397df355e2dfa2 Author: Adam Dickmeiss Date: Thu Jul 10 20:55:11 2003 +0000 Revert z_IU0Update changes in z3950v3.asn. commit 3d47aeca3756dc7d1c2ea91f74fef2b0886f76e8 Author: Mike Taylor Date: Thu Jul 10 11:51:46 2003 +0000 Add oid_name_to_oid(), oid_to_dotstring() and id_name_to_dotstring() commit b0555501e434d0f71f97ea17f282db2e795ff950 Author: Mike Taylor Date: Thu Jul 10 11:50:32 2003 +0000 Remove the oid_name_to_dotstring() function, which is now in oid.c (with a somewhat modified interface). Change the invocation to use the new thread-safe interface. commit c12f2351ad72e5e4788f30684de0d98e5bc0dc1e Author: Mike Taylor Date: Wed Jul 9 23:00:21 2003 +0000 display_records() now displays the record syntax OID as well as its symbolic name. It does this using a new utility function, oid_name_to_dotstring(), which is currently file-static but should probably go into the oid.c module. commit cf273cb8a7f73124935713928cd5df5b537f8b9c Author: Mike Taylor Date: Wed Jul 9 22:38:12 2003 +0000 Fix description of ZOOM_record_get("syntax") commit 4e738d9131106878f8b560e53034241db99d6099 Author: Adam Dickmeiss Date: Tue Jun 24 23:03:04 2003 +0000 Move ccl_pquery to ccl module (ccl.h). Add proper CCL test. commit 3cc234c5828fe21164f578848e6c32a0b1e09778 Author: Adam Dickmeiss Date: Mon Jun 23 12:42:14 2003 +0000 Another CCL->RPN fix. commit f4f32744882a4da78763956d1d363ea20a6bb471 Author: Adam Dickmeiss Date: Mon Jun 23 12:41:44 2003 +0000 Another CCL->RPN fix commit 1528b5eb5d95e8a0cb788b30af87178ca6534cf9 Author: Adam Dickmeiss Date: Mon Jun 23 12:38:39 2003 +0000 Fix CCL->RPN code for attribute strings. commit 7a7b5bfb988286089e1fbd498a8cfc4d2a5799e0 Author: Adam Dickmeiss Date: Mon Jun 23 10:24:00 2003 +0000 Debian release commit 79135288365437a3b1ee89ba36059dcec9f52a70 Author: Adam Dickmeiss Date: Mon Jun 23 10:22:21 2003 +0000 String attributes for CCL parser commit 4fa3973d89505116482232547bdeede84675f535 Author: Adam Dickmeiss Date: Sun Jun 22 11:48:33 2003 +0000 Fix compile warnings commit 88a38d975d021383194f2ec2a4e5a9b55decd21a Author: Adam Dickmeiss Date: Sun Jun 22 11:47:18 2003 +0000 Fix compile warnings commit 6f67e2799f0658a6abe374a3f31b7ec4810d65f0 Author: Adam Dickmeiss Date: Fri Jun 20 11:14:47 2003 +0000 documentation was part of libyaz; it must only be part of yaz-doc commit 96213b68ef6504b66a69e7167f23e7b549c4e832 Author: Adam Dickmeiss Date: Fri Jun 20 10:23:15 2003 +0000 Debian date update commit aaa38e89fd07e2bb5b0c0941af6bb4bc5553350a Author: Adam Dickmeiss Date: Fri Jun 20 10:21:49 2003 +0000 Changes. commit 6a26b59bc0d1b1181eec45a037b520f9f16ea304 Author: Adam Dickmeiss Date: Fri Jun 20 10:21:20 2003 +0000 Changes commit 2b63bef2ba80986b0d0431edddfa662580734897 Author: Adam Dickmeiss Date: Fri Jun 20 10:18:05 2003 +0000 More on CCL profiles commit 73f8c92214bd7afdb0e465dec053272130b53bb5 Author: Adam Dickmeiss Date: Thu Jun 19 23:05:29 2003 +0000 More on CCL profiles commit 985066ac6dfae6ac68960044fa05b4f7ea782b86 Author: Adam Dickmeiss Date: Thu Jun 19 21:10:03 2003 +0000 client does not close socket if decoding of PDU failed commit 594abeca3faac015a41b74ea9ee00df8708cf97f Author: Adam Dickmeiss Date: Thu Jun 19 21:09:25 2003 +0000 More printing for odr_perror commit 484fb80d9d457cb1d2967e0af0c4b88008bec79e Author: Adam Dickmeiss Date: Thu Jun 19 19:51:40 2003 +0000 Fix CCL directive @case handling so that it affects both keywords and qualifiers. commit 6eadf7b292a2375dde584cb876e3c9741c63d1de Author: Adam Dickmeiss Date: Wed Jun 11 18:37:10 2003 +0000 Dont use charconv_cjk.xml commit 84049ee5c6f284d80f72eba941307a0a2a7a6dbb Author: Adam Dickmeiss Date: Wed Jun 11 18:36:57 2003 +0000 Option -x shows hex dump of PDUs commit 7a0bd77bddcc803e5af23842dfd7fc83f02420f7 Author: Adam Dickmeiss Date: Wed Jun 11 11:09:22 2003 +0000 do not use charconv_cjk as is commit 0fffcb9ad658a63888678e2c7ca3e5cba9ca6a2c Author: Adam Dickmeiss Date: Tue Jun 10 11:24:03 2003 +0000 libyaz-dev depends on libxml2-dev commit 4c6462484342ee50f5d26f9fb3a625481b3d5bba Author: Adam Dickmeiss Date: Wed Jun 4 13:28:36 2003 +0000 Towards 2.0.3 commit 97e4d969c386e27b6a743fdf4c8d891170b8900a Author: Adam Dickmeiss Date: Wed Jun 4 13:25:37 2003 +0000 Added pop, pieter commit 9a8d8a211ddaa44211702d8cfcfefcdcbcf6276a Author: Adam Dickmeiss Date: Wed Jun 4 09:45:00 2003 +0000 Allow number of iterations to be specified for cql2pqf commit 9c27c751063dfcb13208f2ddc9bf3151a62c0794 Author: Adam Dickmeiss Date: Wed Jun 4 09:44:05 2003 +0000 Prevent memory leak if cql_parse is called repeatedly commit 2d3963fa7fe0f9f55d2f92e11ce03c5c9619de6c Author: Adam Dickmeiss Date: Wed Jun 4 09:15:40 2003 +0000 On the form[; charset=from[,to]] topic. commit ee083e1994e399ceb209780ff4bce7168c8bc82b Author: Adam Dickmeiss Date: Tue Jun 3 13:59:28 2003 +0000 Set smallSetElementSetName always in piggyback mode commit 790b75a5d95551b519aba2fd3a1f95cdac08c406 Author: Adam Dickmeiss Date: Tue Jun 3 09:17:12 2003 +0000 MARC-8 Asian, etc. commit fa81887b7cffa038fd4b0a4577d2071bd9a3cad0 Author: Adam Dickmeiss Date: Tue Jun 3 09:11:13 2003 +0000 WIN32 updates commit 31fc3893f4ee8cd8851ffdccf8a510d3cb4c3f59 Author: Adam Dickmeiss Date: Mon Jun 2 22:17:20 2003 +0000 charconv takes multiple input files commit cbdc36676c2e563581f4db76d976093429372db6 Author: Adam Dickmeiss Date: Mon Jun 2 13:44:54 2003 +0000 Added cqlstrer to win makefile commit 0e96e3780fe77ed9f8bd78245b9e9a8a42c0892d Author: Adam Dickmeiss Date: Mon Jun 2 12:53:27 2003 +0000 ESFormat-Update updates. Character set conversion for ZOOM_record_get. commit 77ad18d6eceea270338ae338f1e7d24f1003df24 Author: Adam Dickmeiss Date: Fri May 30 10:31:29 2003 +0000 Documentation for recordCharset commit 660689d0e3d249b5d6c10fa695e621ec5b8e36a9 Author: Adam Dickmeiss Date: Fri May 30 10:24:58 2003 +0000 Implemented ZOOM option: recordCharset commit 103dc949161eb23f38ee58cffcf8f039ef679cb8 Author: Adam Dickmeiss Date: Tue May 27 21:44:10 2003 +0000 Change to yaz-asncomp commit 3aa7b8fdff94c15c0c74ce809828dfb642696418 Author: Adam Dickmeiss Date: Tue May 27 21:42:45 2003 +0000 reordered tstodr_SOURCES commit 92887fb8af4d8697f6569d6a6756860fea5f4b84 Author: Adam Dickmeiss Date: Tue May 27 21:12:22 2003 +0000 YAZ ASN.1 compiler renamed from yaz-comp to yaz-asncomp commit 207401f82e01f380a3549fe5576069ac4b45331e Author: Adam Dickmeiss Date: Tue May 27 12:45:23 2003 +0000 Manual page for yaz-comp commit 087aa6548dbee815eed2e6bad4c5b105c35391cb Author: Mike Taylor Date: Tue May 27 09:52:38 2003 +0000 Describe cql_strerror() commit cf06b3dea55efd44a2568ac52a089a4c935743bb Author: Mike Taylor Date: Tue May 27 09:48:24 2003 +0000 Ignore tstodrcodec.[ch] commit 7e821ac84c016b3f4b8eed893c421b7adccaac8d Author: Mike Taylor Date: Tue May 27 09:47:15 2003 +0000 Add cqlster.c which provides cql_strerror() commit 35d8c5921e8b1cd89e52aa6bf71e0a9bf6e3471a Author: Mike Taylor Date: Tue May 27 09:46:26 2003 +0000 Add declaration of cql_strerror() Remove comment listing error-values, since the same information is now included in the cql/cqlstrer.c source file. commit 9ce28b253ce25d58c8f29228ae4573a1b8a8616a Author: Mike Taylor Date: Tue May 27 09:43:59 2003 +0000 tweak commit 7453b811c6086b24a0362509f38169ed42044016 Author: Mike Taylor Date: Tue May 27 09:42:08 2003 +0000 Better error reporting for CQL-to-RPN conversion failure commit 72d7fa413a2305be8626fcb3f6041bea959fc262 Author: Adam Dickmeiss Date: Mon May 26 20:09:01 2003 +0000 Special socklen_t check for AIX commit f6d688ae469ebf296b5fe6748e9b77be902e81da Author: Adam Dickmeiss Date: Mon May 26 13:47:23 2003 +0000 Use odr_getelement instead of odr_getaddinfo commit 32882a6e0491347b494586011a5df7bfadbc6675 Author: Adam Dickmeiss Date: Mon May 26 13:36:48 2003 +0000 Make MAC OSX gcc more happy commit 72a7de6dfe07d7079de3c287aecdeb0f164c78b8 Author: Adam Dickmeiss Date: Mon May 26 11:35:46 2003 +0000 Fix type of len var commit 0d628aff81afe450e3aeb2792b888b14e74254f2 Author: Adam Dickmeiss Date: Sat May 24 19:34:43 2003 +0000 added type cast to avoid warning commit 9308df890c3c8a5e668558487a138696996893aa Author: Adam Dickmeiss Date: Sat May 24 19:25:24 2003 +0000 Spelling. commit 39fc6d5c771c134df959cdd44b2ad62d07b9576f Author: Adam Dickmeiss Date: Sat May 24 19:20:14 2003 +0000 odr_getelement / odr_setelement commit 7aa202b31ec22a71d9c66f4602bf5ec60785c754 Author: Adam Dickmeiss Date: Fri May 23 10:41:26 2003 +0000 WIN32 updates commit e86e4e21d03623a97e7976fe737cb9644926ca54 Author: Adam Dickmeiss Date: Fri May 23 08:52:35 2003 +0000 Compilation now works again commit dd8e61419f08a386271a8e308141aab8131b27f6 Author: Mike Taylor Date: Fri May 23 00:24:04 2003 +0000 Document yaz-client's CQL2RPN query-type, the set_cqlfile command and the -q command-line options commit ad3b59f8c9beb50bd19cf7267479ad78eefe3fca Author: Mike Taylor Date: Thu May 22 23:55:19 2003 +0000 Set the default CQL qualifier file to /usr/local/share/yaz/etc/pqf.properties (How can I set it to look wherever YAZ is installed?) Refuse to do CQL2RPN queries if no valid CQL qualifier file has been set. commit 6d01d7cb60123e1e00db766198edc3ba8488d0ba Author: Adam Dickmeiss Date: Thu May 22 22:44:50 2003 +0000 Fix MARC8 conversion commit f98330f4a395ec9f830c39b4a4eb4e523bc0c796 Author: Mike Taylor Date: Thu May 22 22:32:08 2003 +0000 Fix to install XSLs and pqf.properties commit 07a80eea989576eaa13633f4e96e57e14b40ea0f Author: Mike Taylor Date: Thu May 22 17:01:33 2003 +0000 Support for a new queryType, CQL2RPN, which allows the user to provide queries in CQL and transforms them into Type-1 queries. This should allow CQL to be used against any server rather than just the tiny proportion that support native CQL queries. Also added set_cqlfile command (analogous to set_cclfile). commit 4ab240934731700f437e2bf8cb695e4b5fc9c0dc Author: Mike Taylor Date: Thu May 22 16:57:28 2003 +0000 Add documentation for CQL->RPN transformation's error-reporting commit 6dc4539f74395fa8f95596263d86edc1281bc399 Author: Heikki Levanto Date: Thu May 22 15:41:58 2003 +0000 Fixed a silly typo commit c39a893dfdae5f792139177132e7e7a70e010aa7 Author: Heikki Levanto Date: Thu May 22 13:15:07 2003 +0000 Defined log level bits app2 and app3 commit d0e56fdb958b43316f5ebffddd7f9dd8480978f8 Author: Marc Cromme Date: Thu May 22 11:20:54 2003 +0000 redhat package version 2 now commit a54c709b3e2feff5762bfa7dfa8ee653b429d369 Author: Adam Dickmeiss Date: Tue May 20 20:33:29 2003 +0000 Fix comments commit eeb13f1ab726d5437a76bcc92927d7d756949821 Author: Adam Dickmeiss Date: Tue May 20 20:22:11 2003 +0000 Show ODR error addinfo commit 4157c704e5b89d5cba0cb39937c6d4c697f3b0b0 Author: Adam Dickmeiss Date: Tue May 20 20:21:34 2003 +0000 Further ODR tests commit ec1f815d5348cd21e393f76bc212c910c34bbc45 Author: Adam Dickmeiss Date: Tue May 20 19:55:29 2003 +0000 Better ODR diagnostics for missing elements which includes additional info with name of element. New ODR function odr_missing. Removed depricated macros odr_implicit and odr_explicit. commit 05d1794c4ac57eabe6f6da766156f6986d5c987c Author: Adam Dickmeiss Date: Tue May 20 19:50:12 2003 +0000 Indentation commit 3f7b54230a51be797c9439b091aa59133da16732 Author: Adam Dickmeiss Date: Tue May 20 17:22:54 2003 +0000 Indentation commit ccb068efa655ace7835a122c1226356f2f933992 Author: Adam Dickmeiss Date: Tue May 20 08:22:32 2003 +0000 ZOOM option: step. More verbose GFS SRW server display commit 6aa7edbd02f5e6667921b62f145c909639d3a985 Author: Adam Dickmeiss Date: Mon May 19 20:45:52 2003 +0000 Changes. SRW support. charset fixes for yaz-client commit efda1a40ecc4cb16b0073a2b8a895ad28d5bfe4e Author: Adam Dickmeiss Date: Mon May 19 20:45:07 2003 +0000 charset/marccharset commands. SRW stuff commit 1f7d2e9faf6827f8890750cc1a404d119101c073 Author: Adam Dickmeiss Date: Mon May 19 20:44:33 2003 +0000 charset updates. Option -V to show version commit 94f604cea006e77285967d3e2f8a2ee32db7c434 Author: Adam Dickmeiss Date: Mon May 19 14:37:38 2003 +0000 odr_set_charset: allow to==from==0 to disable charset conversion commit c94e1ffb5944f018ec8e0a2f4549698872eab3ab Author: Adam Dickmeiss Date: Sun May 18 22:27:07 2003 +0000 Fix comment commit 5ea26f86eb5559d0b3ee8a96d1a3823f944a71a3 Author: Adam Dickmeiss Date: Fri May 16 14:39:57 2003 +0000 Mention GNU Bison on Windows installataion commit 9836663e7961c0354c510c278704efbab510bcff Author: Adam Dickmeiss Date: Fri May 16 13:14:26 2003 +0000 xmalloc trace fix for 64-bit systems such as DEC alpha. commit fd17207804a1ec0a27a86f0408674bb57f6c38b0 Author: Adam Dickmeiss Date: Wed May 14 22:31:52 2003 +0000 Fix last event setting. commit ceed5c63f84186abab20234590548ac041ba0f84 Author: Adam Dickmeiss Date: Wed May 14 21:12:41 2003 +0000 Updated yaz.7 page commit 824610960108c45109bf8f458289b281a17db264 Author: Adam Dickmeiss Date: Wed May 14 20:58:07 2003 +0000 Fix setting of last event# commit 2703ec73c9d338d55387ec3f787d0a7f30289cff Author: Adam Dickmeiss Date: Wed May 14 13:49:02 2003 +0000 Set permissions to 0777 for unix file socket commit 125af6f8db172ec8fd4c24dfe6f6ebeca49afacb Author: Adam Dickmeiss Date: Tue May 13 14:21:13 2003 +0000 Use YAZ_SOCKLEN_T instead of socklen_t commit f2dae7dadb188781bccd59c8994da0a7546c96a3 Author: Adam Dickmeiss Date: Mon May 12 22:38:40 2003 +0000 Mention http scheme commit 36e5387cdd76faccc5ebaacb657311a9d6314863 Author: Adam Dickmeiss Date: Mon May 12 22:37:56 2003 +0000 Minor change of def of EXTRA_DIST commit 83b766f076b18584868172bdb98e9584556d145a Author: Adam Dickmeiss Date: Mon May 12 22:36:10 2003 +0000 Omit print for XML data commit 0cae96a10e8393acabad6b07c9456d9f6175d0ff Author: Adam Dickmeiss Date: Mon May 12 22:35:06 2003 +0000 Fix handling of HTTP error. Dont print details when omitted commit f17b1db33f969f735f308aa639c17488f82793d0 Author: Mike Taylor Date: Mon May 12 13:34:00 2003 +0000 move description of databaseName option to the Connection section commit 233020e68e58b86aaed62598408a42ae5a27eabc Author: Adam Dickmeiss Date: Tue May 6 13:09:15 2003 +0000 Fix check commit 0d224465e46c5886cfdd5002b34cd3b239043fb5 Author: Adam Dickmeiss Date: Tue May 6 12:09:10 2003 +0000 Call automake twice to avoid missing depcomp commit 84f723fa43e53cdf8e485f2fa51be1550d97c63b Author: Adam Dickmeiss Date: Tue May 6 12:07:33 2003 +0000 Remove fix for missing depmod in Makefile commit f2428de7b5d72877c544d9812513fe465a1c75a6 Author: Adam Dickmeiss Date: Tue May 6 11:51:23 2003 +0000 Add include of yaz/yconfig.h commit 20268c3c0fbcabb3696d4cefcb8b0a84598ed9f0 Author: Adam Dickmeiss Date: Tue May 6 11:37:18 2003 +0000 Fix for missing depcomp commit b2efa1743e712eb8d713ff1b934a09cc19b35a55 Author: Adam Dickmeiss Date: Tue May 6 10:08:30 2003 +0000 New test for ODR. Demonstrates the use of small ASN.1 spec too. commit 41339c1f027372b433ed120569726f5448e558eb Author: Adam Dickmeiss Date: Tue May 6 10:07:33 2003 +0000 New tests. commit 2bf8ed1f3c0b77636bdfd37040afb97c54a7098a Author: Adam Dickmeiss Date: Tue May 6 10:06:43 2003 +0000 Include of odr.h does not use -i value. Always set to . commit d99be352be2b2e14fe66e6010dd89919d36f7d98 Author: Mike Taylor Date: Fri May 2 23:25:38 2003 +0000 ignore yazhtml.xsl commit 8bccad6217bd2ba078106a531a9e73e7f3aae4a9 Author: Mike Taylor Date: Fri May 2 09:23:26 2003 +0000 new file commit 006c3df264a95c03bfc557b2004595fc6cc3ee14 Author: Mike Taylor Date: Fri May 2 09:22:43 2003 +0000 ignore cql2pqf and cql2xcql commit e12c24b8e658bad4cca7a278a7ece7badc9d801d Author: Adam Dickmeiss Date: Thu May 1 07:49:26 2003 +0000 Removed cql.h from sources commit 4cb6a603653bf01c51ec6917573882215f817592 Author: Adam Dickmeiss Date: Wed Apr 30 14:04:45 2003 +0000 SRW fixes commit 1f64e3fdaa206ccd31cc4c007a1a2ee119c718eb Author: Adam Dickmeiss Date: Tue Apr 29 22:00:47 2003 +0000 yaz.7 moved from yaz to libyaz. commit 7e123f0a39a7e7f22e1d0fda5870ff7b6239c542 Author: Adam Dickmeiss Date: Tue Apr 29 21:53:54 2003 +0000 Database setting for SRW. Minor updates in messages commit bc9920b48da91d87e1c0e033a9151663998d6b6b Author: Adam Dickmeiss Date: Tue Apr 29 21:20:33 2003 +0000 Fixed a few warnings on non-libxml2 systems commit ec5e5849731e21b5cf0a5cb3fbe01d9c8c2c8c89 Author: Adam Dickmeiss Date: Tue Apr 29 21:13:08 2003 +0000 Proper ifdefs for non-libxml2 systems commit 04554076c032387b85ca7c9017d724b875e7766f Author: Adam Dickmeiss Date: Tue Apr 29 21:04:46 2003 +0000 SRW support for YAZ client commit a20386067416654230dd519fcd6e804520a23a2f Author: Adam Dickmeiss Date: Tue Apr 29 09:54:39 2003 +0000 Remove shlibs:Depends from yaz commit a4500a53ecbff46db730bcaa8703d2c9a0e6328b Author: Adam Dickmeiss Date: Mon Apr 28 21:02:14 2003 +0000 Towards 2.0.2 commit 3b10b3e056bb684b8f33123a79410f771adbee0a Author: Adam Dickmeiss Date: Mon Apr 28 11:04:51 2003 +0000 New ZOOM events ZOOM_EVENT_RECV_{RECORD,SEARCH} for receiving a record and search result respectively. commit c94a281b8f4d13dd8bb6df48ce3f925aad1bb600 Author: Adam Dickmeiss Date: Fri Apr 25 16:17:21 2003 +0000 libyaz does not depend on readline; yaz does (programs) commit 6b00e2dfd3546994abd3461464e564bedbe89f0e Author: Adam Dickmeiss Date: Thu Apr 24 20:38:08 2003 +0000 Release 1 commit 038665b6acb32a83cc1bb8395b83a0cf3c0cc38d Author: Adam Dickmeiss Date: Thu Apr 24 20:36:33 2003 +0000 Debian changelog commit ea1b96d754d0d7dc38ce3ce18a03824e1d9516cd Author: Adam Dickmeiss Date: Thu Apr 24 20:01:45 2003 +0000 Morten B. commit 12894b89898e9cdc4d171354f5454a624dbb80a8 Author: Adam Dickmeiss Date: Thu Apr 24 20:00:15 2003 +0000 version update commit 06e73cb9f6d59fc7a38f17636016f2daaed02548 Author: Adam Dickmeiss Date: Thu Apr 24 13:30:31 2003 +0000 For GFS: schema for bend_fetch; displayTerm for bend_scan. commit a36034d54bb308f3697df4b2702ea7f35ac636c6 Author: Adam Dickmeiss Date: Thu Apr 24 13:29:50 2003 +0000 Doxyfile part of make dist commit 840eb96a9f6989642b09c1f6fc4e92650fa991e6 Author: Adam Dickmeiss Date: Thu Apr 24 13:05:04 2003 +0000 Remove unused vars commit 4b849a9cafeb427c261a7f0e52d28edd3043ae27 Author: Adam Dickmeiss Date: Thu Apr 24 13:04:45 2003 +0000 Work on chunkced encoding commit f781ff13f9443a58e5eae30182e508df9dfe9555 Author: Adam Dickmeiss Date: Thu Apr 24 12:48:47 2003 +0000 Work on bug 24 commit 3dff993190eac9ccb1e9e8f681312493bdaf2fb9 Author: Adam Dickmeiss Date: Wed Apr 23 20:39:25 2003 +0000 Allow for quoted tokens in ZOOM shell commit 15715e1bb3a298a1894d2b680f5b132506313692 Author: Adam Dickmeiss Date: Wed Apr 23 20:38:19 2003 +0000 For ItemOrder, result set is unset if itemorder-setname is empty. Set HTTP header "host" in order to be HTTP/1.1 compliant. commit f8deda70a12072b9d0d7eb488a5f26631401c5f3 Author: Adam Dickmeiss Date: Wed Apr 23 20:36:05 2003 +0000 Indentation commit 38d29054baec012561d8a69ade2a55d6bee22c00 Author: Adam Dickmeiss Date: Wed Apr 23 20:34:08 2003 +0000 Test cases for nmem, iconv commit 9ef544523c1dc964401a8227dd784add479900fd Author: Marc Cromme Date: Wed Apr 23 12:56:05 2003 +0000 Doxyfile added for html-documentation generation commit d7e3f387cddf4ac8dee3ca0d90992d052834da95 Author: Adam Dickmeiss Date: Wed Apr 23 12:31:07 2003 +0000 Prepare for OPAC display commit b68205c92a959a871bc669606a64e0739b6513b9 Author: Adam Dickmeiss Date: Fri Apr 18 17:14:46 2003 +0000 Note about debian version commit beacc736e6a2c5f94c1ddf7e0544ef0dcca43b9b Author: Adam Dickmeiss Date: Fri Apr 18 15:11:58 2003 +0000 Changes commit 98423c2327870156c36dfe479746f541ee244ef2 Author: Adam Dickmeiss Date: Fri Apr 18 15:11:04 2003 +0000 default recordPacking is xml for SRU, string for SRW commit e6280ccfa52d2ffc28b3e879377b934faff2b350 Author: Adam Dickmeiss Date: Thu Apr 17 23:25:43 2003 +0000 Delete unused make var YAZ_VERSION commit 91d7176944dd2f5a42856ee97cd793d33f429cd0 Author: Adam Dickmeiss Date: Thu Apr 17 23:24:00 2003 +0000 Set LDFLAGS per library to avoid warning for newer libtools commit 1848aa2ce3860c97777343e0f0f509f6c831f016 Author: Adam Dickmeiss Date: Thu Apr 17 19:43:41 2003 +0000 recordPacking for ZOOM commit cd28165182813f5ed046a6ba44c7d13f46bdaca9 Author: Adam Dickmeiss Date: Thu Apr 17 19:43:32 2003 +0000 recordPacking for SRW commit 9241daf8b3104b67b2801872d0e07d6762f78b47 Author: Adam Dickmeiss Date: Thu Apr 17 06:06:49 2003 +0000 .la files part of RPM commit 9863871f229898036fae7c37735be44fa4b3c516 Author: Adam Dickmeiss Date: Mon Apr 14 17:02:12 2003 +0000 Use Log instead of Id commit 66ebb9d692735cc0b3b903c999dd225af2e2a08c Author: Adam Dickmeiss Date: Mon Apr 14 16:57:58 2003 +0000 Add include of string.h commit 712de175de28e9977ead36d1cdd877993b008d09 Author: Adam Dickmeiss Date: Mon Apr 14 16:52:10 2003 +0000 Fix another bug in lexer commit ad1c6ee16cd9f697abebffbd241d92ec89de5550 Author: Adam Dickmeiss Date: Mon Apr 14 15:40:03 2003 +0000 Fix bug with unset member of lex token commit 64faa24c05370c37816d4da5666120d65051ae9a Author: Adam Dickmeiss Date: Fri Apr 11 23:29:12 2003 +0000 EXPORT LanguageCode and Segment commit 2a8b6ee438067fd3cc2f85685b727d726136bfb8 Author: Adam Dickmeiss Date: Fri Apr 11 15:53:39 2003 +0000 Fix CQL lex buffer overflow. commit c7eb63e9060187fbba904c3da9697ff85f919af4 Author: Mike Taylor Date: Thu Apr 3 21:01:28 2003 +0000 Remove the Satan-spawn attribute VAL_THESAURUS commit 2280b039756aa1c891f0017d2a62d737dd6d4f00 Author: Adam Dickmeiss Date: Tue Mar 25 09:58:13 2003 +0000 AM_MAINTAINER_MODE commit 712226031c16536696c809523899e163471c6256 Author: Adam Dickmeiss Date: Tue Mar 25 09:57:26 2003 +0000 2.0.1 commit 74c32327950450b02892297f350eaff41212fc18 Author: Adam Dickmeiss Date: Tue Mar 25 09:55:11 2003 +0000 Fix non-XML compile commit 6bffc65936ba634077acb9f42ace217bc4737539 Author: Adam Dickmeiss Date: Mon Mar 24 22:26:50 2003 +0000 SRU/SRW Explain for Frontend server commit a834d92665e792c011e86d5603968ab31237575a Author: Adam Dickmeiss Date: Sun Mar 23 20:27:16 2003 +0000 SRW/SRU explain commit fe0db3ff0fad9d7d6bc043f7f6fd719262cd242e Author: Adam Dickmeiss Date: Fri Mar 21 10:48:11 2003 +0000 Only make ln -s when link does not yet exist commit d21f71aa7f9d30fdf457c58e7403723415506c1e Author: Adam Dickmeiss Date: Thu Mar 20 21:15:00 2003 +0000 SRW/SRU recordPacking commit c9fb3990d5713cac63c4b0d42a7eb7a66833ac75 Author: Adam Dickmeiss Date: Wed Mar 19 09:45:55 2003 +0000 Fix uninitialized var type_and_host commit 6a9f385c94281b3dbddd612f388837c01661c5c5 Author: Adam Dickmeiss Date: Tue Mar 18 13:34:35 2003 +0000 SRU support for frontend server commit 1e5554fc59c8cad2105b2a8cf095d13315dc6ed1 Author: Adam Dickmeiss Date: Tue Mar 18 13:30:21 2003 +0000 More on supported platforms commit 28ffcea180902ce2e8bf3eac92f49a1ba20d25d1 Author: Adam Dickmeiss Date: Tue Mar 11 21:47:00 2003 +0000 Add dependency commit e3c167e9a52717c346a93e1425575996a044d0d0 Author: Adam Dickmeiss Date: Tue Mar 11 21:19:16 2003 +0000 Updated TODO commit a7ecfb67151880d21a11bcb25bbc26269461b5ac Author: Adam Dickmeiss Date: Tue Mar 11 21:19:09 2003 +0000 Modular RPM Package commit 81afb524fb5c2d761d37853f4182fca4567cd2fd Author: Adam Dickmeiss Date: Tue Mar 11 11:09:17 2003 +0000 SRW character set handling commit 327abf4adcf732bcc8818f9b35ba366db6085d2a Author: Adam Dickmeiss Date: Tue Mar 11 11:07:47 2003 +0000 Minor updates/cleaning. New option -b to dump BER commit adcb574176dc52cce8ee299507da91228e2afc1b Author: Adam Dickmeiss Date: Tue Mar 11 11:06:35 2003 +0000 New tool for ODR testing. commit 30de094a4a567f7fada6d5932e23921770ac671c Author: Adam Dickmeiss Date: Tue Mar 11 11:05:19 2003 +0000 New function cs_get_host_args for method/host/path parsing. commit b75023664b529d1cd0dccac2deae78ddbd681369 Author: Adam Dickmeiss Date: Tue Mar 11 11:03:30 2003 +0000 Fixes for random/hostile BER. commit f7a92e6551774dcac7bc5d5158c0e76364944a28 Author: Adam Dickmeiss Date: Mon Mar 10 16:11:32 2003 +0000 yaz-devel recommends libxml2-dev commit 4115b78fa9956fa4b594aec7c7792e18bf1e1542 Author: Adam Dickmeiss Date: Fri Mar 7 08:39:40 2003 +0000 Fixed xref commit ba8d526ec24077c455979314147aaff20746a8ca Author: Adam Dickmeiss Date: Mon Mar 3 19:57:35 2003 +0000 Fixed warnings. Updated headers commit 27a018d8464d3e35bde108f171b48a2ea1eede39 Author: Adam Dickmeiss Date: Sun Mar 2 15:34:51 2003 +0000 Remove redundant include path commit 9dcf8b86675f48ecc89588960ec2b7a785aa05bc Author: Adam Dickmeiss Date: Fri Feb 28 15:59:02 2003 +0000 database case insensitive commit 6cb2907ac3f225846d8deaa0aea4772e539617cd Author: Adam Dickmeiss Date: Thu Feb 27 19:56:00 2003 +0000 truncation=CCL commit a66975fb6d7c8877a2eaa3861aaeb4952d398d7d Author: Adam Dickmeiss Date: Thu Feb 27 19:55:37 2003 +0000 cql available in yaz-client commit 66d1e9b0dee9593f80022dcc3a30dab627f7b0bf Author: Adam Dickmeiss Date: Tue Feb 25 18:35:48 2003 +0000 Fix compile bug for systems that have nl_langinfo but CODESET undefined commit 50e841cfceee9afecc96294187738e21669310ea Author: Adam Dickmeiss Date: Tue Feb 25 18:08:46 2003 +0000 Added missing PQF transform rules commit 2850c06be8cd7c08371028714715a9177026ef77 Author: Adam Dickmeiss Date: Mon Feb 24 14:15:00 2003 +0000 New Debian package - using older version of libxml2 commit 1167a422a06ea4d4a4b0c14a9f6df5042790f99e Author: Adam Dickmeiss Date: Mon Feb 24 13:14:49 2003 +0000 Added scan commit c938bc81f8da3cac9dd4ca57498cfbdff216d7e9 Author: Adam Dickmeiss Date: Sun Feb 23 21:39:26 2003 +0000 Fix debian conflict with php4-yaz commit b782d2bdebee1a46cc8d7336ce21e9b023baa349 Author: Adam Dickmeiss Date: Sun Feb 23 21:18:04 2003 +0000 Version commit 6b3cf0738c53080781fedd852e26b299224af3c3 Author: Adam Dickmeiss Date: Sun Feb 23 21:10:05 2003 +0000 Dates commit aebe2207088a26a1d6a3f4dad6bd32b6a41109a8 Author: Adam Dickmeiss Date: Sun Feb 23 20:40:17 2003 +0000 Minor changes commit b7e415906df8d63b3607c892dc2f6ef6bbea8fb1 Author: Adam Dickmeiss Date: Sun Feb 23 20:40:01 2003 +0000 More on SRW for the server commit 4fd9395530e56f0b5d2061d52a120b1cc4a1fade Author: Adam Dickmeiss Date: Sun Feb 23 20:39:31 2003 +0000 Check for status for init handler in SRW wrapper commit a2691350ad223dd62d441fab573cd3cb241a14b3 Author: Adam Dickmeiss Date: Sun Feb 23 15:24:27 2003 +0000 Reset count/start after running show commit bfdd572933425be072c526a50af9cc2ba3fdbbd1 Author: Adam Dickmeiss Date: Sun Feb 23 14:46:10 2003 +0000 Fix WIN32 compile commit 5f9dfb9266ab741d41a636249a39a254e4fb7211 Author: Adam Dickmeiss Date: Sun Feb 23 14:26:57 2003 +0000 Renamed Z_SRW_searchRetrieve to Z_SRW_PDU commit adae7ab7df270a3187630876b8d4668038a42e88 Author: Adam Dickmeiss Date: Sun Feb 23 14:25:34 2003 +0000 Revised introduction. Added figure with YAZ module layers. commit dd2c5a5e8e1ec1a3214423a6c8dcba065e13ddb0 Author: Adam Dickmeiss Date: Sun Feb 23 14:24:47 2003 +0000 Smallish. commit 8c2af81438405f3bbbd01a73265ce20edbd5bb73 Author: Adam Dickmeiss Date: Sun Feb 23 14:24:09 2003 +0000 More on SRW. commit 4908617c38ed64cae87afb6d6fc448e23c5ffa43 Author: Adam Dickmeiss Date: Sun Feb 23 14:23:40 2003 +0000 Updated PQF example queries. commit cfd0664043248f6e52ffa6265a0c430658d04370 Author: Adam Dickmeiss Date: Sat Feb 22 00:08:44 2003 +0000 work around for bug in strerror_r commit a1ac953ad3b1f310deec59e44119b52fc1325547 Author: Adam Dickmeiss Date: Fri Feb 21 12:20:22 2003 +0000 Fix soap.srw.html commit 4ca818ec201c9dcf5461e419002c95fd2eac620e Author: Adam Dickmeiss Date: Fri Feb 21 12:08:57 2003 +0000 Z_GDU definitions in zgdu.h. Renamed PROTO_SRW to PROTO_HTTP. commit add5a2db6b4360b1b448ad09f991a3977eb1220d Author: Adam Dickmeiss Date: Fri Feb 21 12:06:05 2003 +0000 Separate SOAP/SRW chapter commit 0718fd63660899964512631d1e246ded8e3d18d6 Author: Adam Dickmeiss Date: Fri Feb 21 00:24:26 2003 +0000 Stuff on SRW commit a040a2caa54445509bb70c14b57dffe3bbd0fcf4 Author: Adam Dickmeiss Date: Thu Feb 20 21:23:47 2003 +0000 Dates commit 1a834a4a0dc2d5f7f4c6bf6b178981822f937328 Author: Adam Dickmeiss Date: Thu Feb 20 21:19:16 2003 +0000 Date in CHANGELOG commit f093e1bd04649f47b2995e80f05305b66c72fdee Author: Adam Dickmeiss Date: Thu Feb 20 21:09:22 2003 +0000 No need to make doc (again) for make dist. commit afc7afd35aa4ba0f3070c96f0e351de7cecda160 Author: Adam Dickmeiss Date: Thu Feb 20 20:37:53 2003 +0000 Updated RPM package commit 35889bb3a838cd6ea10b19e9198663eccb14762a Author: Adam Dickmeiss Date: Thu Feb 20 15:15:04 2003 +0000 Cleanup. commit 916f3cef3434c7fc2a8e6a9e8d29eea8fb5b933d Author: Adam Dickmeiss Date: Thu Feb 20 15:14:10 2003 +0000 Break long line commit c3d11e6358396ceeb96b3051ea2d567d1c052618 Author: Adam Dickmeiss Date: Thu Feb 20 15:13:28 2003 +0000 Improve net I/O performance for server. commit 7d414d938ccbd98fc71383c356fec70ae269b2f5 Author: Adam Dickmeiss Date: Thu Feb 20 15:12:28 2003 +0000 ODR print for HTTP packages commit a6d84a7dae6b0dc41228c301069bb14fb26bd38e Author: Adam Dickmeiss Date: Thu Feb 20 15:11:38 2003 +0000 PQF native support for SRW ;) commit a40e9f3f82a7ffafcdd0a554721897669cac12f8 Author: Adam Dickmeiss Date: Thu Feb 20 15:10:24 2003 +0000 Playing with setsockopt commit 589712a429073d3608dbd45352cef6cf3b50cbd8 Author: Adam Dickmeiss Date: Thu Feb 20 15:05:40 2003 +0000 Fix problem with order of C include paths. commit e12377e7ea8e58cf447492b5cb9887b839a78700 Author: Adam Dickmeiss Date: Wed Feb 19 15:22:11 2003 +0000 Utility to map between Bib-1 and SRW diagnostics. Better handling of unsupported SRW constructs in server. commit f512aa33473ae86f8e8efd8da749a82c398e87f0 Author: Adam Dickmeiss Date: Tue Feb 18 21:27:53 2003 +0000 CQL w/bison on WIN32 commit 10e81e043068151fd32d623ace21222ab6c91ea3 Author: Adam Dickmeiss Date: Tue Feb 18 20:21:22 2003 +0000 Installation instruction updates commit df869b93d7eb00d07ffcd27556af94b00c518ad9 Author: Adam Dickmeiss Date: Tue Feb 18 14:47:23 2003 +0000 Oops Still need HAVE_XML2 in seshigh.c. commit 39f322672612cc6146a9a85fd32d2f8c325763da Author: Adam Dickmeiss Date: Tue Feb 18 14:28:52 2003 +0000 Function yaz_version. Better handling of non-SOAP enabled YAZ commit 4a72187a377987ccbe95cb7c549adb0678bc7159 Author: Adam Dickmeiss Date: Tue Feb 18 11:59:14 2003 +0000 Change a few yaz_log messages commit afddab87193266685fbbe2eba5592a22025fd3b6 Author: Adam Dickmeiss Date: Tue Feb 18 11:58:45 2003 +0000 New major version for yaz libs commit 34203146338c5f6c89774bde4caad110345405bd Author: Adam Dickmeiss Date: Tue Feb 18 10:37:08 2003 +0000 Use LIBS instead of XML2_LIBS for Makefiles commit c76d8db946107b4eab4849ca1166caf8bf1c7b5d Author: Adam Dickmeiss Date: Tue Feb 18 09:12:14 2003 +0000 Dont return values in void function commit 0e835ef58f6a0939626e6911a730945f81fa2e2f Author: Adam Dickmeiss Date: Tue Feb 18 09:11:50 2003 +0000 Prepare for external utilties: iconv, libxml2 on WIN32 commit 1f20fcf7c28b057d36b866ce9ba63dee95c27d41 Author: Adam Dickmeiss Date: Mon Feb 17 22:35:47 2003 +0000 Use libxml2 instead of libxslt(and libxml2) commit c76cdd28e9040ef40ae81a991a826d03b556e22c Author: Adam Dickmeiss Date: Mon Feb 17 22:34:39 2003 +0000 WIN32 updates commit db585d7fcb8319fa86543eb062df7fdaf16858c6 Author: Adam Dickmeiss Date: Mon Feb 17 21:23:31 2003 +0000 HTTP Timeouts. Memory leak checks and fixes. Changed member names for schema via ASN.1 compiler directives. commit d9d97a04b6f9597225b8440dad61790dfa39a751 Author: Adam Dickmeiss Date: Mon Feb 17 14:35:42 2003 +0000 SRW record retrieval works for ZOOM commit 6011a7156d007b94abde4bfc3d427a1bd853cd86 Author: Adam Dickmeiss Date: Fri Feb 14 20:32:59 2003 +0000 Configure option --with-xsl. commit 854bc0025cf4f8cbd509e2d1de7d2f8a1ea126ac Author: Adam Dickmeiss Date: Fri Feb 14 19:10:00 2003 +0000 Fix non-SOAP compile commit ac286ae76051058c8e340bf84eb98391340b7d22 Author: Adam Dickmeiss Date: Fri Feb 14 18:49:22 2003 +0000 More type casts. Modify CQL tree - bool is C++ reserved name. Using YAZ SOAP instead of gSOAP for ZOOM client (still incomplete). commit 6d6cdcaccf2b4cab92da8e29700053b43543dd4c Author: Adam Dickmeiss Date: Wed Feb 12 22:02:47 2003 +0000 add type cast commit 72d242591ea2f6374ffb3166383f3ffddc342215 Author: Adam Dickmeiss Date: Wed Feb 12 22:02:33 2003 +0000 remove unused variable commit 781633e7be33869d635c015dcf544037becc60e4 Author: Adam Dickmeiss Date: Wed Feb 12 21:34:57 2003 +0000 Added include of string.h commit c620a713f1418315efcd4e6fab225e036775d365 Author: Adam Dickmeiss Date: Wed Feb 12 15:06:42 2003 +0000 SOAP, SRW codecs and HTTP transport for YAZ using libxml2. Updated ASN.1 for Z39.50 amendment String Identifiers for Schemas. commit 06670a04cc9789bc938174a5e99ddaff97386867 Author: Heikki Levanto Date: Wed Feb 12 14:17:50 2003 +0000 Added a LOG_NOTIME flag to disable time stamping log entries (useful for regressions, can run a diff on logs) commit f9d9c90585dcce8b81c69104f1634da29a039cb3 Author: Heikki Levanto Date: Tue Feb 11 16:35:17 2003 +0000 Ficed the log level display for level app (used to display [all][app]) commit b33bbfa937912e532dd8842fc9e46003aa1848d6 Author: Adam Dickmeiss Date: Mon Feb 10 08:58:40 2003 +0000 1.9.3 commit 9a6ef6ade0e32716585b5dd5388a60285ea9d408 Author: Heikki Levanto Date: Fri Feb 7 14:39:00 2003 +0000 Added a way to get log back to stderr commit d193403feb3df490f60175d387603f4daf89cf1f Author: Adam Dickmeiss Date: Tue Jan 28 22:34:17 2003 +0000 CQL to RPN example commit 650cc0539b6a484eba203949cb43a08b9084504d Author: Adam Dickmeiss Date: Mon Jan 27 21:31:35 2003 +0000 Don't set syntax to none if bad syntax is supplied commit c63b8160e6b822d640a4e92ca4c3d5fb79828bbc Author: Adam Dickmeiss Date: Mon Jan 27 21:30:59 2003 +0000 CQL to RPN mappings commit fbfb7f5339bcc276a562e6b94b42750ff3b1af3f Author: Adam Dickmeiss Date: Fri Jan 24 12:15:45 2003 +0000 Save a few bytes for piggyback :) commit f9d027f2d879dca0b6a3e8a8ec9ce82188498110 Author: Adam Dickmeiss Date: Fri Jan 24 11:59:03 2003 +0000 Piggyback fix commit a84b343fd22845cbd7bea563e77250a84e48463b Author: Adam Dickmeiss Date: Fri Jan 24 11:52:57 2003 +0000 Fix SmallSetElementSetName for piggyback commit 6406d7955629f3b8d4bbeae9fc93ec1bb9d5366a Author: Adam Dickmeiss Date: Thu Jan 23 20:26:37 2003 +0000 More CQL information commit 35d5038e15279255dd608146e69630f0e88194ff Author: Adam Dickmeiss Date: Wed Jan 22 14:39:16 2003 +0000 2003 commit 967300e7c27a84954ac8568927adf5d9ef42a300 Author: Adam Dickmeiss Date: Wed Jan 22 13:33:34 2003 +0000 Build-depends on docbook, etc commit e13889f2448f526c2d7be104228a76278fdd1e18 Author: Adam Dickmeiss Date: Wed Jan 22 09:43:32 2003 +0000 CQL section in tools. Not yet finished commit c68c6c8dd7fb48b0e6ec82d580266470b2b62d7d Author: Adam Dickmeiss Date: Mon Jan 20 13:04:50 2003 +0000 Changed prototype of yaz_srw_serve to solve threading problem with srw-gateway. commit b36a815a64cd481e0a74fc51b8010019b83e4cb1 Author: Adam Dickmeiss Date: Wed Jan 15 14:26:55 2003 +0000 Fix compile problem in srw (when srw is disabled) commit 63d3984ef11179af51a79d202dca15b70403099b Author: Adam Dickmeiss Date: Tue Jan 14 08:21:14 2003 +0000 Using yaz_log instead of logf commit d83f8d1ff2016d70565f75ef1c4f5dc7d95b2109 Author: Adam Dickmeiss Date: Mon Jan 13 22:11:34 2003 +0000 Fix missing arg in select code commit eae04713fcef67a1f33f3120a76ab98c10dd07b1 Author: Adam Dickmeiss Date: Mon Jan 13 14:33:03 2003 +0000 Only enable libxml/xslt when SRW is enabled (gSOAP is found) commit 574e9d4d7ee5f61adc9db73fafaa2f48e51ec443 Author: Adam Dickmeiss Date: Mon Jan 13 14:32:41 2003 +0000 Add include commit 9b92a8975685e36dd4c199a508cabf01de6ebef0 Author: Adam Dickmeiss Date: Mon Jan 13 14:32:06 2003 +0000 Call bend_stop only for main process (not from forked child) commit 9ad7a007903707f49428bac36a96f56262d2ec44 Author: Adam Dickmeiss Date: Sat Jan 11 03:18:53 2003 +0000 Fixed two memory leaks commit 7c40ce6a98bf3d9c2881e7fddbbee7de5811a3a9 Author: Adam Dickmeiss Date: Mon Jan 6 21:52:37 2003 +0000 Only use strerror_r in threaded mode commit 4d531a1a9131d69c3b6c27fbac42837e22cff61c Author: Adam Dickmeiss Date: Mon Jan 6 08:20:26 2003 +0000 SRW, CQL, 2003 commit 6c2e6af12b26825488c74a655a40a0cc75a863ca Author: Adam Dickmeiss Date: Sat Dec 28 12:16:26 2002 +0000 Remove printf stmt commit 65efc4dd0a947e1b4620d93c88d771b83bc32dac Author: Adam Dickmeiss Date: Sat Dec 28 12:13:03 2002 +0000 CCL proximity support commit 58ad4fbc42a3493a49c7ee64f9593e6964b06231 Author: Adam Dickmeiss Date: Thu Dec 19 14:04:22 2002 +0000 TCP/IP receive buffer patch (Solaris). commit 4cc402d744b9fbfee11e31cea25835061cb759f1 Author: Adam Dickmeiss Date: Tue Dec 17 13:32:04 2002 +0000 Simplify use of WRBUF in marc handler commit 629799b5d2e09bbb9425442274424b12bdc801ba Author: Adam Dickmeiss Date: Mon Dec 16 14:06:34 2002 +0000 WIN32 updates for marc8.c commit 7a64e6e91bcaebfcb66db3b0b91728f5603fafdd Author: Adam Dickmeiss Date: Mon Dec 16 13:30:41 2002 +0000 Remove unused variable commit cdb4e1fb73e8204d87a63354e6e65e18aa45f141 Author: Adam Dickmeiss Date: Mon Dec 16 13:26:06 2002 +0000 MARC8 conversion file commit 1121eeb134f61c6c2510143858db59045c1b6757 Author: Adam Dickmeiss Date: Mon Dec 16 13:13:53 2002 +0000 MARC8 decoding for yaz_iconv. New MARC API. Utility marcdump allows you to specify source and destination encoding. YAZ client tries to convert MARC characters to native character encoding for output terminal (some unices only). commit 615dcec32011f62525931e5f04490ff7e721ea04 Author: Adam Dickmeiss Date: Mon Dec 16 13:11:24 2002 +0000 Make private functions static commit 12bf5354833705ed674118f83fc2aa9494dfec17 Author: Adam Dickmeiss Date: Sun Dec 15 21:42:06 2002 +0000 Spelling commit 7d4006fb1914018d99ea9764aa45b8edc86ebd5d Author: Adam Dickmeiss Date: Sun Dec 15 21:22:58 2002 +0000 Make private functions static in unix.c commit b08d68a3edac5a93dce61f98d2f030ea722311c4 Author: Adam Dickmeiss Date: Tue Dec 10 13:14:14 2002 +0000 ZOOM_record_get: xml returns MARC XML instead of OAI MARC commit 9841cfd6e74acdc325bf5158fddf0b3cc2d82fab Author: Adam Dickmeiss Date: Tue Dec 10 10:59:28 2002 +0000 More debugging tools for yaz_iconv commit 4d5043a735f072b648a7550b8f460726721b9f14 Author: Adam Dickmeiss Date: Tue Dec 10 10:23:21 2002 +0000 Fixed buffer handling (incomplete input) in yaziconv test commit 85fcb12fe992e4dc0fa91e95fc320943c1c26cc5 Author: Adam Dickmeiss Date: Mon Dec 9 23:32:29 2002 +0000 New ZOOM connection options: targetImplementation{Id,Name,Version} New function ZOOM_connection_error_x. commit 27743f316331a9ea508df5f204416a6864fc320f Author: Adam Dickmeiss Date: Mon Dec 9 23:29:00 2002 +0000 --tabs option no longer available commit 79b486cea07c6352407a289d3b4b9a8545b470e6 Author: Adam Dickmeiss Date: Thu Dec 5 12:19:23 2002 +0000 New function yaz_strerror. commit aff0149238f8b1d7eefc820d9c3dd1733e959361 Author: Adam Dickmeiss Date: Thu Dec 5 12:16:39 2002 +0000 yaz_strerror. WIN32 updates for mterm2.asn commit 05586eb8028d6f6a84d6389f8f3ab829b19f1760 Author: Adam Dickmeiss Date: Thu Dec 5 12:07:00 2002 +0000 Range search. Not fully implemented yet. commit 366dc7568281c9774cd309b28c24a077604264a0 Author: Adam Dickmeiss Date: Tue Dec 3 10:03:27 2002 +0000 MARC XML commit 79f065f5f8705a1a4391de64ae735505cc2463a8 Author: Mike Taylor Date: Mon Dec 2 16:02:01 2002 +0000 ignore tkl.xsl commit 9287c96097c00d28310becb14ea3dd7cfb9f2ab0 Author: Mike Taylor Date: Sun Dec 1 23:22:10 2002 +0000 Add Zthes tag-set -- where was it?! commit 162ddfa4248521c7af9183eac839353434c67f3c Author: Mike Taylor Date: Sat Nov 30 22:30:51 2002 +0000 Add new API function ZOOM_diag_str(), which maps error code to human-readable message. It uses code lifted from ZOOM_connection_error() (which now calls it) to map the ZOOM-specific errors by hand, and fall back to diagbib1_str() for others. I did this because I need the new function in ZOOM-C++, for reasons which would be otiose, for the moment, to rehearse. commit c3e00d3758858e61b92e3e1ba9ce08aa91cc1bee Author: Adam Dickmeiss Date: Fri Nov 29 15:41:00 2002 +0000 Apply patch (again) commit 53a07fe60bdd9837041cd6f0988b38f5c38c73e0 Author: Adam Dickmeiss Date: Fri Nov 29 11:53:55 2002 +0000 Fix creation of lib/yaz-config. commit bdd6284ebe715b4352d3b2ff4cdb613eabd8a6a7 Author: Adam Dickmeiss Date: Wed Nov 27 00:53:02 2002 +0000 Look for YAZ in more places commit 1d36452dba1d4b607123bacb83142e033f3bfba3 Author: Adam Dickmeiss Date: Tue Nov 26 17:25:07 2002 +0000 Changes commit faecf8f8503bb0e507fc19d9a67158f24bd79491 Author: Adam Dickmeiss Date: Tue Nov 26 16:56:39 2002 +0000 include nmem.h to get prototype for yaz_errno commit 42983d3821534c2cfc2fbac538ddbe9b751bd8cd Author: Adam Dickmeiss Date: Tue Nov 26 16:56:21 2002 +0000 Remove fprintf statement commit 8fa2c4c13a42090b0b2b52410bbae23da5db16e5 Author: Adam Dickmeiss Date: Tue Nov 26 16:47:04 2002 +0000 Fix RPM build commit e26ffdbc4b024a06b4ca46c6aecb5c3dd09b7e8d Author: Adam Dickmeiss Date: Tue Nov 26 16:04:15 2002 +0000 Win32 fix commit a8e4f36bc2740d3b8ce41f4c22b3c171b4bd8700 Author: Adam Dickmeiss Date: Tue Nov 26 15:47:38 2002 +0000 Changes commit 450b277660d870fa36aed2fdfbf88affa190ae96 Author: Adam Dickmeiss Date: Tue Nov 26 13:42:35 2002 +0000 Increased version number commit adbeacef10c4a91ba652516dff43c16fb3258f36 Author: Adam Dickmeiss Date: Tue Nov 26 13:15:42 2002 +0000 Fix SIGTERM handling in frontend server commit e74dfc354e4695e5238bc77f39c879e1d9fc6f20 Author: Adam Dickmeiss Date: Fri Nov 15 10:38:37 2002 +0000 Remove C++ comment commit 99746ff734496e41e344ca5e7a4127a1fbd348a3 Author: Adam Dickmeiss Date: Fri Nov 8 13:35:06 2002 +0000 Swap order of elements nonews and title commit ae5e063a5773a2c858901f8055dc1f8b8ac5bb63 Author: Adam Dickmeiss Date: Fri Nov 8 12:27:37 2002 +0000 Dont show navig titles for TKL commit 929d26653d54a64c12dff06cbb470c22667d79f1 Author: Adam Dickmeiss Date: Fri Nov 8 12:27:00 2002 +0000 TKL documentation commit 64f113142ce1f847896e50a43707d220681faf6b Author: Adam Dickmeiss Date: Fri Nov 8 12:23:38 2002 +0000 Relax check for zero length OCTET aligned commit f736b30f8eb7b0530b12ed7cd91734c870a8cd78 Author: Adam Dickmeiss Date: Mon Oct 28 10:53:09 2002 +0000 Fix length setting in ZOOM_record_get commit 709cc6e9e4f5bcb03fcc62be477e7d65eecfbda2 Author: Heikki Levanto Date: Thu Oct 24 12:14:01 2002 +0000 Using a default path to find tcl commit b6eddd61b2a19637bdfeda4762a328e0f1eb397d Author: Adam Dickmeiss Date: Thu Oct 24 10:28:39 2002 +0000 New debian release commit d239d37370affeb6525e5148554c05104dbdf5d7 Author: Adam Dickmeiss Date: Wed Oct 23 10:11:44 2002 +0000 Fix refernce to yaz(7) commit 12e68873046de1fc08b5589891914ec2cdc3d453 Author: Adam Dickmeiss Date: Tue Oct 22 14:40:21 2002 +0000 Add include of stdio.h commit 4a30229e344fc242c25951daef62af68481067c2 Author: Adam Dickmeiss Date: Tue Oct 22 13:49:53 2002 +0000 data1 gone commit 95a7ea9b644c520d7d7b7c5d0c71ca44dd58a225 Author: Adam Dickmeiss Date: Tue Oct 22 12:51:18 2002 +0000 data1 moved to zebra commit 6866fce7b026f5ce8b75945f72a844d7b44abd85 Author: Adam Dickmeiss Date: Tue Oct 22 10:32:46 2002 +0000 New source grs1disp.c commit 8590f113acfb6a4a1c5a4101f604690efdbc2420 Author: Adam Dickmeiss Date: Tue Oct 22 10:29:58 2002 +0000 Added grs1 display utility commit 9d9bbf2ad72a44772dca1e694de9a84c4e48aa21 Author: Adam Dickmeiss Date: Tue Oct 22 10:05:36 2002 +0000 GRS-1 render for ZOOM. New WRBUF printf utility: wrbuf_printf. commit 37406ac2e623304bcbdbfab5c521cc3f8ddcf8eb Author: Adam Dickmeiss Date: Tue Oct 22 10:04:51 2002 +0000 Add missing va_end commit 420d30f9df4c7a4f12a1f1e8265911bc38f37f99 Author: Adam Dickmeiss Date: Tue Oct 15 09:12:27 2002 +0000 Debian release commit b9a96aff744a65bfc785e1597d953a780754a929 Author: Adam Dickmeiss Date: Mon Oct 14 19:45:36 2002 +0000 Allow - in term. But - in ranges must be surrounded by whitespace commit bec71e151d306edbc5f58e19c7c139a196e867e9 Author: Mike Taylor Date: Thu Oct 10 22:52:40 2002 +0000 Add intermediate files from PDF production. commit 5b690aebb8dc2d05cad8f668de8fd821a1c231fa Author: Mike Taylor Date: Wed Oct 9 23:07:12 2002 +0000 Bugfix to allow #PQF and #CCL anchors to work in generated HTML commit c55facf40944e9cf30f8aab0b62df79403dcee43 Author: Adam Dickmeiss Date: Wed Oct 9 20:40:24 2002 +0000 Typo commit 72a4ca7254924278c171e51e4e0946b363576845 Author: Adam Dickmeiss Date: Wed Oct 9 20:38:29 2002 +0000 New debian package commit 58b2fdadbb7b8a8845ff67501520fe1660dedeee Author: Mike Taylor Date: Wed Oct 9 11:36:09 2002 +0000 ignore more files commit c9b7cb5f4ca3e9c570d921307e2d44ce32f51801 Author: Adam Dickmeiss Date: Tue Oct 8 23:00:09 2002 +0000 Make insert_node work (again) commit aabdf39f20d833179fefca73910a0b2649d0d7e6 Author: Adam Dickmeiss Date: Tue Oct 8 22:18:22 2002 +0000 More fixes for xmltext commit 3eef743c121a36edcf66e4e3651d5ceb8b4e0156 Author: Adam Dickmeiss Date: Tue Oct 8 20:14:43 2002 +0000 sgml filter doesn't interpret entities commit e742d7d7fdc38b3ffab681e32bc76551e1fb3264 Author: Mike Taylor Date: Tue Oct 8 11:34:02 2002 +0000 Add yaziconv commit d40f4c0f984fbb4ee31d3778905e46178e4e0e26 Author: Adam Dickmeiss Date: Tue Oct 8 09:07:29 2002 +0000 Fix man pages for RedHat docbook2man commit af14560c434c7209f587869bf4d5e15bff108dae Author: Adam Dickmeiss Date: Fri Oct 4 19:11:17 2002 +0000 Use hex character entity commit afd0e366dc8b6305e9795da94afc5c8f1ead0580 Author: Adam Dickmeiss Date: Fri Oct 4 19:06:36 2002 +0000 Clean log commit 471b7bd86c74d2c69faaa96d45c4fdf8c643615a Author: Adam Dickmeiss Date: Fri Oct 4 19:06:25 2002 +0000 Added include of yaz-util.h commit b732890efcff9d226dc30b5338fdfa8d8fa2a83c Author: Adam Dickmeiss Date: Fri Oct 4 19:05:36 2002 +0000 WIN32 portability fix commit 14e5ae78869e44ee231ba01775ecf282f84e4879 Author: Adam Dickmeiss Date: Fri Oct 4 18:29:42 2002 +0000 official release for debian commit a11d0a5867b3f7fa90a0f11f9fc59b8b4e083c4b Author: Adam Dickmeiss Date: Fri Oct 4 18:22:40 2002 +0000 Towards 1.9.1 commit 835cca40fdee0597232361c5129cf47160d77e79 Author: Adam Dickmeiss Date: Fri Oct 4 11:24:55 2002 +0000 OAI MARC fix commit 25eb3d7b8af9f8857903460121746afc1738c467 Author: Adam Dickmeiss Date: Fri Oct 4 11:24:39 2002 +0000 Use case-insensitive compare for charset names commit 72d53a9d929783e997c41330bb28859018088b53 Author: Adam Dickmeiss Date: Fri Oct 4 11:23:50 2002 +0000 Use OAI XML commit 50319ad67f5bae49fc9449bd6105dfa357f2dbb3 Author: Adam Dickmeiss Date: Fri Oct 4 10:19:58 2002 +0000 OAI MARC display commit 906a5ab4a9c3b8b9a4bef15de1df58ab873a1cb5 Author: Adam Dickmeiss Date: Wed Oct 2 15:51:52 2002 +0000 Create entities for MARC data (& <) commit bdcf00f7ba08b06323fbf8e1679c947316100ad3 Author: Adam Dickmeiss Date: Wed Sep 25 20:41:02 2002 +0000 Negotiated charset and languages saved in connection options negotiation-{charset,lang}. commit 5cc38fde071f94e8be5899679bea16e57e35a90f Author: Adam Dickmeiss Date: Wed Sep 25 20:38:36 2002 +0000 Installation mentions packages for YAZ as well as iconv support. commit b38addc8b6f4e44a7ff5c7167b3805ee01e50888 Author: Adam Dickmeiss Date: Wed Sep 25 20:32:53 2002 +0000 Spelling commit 4e1f50c179b87adc3eb1098b6edf28a653dd6d64 Author: Adam Dickmeiss Date: Wed Sep 25 20:32:22 2002 +0000 Create documentation files in current directory rather than $(srcdir). commit d054cdd41417401fbba915e20203882159f32283 Author: Adam Dickmeiss Date: Wed Sep 25 12:37:07 2002 +0000 Thread-safe handling of errno variable. For server option -a@ produces APDU prints in YAZ log. commit 400d5579f2fc2476dc8d97653e97b244691059c8 Author: Adam Dickmeiss Date: Wed Sep 25 10:01:33 2002 +0000 Changes commit e8e3ed14b62160f636e5df1901055743b4100fb8 Author: Adam Dickmeiss Date: Wed Sep 25 09:21:09 2002 +0000 Man pages part of Redhat package commit 9da4846f45a691c404093e724be268722932fc46 Author: Adam Dickmeiss Date: Wed Sep 25 08:11:33 2002 +0000 Check for docbook.dsl, docbookx.dtd on RedHat 7 commit b3f24b6b29adb7722dd5eb66a68f1df14907166b Author: Adam Dickmeiss Date: Wed Sep 25 07:43:29 2002 +0000 Make doc part of SUBDIRS so that 'make install' installs man pages commit b3c5bb2d6689135ebce9350150e132c2d1a7859b Author: Adam Dickmeiss Date: Tue Sep 24 14:39:10 2002 +0000 Fix ESpec handling commit e0b38a8744077e71e4673afc76a4e17546eb01a2 Author: Adam Dickmeiss Date: Tue Sep 24 13:58:13 2002 +0000 Fix ESpec handling commit 165b231b0f6eaa0b2b5fbf438f5ddede630b10e3 Author: Adam Dickmeiss Date: Tue Sep 24 08:05:41 2002 +0000 Added several type casts for C++ compilation. ZOOM fixes. commit a662fb07cab81d45cdd1b8f5b7e68c21992a8678 Author: Adam Dickmeiss Date: Tue Sep 24 08:00:50 2002 +0000 tst7 checks for memory leaks commit b6f9808662c04f1037956112e5cf8a83af19c59f Author: Adam Dickmeiss Date: Tue Sep 24 08:00:32 2002 +0000 spelling commit 263fe1daee74b19f379ed1a68222d09ef4c2752d Author: Adam Dickmeiss Date: Tue Sep 24 07:58:59 2002 +0000 SGML reader parses comments commit 4f0e281e16293a8c6403d7ad1265a13eae911006 Author: Adam Dickmeiss Date: Fri Sep 20 22:30:01 2002 +0000 Indentation commit fa4bfbc45c934a9431f40588c519085eff9e8ae6 Author: Adam Dickmeiss Date: Fri Sep 20 22:23:13 2002 +0000 Improve check for type of socket length (socklen_t). commit 56bb16e3c5714fc0ccb558d90eb927e3f80a3974 Author: Adam Dickmeiss Date: Fri Sep 20 10:22:53 2002 +0000 New descriptions commit 2ceb6ed00ff5be1dfcca786fbf000bb2c7682c5c Author: Adam Dickmeiss Date: Wed Sep 18 20:55:54 2002 +0000 Safer check for iconv commit b28230ab11ea960e0bf0ea04ceeaf88131ab2f02 Author: Adam Dickmeiss Date: Tue Sep 17 21:19:38 2002 +0000 Work on ES Update for client commit 519fe26fff30687caa26c4a26038d02dcc0429c8 Author: Adam Dickmeiss Date: Tue Sep 17 20:17:44 2002 +0000 Use proper tags for references to man pages commit f5235f6ab427d98731fb5184ac284ac97e1dfb40 Author: Adam Dickmeiss Date: Tue Sep 17 11:07:30 2002 +0000 Fix white space. Added vim indent directives commit 1a8c91e241c75be97b531ca514735196b94ca8dd Author: Adam Dickmeiss Date: Mon Sep 16 20:40:35 2002 +0000 yaz-comp and yaz-config moved to yaz-devel commit 141269ce5f566fcd7ed188ebe9bb878bf4b32018 Author: Adam Dickmeiss Date: Mon Sep 16 18:45:13 2002 +0000 Moved zoom implementation to zutil. Man page for zoomsh commit 94fce64abe00f0334941ca270c8898bdabb0ca7c Author: Adam Dickmeiss Date: Mon Sep 16 14:16:31 2002 +0000 man pages commit 9b1c2c1ef16e7311f6cb962e9854c08605a3e79e Author: Adam Dickmeiss Date: Mon Sep 16 10:48:06 2002 +0000 Shorter header commit 44b9f906bd7b0e1df901d37295ce46ed78456063 Author: Adam Dickmeiss Date: Sun Sep 15 20:41:01 2002 +0000 Remove unnecessary ; commit 2723c5eb5d1153c1cd6106060d23e8dbc74ae192 Author: Adam Dickmeiss Date: Sat Sep 14 10:27:21 2002 +0000 Remove unnecessary make rule commit 2374d315a30c80d1e913da03f455156c4c53377b Author: Adam Dickmeiss Date: Fri Sep 13 11:28:17 2002 +0000 Added more Bib-1 diagnostics commit fa6e929aaa0e09d27aa9ed9e9eebca3faa4fa51f Author: Adam Dickmeiss Date: Fri Sep 13 08:57:03 2002 +0000 Make buffer for OtherInfo larger commit 4dd885245b0ce82b18609ab4a05d0d5868ff1391 Author: Adam Dickmeiss Date: Wed Sep 11 21:25:56 2002 +0000 Remove LIBS = from Makefile.am's. commit a90265b447bd2d054406b234b9f86150658d5e35 Author: Adam Dickmeiss Date: Wed Sep 11 21:19:06 2002 +0000 Better check for iconv commit 4e0f9c05e7a85b597cd8c3efb7a11563067bd63a Author: Adam Dickmeiss Date: Wed Sep 11 21:00:16 2002 +0000 Update changes with socklen_t commit ca4948d9b8ea1e4d73d25a25b1da3a4de121ca73 Author: Adam Dickmeiss Date: Tue Sep 10 20:56:34 2002 +0000 Check for socklen_t type for accept, getpeername commit 2309bff1f17207f5952803760becd2390f7f8ea3 Author: Adam Dickmeiss Date: Tue Sep 10 18:43:02 2002 +0000 Updated version number commit 5acca4fa9c5841f48e8ef1b6ac7599dccde69b65 Author: Adam Dickmeiss Date: Tue Sep 10 18:41:18 2002 +0000 Added yaz_errno commit cd3269449ef2be79e241e1c687856257276ad97d Author: ja7 Date: Tue Sep 10 10:20:27 2002 +0000 Changed emacs tab-width: to 8 commit d4eedc26c6a6152f08c8a2e1dab4cdc131e447a5 Author: Adam Dickmeiss Date: Fri Sep 6 20:04:49 2002 +0000 debug=0 commit 4c0ff47b6c72bf6be3e466d48abbc1be89a3b778 Author: Adam Dickmeiss Date: Fri Sep 6 19:52:57 2002 +0000 Fixed use of service display name commit 4d79eefd8542f5a5c205f8ce32c5518f4e26ca43 Author: Adam Dickmeiss Date: Fri Sep 6 13:05:38 2002 +0000 Changes commit 5f67d6d62b8c0b8bfa20fac3d1a3a9b2ad984b56 Author: Adam Dickmeiss Date: Fri Sep 6 13:01:47 2002 +0000 Fix date commit 45079b6641e14101d5338fe1cae5af86647d289d Author: Adam Dickmeiss Date: Fri Sep 6 09:00:34 2002 +0000 Changes commit 86d44f674f4c207d4983f75d55c0036e88813534 Author: Adam Dickmeiss Date: Thu Sep 5 19:44:09 2002 +0000 yaz-doc moved to section doc commit 3c23d13ff10dd4fdc4059704f7b9df9e7a5d9fcf Author: Adam Dickmeiss Date: Thu Sep 5 13:36:53 2002 +0000 Towards 1.9 commit 399ff63d5fad2f5a249d6326b5a8658979897b68 Author: Adam Dickmeiss Date: Tue Sep 3 18:10:13 2002 +0000 Fixed crash due to absent database in NamePlusRecord commit 590c754f58a6fa4ca0f9050e470642eecd261031 Author: Adam Dickmeiss Date: Tue Sep 3 10:46:06 2002 +0000 Removed line for PQF grammar commit 6ba14eb5dc7229aa17977882024a475b6d258368 Author: Adam Dickmeiss Date: Tue Sep 3 09:50:34 2002 +0000 Updated doc about PQF. Spell fixes. commit 786269f1247effe4194494c834b5d7043417d0d5 Author: Adam Dickmeiss Date: Mon Sep 2 13:59:07 2002 +0000 New PQF API. Old API preserved. commit 524bfef7eb43a79c16beacccedf6d047074372b5 Author: Mike Taylor Date: Fri Aug 30 15:39:40 2002 +0000 Add VAL_BIB2 and VAL_ZEEREX. We use the existing VAL_USMARC in oid.c for the MARC attribute set rather than defining a new and somewhat redundant VAL_MARC. We may want to revisit that decision, though. commit ac5f8ad9508f5b3ada38117b0da7ae23c650ab1e Author: Mike Taylor Date: Fri Aug 30 15:38:26 2002 +0000 Add OID-database entries for the MARC, BIB-2 and ZeeRex attribute sets. commit 9c04f1661bc183ea54fb5581c63ecc338ae5ddea Author: Adam Dickmeiss Date: Fri Aug 30 11:28:01 2002 +0000 Remove EXPAT reader commit bcd8713c9df99fb20caf4c8226599d12229f07b2 Author: Adam Dickmeiss Date: Fri Aug 30 11:27:44 2002 +0000 Fix warnings (issued by VC 6) commit a2730f8f69a130acc4d5fedf5f9ec838f953b530 Author: Adam Dickmeiss Date: Fri Aug 30 09:06:42 2002 +0000 Small cosmetic changes to list_all output commit 066324901a18b5477f7a55b0a8c388b641c60efd Author: ja7 Date: Thu Aug 29 21:35:38 2002 +0000 added new commands set_otherinfo list_otherinfo clear_otherinfo list_all set_autoreconect commit 5a018835d3e6920aafca465862c37c2b2ba93a03 Author: Mike Taylor Date: Thu Aug 29 21:26:08 2002 +0000 Nothing to get excited about. commit ddac2b650c387c8ab108827c8ead16371f16340d Author: ja7 Date: Thu Aug 29 19:36:09 2002 +0000 Added YAZ_EXPORT const char* yaz_z3950_oid_value_to_str(oid_value ov, oid_class oc); Used for gettting ui friendly names for oid_value's commit aea27bc0e4e3f310196f0e6cee3de8cac69e9806 Author: ja7 Date: Thu Aug 29 19:34:44 2002 +0000 Added complete_auto_reconnect from completing for the auto_reconnect command commit 5f780a431cd088035d164277d8981bf9bd35a16e Author: Mike Taylor Date: Thu Aug 29 16:18:34 2002 +0000 dsssl for rh7.2 commit e0dc2b9e3d7bd7c91c6c6bb2fa650873a7ebfe72 Author: Mike Taylor Date: Thu Aug 29 11:14:30 2002 +0000 Add all my new .cvsignore files. Life will now be less noisy. You get bombarded with "? util/foo.lo" messages every time you do a CVS operation over the tree. commit cdf2ebfab56b50232a49bc4032d90704794ca4c0 Author: Adam Dickmeiss Date: Thu Aug 29 09:58:42 2002 +0000 Added yaz_log_init_prefix2 commit 6b7929b5e5663fb9a768b11aeaa3f930691e6ece Author: Mike Taylor Date: Wed Aug 28 21:00:29 2002 +0000 add docbook DTD path for Red Hat 7.2 commit 16aacc8655a9b0460f13c31f5459d030465b9c43 Author: Adam Dickmeiss Date: Wed Aug 28 20:06:04 2002 +0000 Changes commit 9dffa786b23759414b476e152f590f6aa0e8aa3a Author: Adam Dickmeiss Date: Wed Aug 28 19:34:50 2002 +0000 Remove unused variable commit a19b3326f39623ae79b6679c010c8db04c22fdf4 Author: Adam Dickmeiss Date: Wed Aug 28 19:34:36 2002 +0000 Iconv fix: Dont move inbuf pointer for bad init sequence commit 941c141092dc2ea6a2b6f5cc7bac181798113ae7 Author: Adam Dickmeiss Date: Wed Aug 28 19:33:53 2002 +0000 add missing return value commit cedc80efd96ff2d9c2a538ac319ec3c01aa80b04 Author: Adam Dickmeiss Date: Wed Aug 28 19:12:30 2002 +0000 Fix prototype for z_SUTRS commit d262777bcc71cadd8356f19da6eb70a76ad0d0e3 Author: Adam Dickmeiss Date: Wed Aug 28 19:10:56 2002 +0000 Fix infinite loop (bug introduced by previous commit) commit 8f3f8256752d09f66cd2c7a412cc8c30a0fc90ea Author: Adam Dickmeiss Date: Wed Aug 28 12:48:47 2002 +0000 XML reader removed. Now part of Zebra. commit f3fa2f64b69427aef4dbb191fc870865bb87c9b5 Author: Adam Dickmeiss Date: Wed Aug 28 12:44:35 2002 +0000 Fixed bug where wrong data was used for repeating fields commit 7f1b9680653ec5037c88b12e0b8e04c7f17e467f Author: Adam Dickmeiss Date: Wed Aug 28 08:12:49 2002 +0000 Fix: use yaz_iconv_open instead of iconv_open commit caa50534e057668bf2cded573d41c5b07034633b Author: Adam Dickmeiss Date: Wed Aug 28 07:54:11 2002 +0000 data1 uses yaz_iconv commit cf9f213fff1ae6b2471f8367114b93ae45ed8b75 Author: Adam Dickmeiss Date: Wed Aug 28 07:53:51 2002 +0000 ODR uses yaz_iconv commit c914ef625a80051757013e6ae47db7a4798e18b5 Author: Adam Dickmeiss Date: Tue Aug 27 22:33:30 2002 +0000 siconv added commit 33c972afb7998b7598f72ab1f4c072f92c2d6407 Author: Adam Dickmeiss Date: Tue Aug 27 21:45:28 2002 +0000 Mini iconv library functional. Supports UTF-8,ISO-8859-1,UCS4,UCS4LE commit 48abc88bc981af496e660e8f8a7a4aa678781623 Author: Adam Dickmeiss Date: Tue Aug 27 14:14:01 2002 +0000 More work on iconv test program commit 7dec30565506b5ecdd449866ebabe67bd816fc59 Author: Adam Dickmeiss Date: Tue Aug 27 14:02:13 2002 +0000 Simple iconv library commit 8b934374217ed1225466246ffa948e182124156e Author: Adam Dickmeiss Date: Tue Aug 27 13:30:18 2002 +0000 Cosmetic change; to test CVS loginfo commit d30f275ba6239b9e644ea60cd123487173704824 Author: Adam Dickmeiss Date: Tue Aug 27 13:18:26 2002 +0000 Remove dead comment commit a6a8ea2837dd78d21fe036fff4b8d91c0d6e09c8 Author: Adam Dickmeiss Date: Mon Aug 26 12:15:35 2002 +0000 Plus signs converted to spaces for database names commit 4fbad84813bfafe3c0c8e368d252a192cd84b3f3 Author: Adam Dickmeiss Date: Mon Aug 26 10:43:52 2002 +0000 Pointer fix for amp-handling commit 836f6f959c8bdde0c0ecc6317ba8d274d868e9e0 Author: Adam Dickmeiss Date: Mon Aug 26 09:25:56 2002 +0000 Buffer overflow fix commit 5ea4e843c189848da0b41935e7f2db8e41b7c8e7 Author: Adam Dickmeiss Date: Sun Aug 25 06:48:18 2002 +0000 Ensure that send_present doesn't use ODR if present is not performed commit 1274cfd835afa98442ac013e4556ad7b5c5f71a6 Author: oleg Date: Sat Aug 24 09:28:30 2002 +0000 Fix memory leaks, which corresponding with ODR out stream. Background: when result set has created and the record retrieve from cache that the Task Retieve to invoke send_present(), which allocate present APDU. APDU. commit 9fa5e9b2a5a3ba0644178d5ed85869a31ffe59f2 Author: Adam Dickmeiss Date: Fri Aug 23 14:27:18 2002 +0000 Preserve white space in data1. Strip in write of GRS-1,MARC,SUTRS commit fcbe67e161824f159620ed029a15bf42f719d0c8 Author: Adam Dickmeiss Date: Fri Aug 23 14:25:07 2002 +0000 Added conversions for ', & commit 424b34cfd7042e0c854ba2ca1f2cc656b61f3e46 Author: Adam Dickmeiss Date: Fri Aug 23 14:24:05 2002 +0000 Parse system entities commit b3b4ca03b140324f297525589a44c13c1f5e9dab Author: Adam Dickmeiss Date: Tue Aug 20 12:03:34 2002 +0000 Towards 1.8.9 commit 00a3858993442806aca78f82e28f88c5942dc135 Author: Adam Dickmeiss Date: Tue Aug 20 08:19:40 2002 +0000 Use elementSetName and syntax in record lookup in cache commit 87efa99fe797d07045266a5e0d876ac8b0e28a34 Author: Adam Dickmeiss Date: Mon Aug 19 21:09:10 2002 +0000 timeout option for ZOOM commit 0e8b1116b97d769ea233858fe3c2ced5d1da5d7c Author: Adam Dickmeiss Date: Sat Aug 17 07:56:59 2002 +0000 Updated version. Data1 compatibility fix for nodetomarc commit d82eeac05d2899fa30704e2c40e9dd603ff2c581 Author: Adam Dickmeiss Date: Sat Aug 17 07:55:51 2002 +0000 UNIX sockets commit 886a6a270e909137e3127ac4ce37c152a6e81c70 Author: Adam Dickmeiss Date: Sat Aug 17 07:55:38 2002 +0000 Fix commit 0441a493b34ad8a90d3ecc336a52a146d2794f13 Author: Adam Dickmeiss Date: Fri Aug 2 08:54:03 2002 +0000 Towards 1.8.8 commit 5f065af405ec0934b14756307d27eed69a3d9833 Author: Adam Dickmeiss Date: Fri Aug 2 08:20:31 2002 +0000 debian changes commit 069977745832f79608e732d7f1f433eade791f31 Author: Adam Dickmeiss Date: Wed Jul 31 14:06:29 2002 +0000 Enabling ILL in test server (again) commit 8b519a7e804301509a1bd7081f296da922e2afa1 Author: Adam Dickmeiss Date: Wed Jul 31 14:06:09 2002 +0000 Removed code that read dead pointer commit 32ff7687bdfe5b972d54b1ba4f3078cee011fadf Author: Adam Dickmeiss Date: Mon Jul 29 20:04:08 2002 +0000 created data1_createx and compatibility commit 3dcdf20f2ccc20554dc247f60281eb06111f0bf6 Author: Adam Dickmeiss Date: Mon Jul 29 19:51:34 2002 +0000 record fetch method ext that returns YAZ Z_External commit b4bd53509869a8fa32749b4cc9a00aae34a12ada Author: Adam Dickmeiss Date: Thu Jul 25 14:19:18 2002 +0000 EXPAT support on WIN32 commit 91e4c648cb5ba156f197059870050252d497bc4d Author: Adam Dickmeiss Date: Thu Jul 25 13:45:30 2002 +0000 iconv.dll commit a67cc28231d95548fda7d7b9626b0ead7eb0f13f Author: Adam Dickmeiss Date: Thu Jul 25 13:20:20 2002 +0000 Added private ODR header commit 0edfdd01ae95aa2770f2e122bdea25208494acbd Author: Adam Dickmeiss Date: Thu Jul 25 12:52:52 2002 +0000 Character set negotiation updates commit a0ff2572c63e4be9254b12d08b0166b6232477de Author: Adam Dickmeiss Date: Thu Jul 25 12:51:48 2002 +0000 Default timeout is 25 seconds commit 569f86b4615c2731727be2a0ff898d36f9725819 Author: Adam Dickmeiss Date: Thu Jul 25 12:51:08 2002 +0000 iconv conversions for ODR commit c903bb04318c52d60fd18b12aba1fe16ade8fc65 Author: Adam Dickmeiss Date: Thu Jul 25 12:50:16 2002 +0000 Updates to faciliate non-private character set negotiations commit 2947a1e4e735df14104e984b90f588cee8cc3ad3 Author: Adam Dickmeiss Date: Thu Jul 25 12:48:54 2002 +0000 Print @term commit 1b238b27b26f46bad4051ef9ea2a0244716bcdda Author: Adam Dickmeiss Date: Thu Jul 25 12:48:39 2002 +0000 Implement @term commit faad6e8d9b76ec323fd2c0facb30c5ff1d50ad13 Author: Adam Dickmeiss Date: Mon Jul 22 23:16:10 2002 +0000 Define SUN_LEN if undefined (Solaris) commit 2c530ea4045bf7a0c3895ea1ed31c222536d6143 Author: Adam Dickmeiss Date: Fri Jul 12 13:42:20 2002 +0000 Use _strnicmp on Windows commit f13b69ddee7417ad6430f6965982295e43ea687a Author: ja7 Date: Fri Jul 12 12:20:34 2002 +0000 Added new command ccl_parse which parses a ccl find command and print the qpn query for the given ccl find command. Changed to not coredump when retriving octet_alingned record the client is unable to handle. now it just telles about the error and treats the octets as sutrs. commit 79fb4b8deb48939a8d9e3fce48c7736eb3b1cf0b Author: ja7 Date: Fri Jul 12 12:11:33 2002 +0000 changed ccl_pr_tree to print as a qpn query instead of some infix notation commit 3422548c2ce84dce9283e9649588f82cc0cb5774 Author: Adam Dickmeiss Date: Thu Jul 11 10:40:50 2002 +0000 XML updates for print tree commit 0a39dcf0b6b38833a59e3deae198ef204cfee003 Author: Adam Dickmeiss Date: Thu Jul 11 10:40:34 2002 +0000 GRS-1 producer handles XML better commit 080575c92b35597c3beb394c23d2a1d22532bbdc Author: Adam Dickmeiss Date: Thu Jul 11 10:39:49 2002 +0000 XML readers handles iconv for unknown encodings commit f7fc04b3946c100bbc26d451fc3f47e368ecd224 Author: Adam Dickmeiss Date: Thu Jul 11 10:39:05 2002 +0000 Implement otherInfo%d setting commit 72593d004bbd59245c2c143e9806a384a2c2724f Author: Adam Dickmeiss Date: Fri Jul 5 16:04:28 2002 +0000 character conversion commit aeec32da5e13c9f46062d07ac3c16582dbd479c8 Author: Adam Dickmeiss Date: Fri Jul 5 12:42:52 2002 +0000 Keep white space for XML (do not pretty print) commit 751fc8b0c5b555a41feb9d8c0bf8ac71d5707d25 Author: Adam Dickmeiss Date: Wed Jul 3 14:09:34 2002 +0000 Changed MARC, GRS-1 handling to cope with new structure commit c3b984a6d1cf19b1731b7e783ae2c0fd539277ac Author: Adam Dickmeiss Date: Wed Jul 3 13:36:55 2002 +0000 unix sockets for zoom commit a774858896a9b56c966edbfb70d8eae1c91c4ad1 Author: Adam Dickmeiss Date: Wed Jul 3 10:04:04 2002 +0000 Extra root tag node for data1 commit c571556bb870d20c8047b4b4e837a9916733cda7 Author: Adam Dickmeiss Date: Mon Jul 1 12:59:12 2002 +0000 reconnect bugfix (when receiving close PDU) commit f576c6403441fc35f85a3e57f9423ff07d052de1 Author: Adam Dickmeiss Date: Tue Jun 18 21:30:38 2002 +0000 Fix warnings commit 2bdde7e3c49ae8dbc8da613f6554d6b7ae94c4e3 Author: Adam Dickmeiss Date: Tue Jun 18 21:30:25 2002 +0000 fix warnings. Indentation commit a2df70871ff2494610edf71f7c7c74b785a69cd6 Author: ja7 Date: Mon Jun 17 14:57:34 2002 +0000 Added support for adding tab completions to any command with out a build in completion function. add the folowing line to allow tab completion on element set name f2locations to the elements command register_tab elements f2locations som small clean up of the tabcompletions added completion on filenames to the set_apdufile set_marcdump . and ! commands now uses strncasecmp when findding stuff to complete on. eg format xml "tabcomplets to" format XML Extended authentication command to allow 2 arguments and send userid and password in the Z_IdAuthentication_idPass structure commit 8f3cccf67a99a23174b918872b0963f2c24b8cd6 Author: Adam Dickmeiss Date: Wed Jun 12 19:47:44 2002 +0000 Added Ko van der Sloot commit de70f47f9680c5fd7b3863f2a647d6dc760c2d98 Author: Adam Dickmeiss Date: Wed Jun 12 19:42:38 2002 +0000 Deal with Solaris recv that returns ENOENT commit d8b453a7e9a34f0254a3d9483a26add0aff3eb6c Author: Adam Dickmeiss Date: Mon Jun 10 11:07:57 2002 +0000 CCL always enabled commit f0c29efc372c97a94a32118de624b31c996d7ff5 Author: Adam Dickmeiss Date: Thu Jun 6 13:02:01 2002 +0000 CCL using xmalloc/xfree commit 6f41c38bc479344d4ecd347a607546dc95971efa Author: Adam Dickmeiss Date: Thu Jun 6 12:54:24 2002 +0000 Using xmalloc/xfree instead of malloc/free commit 9b24380fadc11b19041f1cde6da2ce02b7bf3572 Author: Adam Dickmeiss Date: Wed Jun 5 21:11:00 2002 +0000 NSIS bz2 commit b4c0c8a8dfcc63bd62b6104daf7d82062dc3e54c Author: Adam Dickmeiss Date: Wed Jun 5 21:10:16 2002 +0000 newer version commit c9c53d8b79a1d6283dcc446ed3f1292a4522a49c Author: Adam Dickmeiss Date: Wed Jun 5 21:09:20 2002 +0000 removed unused variables commit 20c29d8695afd66903288a1eabe259877b1dc79b Author: Adam Dickmeiss Date: Wed Jun 5 21:09:04 2002 +0000 added include commit f78b96e6645bb3309719a234ff68699d8fccb975 Author: Adam Dickmeiss Date: Tue Jun 4 11:36:10 2002 +0000 New COMSTACK: UNIX socket commit 827c292b2ffb8314a08f6a6352b68ead05d3ff62 Author: Adam Dickmeiss Date: Tue Jun 4 08:33:49 2002 +0000 dont return value in void commit a5c369a03734cbb9de4181fe294f409a0e655de4 Author: Adam Dickmeiss Date: Tue Jun 4 08:29:53 2002 +0000 ignore errors on del. commit 27e67487d8100738feb98ae7315540846d6bfdf0 Author: Adam Dickmeiss Date: Sun Jun 2 21:34:45 2002 +0000 Remove --enable-module option commit 9a7d52d3a1482c26ba7fb6c8aa2b74d4442c5cc3 Author: Adam Dickmeiss Date: Sun Jun 2 21:29:30 2002 +0000 Print more GRS-1 data types commit ddce0dd6eaf2b38def1cd1e04c6f7aac1eb5be6d Author: Adam Dickmeiss Date: Sun Jun 2 21:28:34 2002 +0000 Update definition to use explicit tagging for era CHOICE commit 67940e6310f39f7e289d48a7d1fbb577eca56686 Author: Adam Dickmeiss Date: Sun Jun 2 21:27:17 2002 +0000 First work on extended packages. Reconnect capability commit 507901d1ce2fee1278cdf2e7239b3087fb459ce6 Author: Adam Dickmeiss Date: Sun Jun 2 21:25:50 2002 +0000 Option to start a given number of connections on tst3 commit 152757332e4706017b02870c258edcead5575e72 Author: Adam Dickmeiss Date: Sun Jun 2 18:54:03 2002 +0000 Moved documentation commit 82529e23b0d26a3a8e107a5c826196ff17a32dbe Author: Adam Dickmeiss Date: Sun Jun 2 18:50:40 2002 +0000 Moved from /usr/share/yaz/doc to /usr/share/doc/yaz commit a384c3e843c6738f4648156371d1f95ba7e2dd2d Author: Adam Dickmeiss Date: Fri May 31 08:48:06 2002 +0000 Changed SectionIns for NSIS v1.98 commit df38683ebdd6534f3f7b3b3a45a7a63e74b2bb80 Author: Adam Dickmeiss Date: Thu May 30 20:57:38 2002 +0000 Spell fixes commit cff1ce5798328abf2ef7dce859b47ba1d9ec04f9 Author: Adam Dickmeiss Date: Thu May 30 20:57:31 2002 +0000 Updated PQF grammar commit 3fef09b4aaeb051928abf940049d138e5d73e20d Author: Adam Dickmeiss Date: Tue May 28 21:11:08 2002 +0000 No more @-tag for MARC commit 40de6aa3aafbf959d7fc3a1002e8a43874c77d7c Author: Adam Dickmeiss Date: Tue May 28 21:09:44 2002 +0000 schema mapping supports duplicate maps (copy instead of pointer swap) commit 7f3f56b0ee3a395f3570999a6c99a369b9e6a0cb Author: Adam Dickmeiss Date: Mon May 27 12:34:24 2002 +0000 Fixed is_indicator commit c6e53a084e3819438c2a1e7de947a655f708f15b Author: Adam Dickmeiss Date: Wed May 22 14:27:17 2002 +0000 Bump version commit 95328fb099ce6ba6d53322b02226d206d39af429 Author: Adam Dickmeiss Date: Wed May 22 11:34:31 2002 +0000 New version commit c7530a9d87527da7ea5f53b2e255179ce6ebefab Author: Adam Dickmeiss Date: Wed May 22 11:33:52 2002 +0000 New version. commit 751c149afdcefae54743ad78a6abac853aa81ea2 Author: Adam Dickmeiss Date: Wed May 22 11:19:34 2002 +0000 Towards 1.8.7 commit 1344028e56cd1456543fca8ef4889b053cf667a3 Author: Adam Dickmeiss Date: Wed May 22 11:19:20 2002 +0000 Spell fixes commit 5f20d0ca24f3ab6ff9cc5c1532760782387d038e Author: Adam Dickmeiss Date: Tue May 21 19:39:57 2002 +0000 Fix warning commit e8d17b7385e448e2b3f4ba3ff6426ecd543ed97e Author: Adam Dickmeiss Date: Tue May 21 08:36:03 2002 +0000 Minor changes to avoid warnings commit d9dfda0bf340a35a062c42d566a2390c1f5bc447 Author: Adam Dickmeiss Date: Tue May 21 07:43:16 2002 +0000 Comment node. Extra root level for XML parsed data1 commit 29b509a56dc168a85a584454cc89ad61662536b0 Author: oleg Date: Mon May 20 09:13:39 2002 +0000 Fixed using random values commit 73453b196192a42ea0ef9c26e0a1a0cc759fd105 Author: oleg Date: Sun May 19 15:39:54 2002 +0000 Added second part of helper functions for CharSetandLanguageNegotaiation-3 Model. Work with client/zoomsh. commit 1cd88a77abb7c32e5ff938e2f4b9392d03d45ec5 Author: oleg Date: Sat May 18 09:52:37 2002 +0000 Added support of CharacterSetandLanguageNegotiation-3 modele (based on Z_PrivateCharacterSet_externallySpecified) at the client side. commit 379c41a9a422911c58dc6a6db5f16eae56f22a7d Author: oleg Date: Sat May 18 09:41:11 2002 +0000 Helper function for Charset and Lang Negotiation 3 commit b52f95652272f117311f5ec35e61037589f7671e Author: Adam Dickmeiss Date: Fri May 17 12:52:02 2002 +0000 1.8.7.2 commit 2af1d65a7126d623ab596d831d6bc4257d75a051 Author: Adam Dickmeiss Date: Fri May 17 12:48:29 2002 +0000 Use __stdcall convention for ZOOM on WIN32 commit 1ba53c96f39c811c73af6f892136e21a2d2c246b Author: Adam Dickmeiss Date: Fri May 17 10:00:42 2002 +0000 Minor version update commit 2ec8a2e3d3ab021b9cfa40789e567f2dd9451996 Author: Adam Dickmeiss Date: Fri May 17 08:48:08 2002 +0000 New CCL feature commit e681255d9d97d3533049ec2d8cc836a72a03ebb0 Author: Adam Dickmeiss Date: Fri May 17 08:46:01 2002 +0000 Attributes from multifields may be OR'ed rather than merged commit 1449a89e77faaba24d3d35b4f08156452b8ec9b7 Author: oleg Date: Tue May 14 13:42:26 2002 +0000 Fixup random 'len' commit dccf2111a2f7bed8ac96b29565b691c6413941c9 Author: Adam Dickmeiss Date: Mon May 13 18:34:53 2002 +0000 removed yaz-date.h commit 651ccb74d12f2968e791b3f411a6c55bca68428a Author: Adam Dickmeiss Date: Mon May 13 14:13:37 2002 +0000 XML reader for data1 (EXPAT) commit 848e461264a05c14f4ced38f2df25c2232779fdd Author: Adam Dickmeiss Date: Tue May 7 11:02:56 2002 +0000 data1 backwards compatibility commit ec280185445fa342a6bf2f6a12ab3d29bbd1e54c Author: Adam Dickmeiss Date: Tue May 7 11:01:59 2002 +0000 server stops if bad listen address is given commit 685c6aaf6bf432a0de5e5f8c30a12629e7d26571 Author: Adam Dickmeiss Date: Tue May 7 11:01:14 2002 +0000 added include of ctype.h commit 6361856cbc8d8ddd689ce877dfb04c939504da03 Author: Adam Dickmeiss Date: Tue May 7 11:00:58 2002 +0000 Fixed memory leak (for proxy op) commit c705d85265b57bb0c4a8cca018274dde05142ee8 Author: Adam Dickmeiss Date: Mon May 6 07:33:50 2002 +0000 Fixed ZOOM connect for OpenBSD commit 901baaebec20b6465688280e05b02063208cbd5e Author: Adam Dickmeiss Date: Mon May 6 07:31:48 2002 +0000 Added Oleg Kolobov commit ffe5c37f0c9f55a685ac3559f1cad44baae399f4 Author: Adam Dickmeiss Date: Fri May 3 13:48:27 2002 +0000 data1 cleanup commit 48bd65a2f5bda9d3407d92137524c14d288ec074 Author: Adam Dickmeiss Date: Fri May 3 13:47:57 2002 +0000 check for rl_completion_matches commit 68446ede1353ec9912620dbbbc5ac756bee7d78d Author: Adam Dickmeiss Date: Thu May 2 10:35:44 2002 +0000 Index Data logo commit ed00497d5186ebac1435b0f5e1ef2fe732cfa05c Author: Adam Dickmeiss Date: Wed May 1 10:22:52 2002 +0000 Never treat @op as operator in quotes commit f44aed624693cd65d1c2f780452eb9aa6c339bdb Author: Adam Dickmeiss Date: Thu Apr 25 08:34:08 2002 +0000 fix zget of ExtendedServicesResponse commit 41f4872a24c96468bebeabc65398144c75d04f2f Author: Adam Dickmeiss Date: Thu Apr 18 13:18:47 2002 +0000 rename var to avoid GCC warning on OSX commit 695e6df9fce9b838cb3fe8f49b211ed99943caef Author: Heikki Levanto Date: Tue Apr 16 13:04:20 2002 +0000 Added log level flag LOG_MALLOC, moved malloc entries there. Now LOG_DEBUG can again be used for something real... commit 1f4ebcf4fbc8183c69b79b2b8ea86030732bb659 Author: Adam Dickmeiss Date: Mon Apr 15 12:03:39 2002 +0000 Fix test for rl_completion_over commit 2e817711bcfc8076b2500ab298e281357ed50115 Author: Adam Dickmeiss Date: Mon Apr 15 11:19:32 2002 +0000 Fix rl_attempted_completion_over commit 47f8bbd041e610b13dd25153872dfef2aa288c52 Author: Adam Dickmeiss Date: Mon Apr 15 09:44:41 2002 +0000 Using AM_CPPFLAGS instead of INCLUDES commit a9950f112b740bd1b6a2ccf20a584995608d26d6 Author: Adam Dickmeiss Date: Mon Apr 15 09:06:30 2002 +0000 Fix explain tags for XML writer commit ce44e106e7e56e264fd31795df50cd7581074ef3 Author: Adam Dickmeiss Date: Sun Apr 14 21:27:47 2002 +0000 add -pthread to LIBS for BSD commit ed79b7e1cc7717263edf485ca88d02eb117842a7 Author: Adam Dickmeiss Date: Sat Apr 13 18:09:01 2002 +0000 Fix help (should not wait for network I/O) commit 15441888880455587ad55891b2c3bc00336b8925 Author: Adam Dickmeiss Date: Fri Apr 12 14:40:20 2002 +0000 New private OID: IDXPATH commit e2f1c5070b1e64987f07f4fe7fa04dad55131264 Author: Adam Dickmeiss Date: Fri Apr 12 14:40:07 2002 +0000 GRS-1 writer accepts non-abs commit 6f079c85f0136946c6a36ebe778dd2b1b95993d9 Author: Adam Dickmeiss Date: Mon Apr 8 13:56:02 2002 +0000 Year range in copyright commit 0804c970f7c9926167055fd77cfc8a72c7271fa6 Author: Adam Dickmeiss Date: Mon Apr 8 11:40:41 2002 +0000 Fix for old readline commit c364aecd1a65c4d6bbc8fb97bd6949654ba9047f Author: Adam Dickmeiss Date: Fri Apr 5 12:49:13 2002 +0000 Fix return value of yaz_fclose. commit a1743ee8f71f729c1cc264e70d926b0908f77adc Author: Adam Dickmeiss Date: Fri Apr 5 12:46:07 2002 +0000 yaz_fclose and yaz_fopen implemented commit 98f0cc2d7eeed27912edb88bf16512bb622b19ee Author: Adam Dickmeiss Date: Thu Apr 4 20:49:46 2002 +0000 New functions yaz_is_abspath, yaz_path_fopen_base commit a45657fa0bf44a3064c4a42aad9d584b54891ecb Author: Adam Dickmeiss Date: Mon Apr 1 12:27:15 2002 +0000 Fix OID for ILL commit 395e1d0a3cdda0339d5476abd0437b20cd5098a6 Author: Adam Dickmeiss Date: Mon Mar 25 15:12:25 2002 +0000 Towards 1.7 commit 925f96038d281108c0a35e8bf35c4b15ff857afb Author: Adam Dickmeiss Date: Mon Mar 25 11:37:34 2002 +0000 Spell fix commit 3f54f6b4978f7a9c8fe6c1038931e097c3db5436 Author: Adam Dickmeiss Date: Mon Mar 25 11:37:10 2002 +0000 Service removed on uninstall/reinstall. commit 4dc9f274364e1f19d7839651bb402aaa310c88b7 Author: Adam Dickmeiss Date: Mon Mar 25 09:52:10 2002 +0000 Release date commit 4fcd0761b175c5b4d9a2eb98a99b6c8b7ca06018 Author: Adam Dickmeiss Date: Sun Mar 24 16:30:40 2002 +0000 Fix changelog commit da8068b4715e046e3d4592834f9bb9d5c9dac855 Author: Adam Dickmeiss Date: Sun Mar 24 16:19:23 2002 +0000 PQF feature: @use=value commit 397cccc3b0eeca050b002d96cefb8e042e4d2cbf Author: Adam Dickmeiss Date: Sun Mar 24 10:14:46 2002 +0000 Docbook autoconf for Redhat 7.2 commit b00cf9baf686ed72f826b69f2f731acb26698d10 Author: Adam Dickmeiss Date: Sat Mar 23 21:13:20 2002 +0000 remove make dependancy to prevent re-build on Redhat w/o docbook commit 914ee48f616bd669160d8c7be4fb7b2e0b77b8a2 Author: Adam Dickmeiss Date: Sat Mar 23 20:35:51 2002 +0000 Added zoom.scan.html commit 08ad39c1859f230c41588ee8b0961a35e4769ead Author: Adam Dickmeiss Date: Sat Mar 23 20:09:52 2002 +0000 Minor fixes for Debian build commit 1cfbd69fb907cb908ea062ef66de1594b5d54858 Author: Adam Dickmeiss Date: Sat Mar 23 02:03:52 2002 +0000 Debian package update commit 3bb2e157affd19490974257a252472716d7858b3 Author: Adam Dickmeiss Date: Fri Mar 22 23:44:55 2002 +0000 Fix -Iinclude for SSL objects commit ce8f4513ad7d16a5c77f9d1c57b4a57d6163e62b Author: Adam Dickmeiss Date: Fri Mar 22 20:53:13 2002 +0000 Duplicate use of include in SUBDIRS commit 96809bad943557af7ac0d01d78ed7fc18dc18436 Author: Adam Dickmeiss Date: Thu Mar 21 21:30:44 2002 +0000 --with-dtd, --with-dsssl commit 828c5ea4da2289925cbb665082b9e6df304812bb Author: Adam Dickmeiss Date: Wed Mar 20 14:36:00 2002 +0000 Additional Search Info for GFS commit a8fce80377e8bbbbbed33aa4d8927d1a53606f8a Author: Adam Dickmeiss Date: Wed Mar 20 14:35:42 2002 +0000 Display of USR.1:SearchResult-1 commit 6c30fd44237a06db6d45c0bdfa2bc4e334822341 Author: Adam Dickmeiss Date: Tue Mar 19 13:48:27 2002 +0000 Added include of ctype.h commit eb14cf14b5b176a8e2b73ca251d625e47223f116 Author: Adam Dickmeiss Date: Mon Mar 18 21:33:48 2002 +0000 MARC records embedded in C code for test server commit 0e81a96bebc0be43fc2972332091cdac57dcac5f Author: garkier Date: Mon Mar 18 21:16:55 2002 +0000 Ooops forgot this commit 4313aaf9f4f4dc830272bc5bdf15d44eaf4c278c Author: garkier Date: Mon Mar 18 21:14:16 2002 +0000 Heavy modification of debian/rules to allow easy building of -ssl and non-ssl versions Added yazrelease target to debian/rules Added postinst file to run ldconfig at install Added copyright file to make lintian whine less about missing it commit d50425318f3ef8e1fce265519eb8ce2dcfaa51b8 Author: Adam Dickmeiss Date: Mon Mar 18 18:21:33 2002 +0000 Comment about JZKit commit c4d8d77293c838ebb69fc2dbafe12a0d39599d1b Author: Adam Dickmeiss Date: Mon Mar 18 18:14:34 2002 +0000 Fixed CCL parsing of "field = - " commit 635dd986bff70edc8e8c39067bcc702e59215b56 Author: Adam Dickmeiss Date: Mon Mar 18 18:11:45 2002 +0000 MARC to XML ala JZKit commit 22f4e21c81ec94ad74eb7a329482cbe4a836cec9 Author: Adam Dickmeiss Date: Mon Mar 18 12:22:00 2002 +0000 Separate SSL libs for yaz-config commit 2b381dfe4c8f63130ce32e1117adf9e6be5cfa3b Author: Adam Dickmeiss Date: Sat Mar 16 17:37:40 2002 +0000 YAZ Runtime section (instead of yaz core) commit d476a8f3c038ba61a22c56415d68bc3ab22102c6 Author: Adam Dickmeiss Date: Sat Mar 16 12:48:47 2002 +0000 Shortcuts to start/stop service commit c63109c0af72dca3fc9b677c56797fa47b874908 Author: Adam Dickmeiss Date: Sat Mar 16 11:58:41 2002 +0000 Moved memdebug section commit a998e2bd0539fc9b719d89c45aa9127bbcb6a191 Author: Adam Dickmeiss Date: Sat Mar 16 11:48:32 2002 +0000 NSIS in changelog commit f722c8d9517ec491e2469cdc91a3751dd5e7a6df Author: Adam Dickmeiss Date: Sat Mar 16 11:46:18 2002 +0000 buildconf.sh more verbose commit 8e0cda1d5cd32573e71ba7246df71b2e1a3815a4 Author: Adam Dickmeiss Date: Sat Mar 16 11:45:00 2002 +0000 YAZ version auto-set in yaz.spec commit 109d9dfc07c2d1ddfa11e1f94ced487b4b5e7f31 Author: Adam Dickmeiss Date: Sat Mar 16 11:29:39 2002 +0000 yaz.xml modified by configure commit f1d9f7b3b3ba4e39f261f9b820dad51b8754549c Author: Adam Dickmeiss Date: Sat Mar 16 10:26:57 2002 +0000 Added NSIS rules (nmake nsis). commit e8f6432fc09babe4f948feef34b5114630a4ee88 Author: Adam Dickmeiss Date: Fri Mar 15 23:03:33 2002 +0000 Files that have version info in them commit cd4a54ee4548064f2a0538be34b54c16ccd4f965 Author: Adam Dickmeiss Date: Fri Mar 15 19:44:16 2002 +0000 fix for license.txt location commit b59881c24b105f2d56b304b1d33c74eecca3ace8 Author: Adam Dickmeiss Date: Fri Mar 15 19:32:39 2002 +0000 NSIS script. commit 0c88a5e1fc983f0bb653e26a6eac72dadf35db57 Author: Adam Dickmeiss Date: Wed Mar 13 11:47:23 2002 +0000 *** empty log message *** commit 09abca5ee8cb11137decdfa7d10b822173ad5fe1 Author: Adam Dickmeiss Date: Wed Mar 6 01:38:51 2002 +0000 Add yaz-date.h again commit 3baa4049b64103161bfc03360cfd61683faacd22 Author: Adam Dickmeiss Date: Wed Mar 6 01:22:41 2002 +0000 help for individual commands commit 903a4639c844273b73984ab9909835858d756b39 Author: Adam Dickmeiss Date: Wed Mar 6 01:21:59 2002 +0000 Docbook 4.1.2. commit b3a9e58543972f70ed7729d8aee2dab0814b023d Author: Adam Dickmeiss Date: Wed Mar 6 01:21:38 2002 +0000 Fix win version. commit ea5dd493ff58ce3460bd38560f35c7a1e7913fc4 Author: Mike Taylor Date: Tue Mar 5 12:45:48 2002 +0000 Add trivial support for implementation_id specified by backend. commit 6016e05970b4b20968c9750b6612e2db2c85d21e Author: Adam Dickmeiss Date: Thu Feb 28 14:28:40 2002 +0000 MARC dump utility prints either line mode or XML commit 08e514143cd7d16db15c1c3d4d15d687f561c047 Author: Adam Dickmeiss Date: Thu Feb 28 13:21:16 2002 +0000 MARC to XML conversion commit a97dab98e81128f07806d68b6891dbf65c732ede Author: Adam Dickmeiss Date: Sun Feb 24 12:24:40 2002 +0000 Removed C++ comment and empty statements/declarations commit 51d28a42486be5dd8bef3e09097d40eeacc94377 Author: Adam Dickmeiss Date: Sun Feb 24 12:23:43 2002 +0000 Fixed a few entities commit 7d1177ec1279066b5a3f12d49719344a377cf65d Author: Adam Dickmeiss Date: Wed Feb 20 14:52:39 2002 +0000 More info about decoding bug. commit 64e3a0e47be43804790df096797f55b4f0aa1d55 Author: Adam Dickmeiss Date: Wed Feb 20 14:47:05 2002 +0000 --disable-memdebug works commit 6874b8022eafb0d96fb45488db1dd01f81fa0a74 Author: Adam Dickmeiss Date: Wed Feb 20 14:42:30 2002 +0000 Fixed BER decoding of OPTIONAL CHOICE commit 797d7682876245f74600966fd1fee224cde354f2 Author: Adam Dickmeiss Date: Wed Feb 20 14:42:04 2002 +0000 Added--enable-memdebug commit 5bbfeaca272b9e5f384c2677893a249fa3461b0e Author: Adam Dickmeiss Date: Wed Feb 20 14:41:19 2002 +0000 Using printf instead of putchar commit 70c49c4cc7bd32eeaed7b88a82f43d50ee28ff20 Author: Adam Dickmeiss Date: Wed Feb 20 14:40:42 2002 +0000 Use printf instead of putchar commit 840a4ec014e70059d147b4ded3548df191c79687 Author: Adam Dickmeiss Date: Tue Feb 19 20:02:40 2002 +0000 Ignore SIGPIPE on systems that cannot prevent signal on send (Solaris) commit a92a7ff2538ad0d9e7b85edf860f2e6cd0a9bed4 Author: Adam Dickmeiss Date: Mon Feb 18 12:57:03 2002 +0000 No MARC decode of MAB (Stefan Lohrum) commit 8c45d04ab481f1dfa7527b88c5c56b291d9525f6 Author: Adam Dickmeiss Date: Mon Feb 18 12:54:02 2002 +0000 Avoid MARC decoding of MAB. commit 7ac6d7c142bea56f87d13f6bcb2d5adf7593691f Author: Adam Dickmeiss Date: Tue Feb 12 21:12:39 2002 +0000 Client prints new init options commit bd805d259bd25686f0e7d4a4bbe4b0f084cff805 Author: Adam Dickmeiss Date: Tue Feb 12 21:11:49 2002 +0000 Fixes for C++ reserved words commit 5c1c250634b4e4637f6942820e792d8d43031ba2 Author: Adam Dickmeiss Date: Tue Feb 12 15:59:12 2002 +0000 added z-charneg.obj commit c34d71d35aceed27cf7e30e6b329a235b48b9ccd Author: Adam Dickmeiss Date: Mon Feb 11 23:25:26 2002 +0000 Rustam's patch commit 8f15e8046e0de12e8083ba941c60f854559cb6c3 Author: Adam Dickmeiss Date: Mon Feb 4 21:05:28 2002 +0000 About Jacobs new commands commit 45a49b20c100086a32c50a0b2fa2feb0349a5033 Author: Adam Dickmeiss Date: Mon Feb 4 21:04:56 2002 +0000 It's 2002 commit 24c726523c505a153e2699fb67433ed14e098bf8 Author: Adam Dickmeiss Date: Sun Feb 3 09:04:55 2002 +0000 Added tabcomplete.h to SOURCES commit cb155b985e5e12149885c5ac8c725cbfd3eff3bc Author: Adam Dickmeiss Date: Sun Feb 3 08:44:48 2002 +0000 Release info. commit f38ccae4f7469843c30a7e742990ff8c51d2fd14 Author: Adam Dickmeiss Date: Fri Feb 1 23:59:49 2002 +0000 Fix memory leak. Disable readline for non-tty commit ad66342a43af360062a0ab12b351676828055b35 Author: Adam Dickmeiss Date: Fri Feb 1 14:59:22 2002 +0000 Changes. commit 8e8cb340836e3ffd48d464755903f6795754a226 Author: Adam Dickmeiss Date: Fri Feb 1 14:50:29 2002 +0000 MARC fix for Danmarc. commit 7401a51ed865b1dcdf5905b2bc6c793dc023416e Author: Adam Dickmeiss Date: Wed Jan 30 22:02:03 2002 +0000 WIN32 updates for YAZ client. commit febe52bd5496c1eb81b322499206f7bc43a76b5b Author: Adam Dickmeiss Date: Wed Jan 30 16:58:46 2002 +0000 Changes. commit c142c150b731e1dde2a1aef89fb3b326ea88cace Author: Adam Dickmeiss Date: Wed Jan 30 14:51:45 2002 +0000 YAZ client features: Command completion and new commands: push_command, set_apdufile, set_marcdump, set_cclfields, register_oid. CCVS: ---------------------------------------------------------------------- commit 2984a4a74dbbe7aaf4f07788ae4785041cf6004a Author: ja7 Date: Tue Jan 29 20:17:41 2002 +0000 Changed to flush apdu and marc log files a apdu is recived. Changed to remove blanks at end of commandline. Added source of $HOME/.yazclientrc and ./yazclientrc on startup added the folowing commands push_command - adds the rest of the line to set_apdufile - change apdu logfile from commandline set_marcdump - change marcdump file form commandline set_cclfields - change Ccl2rpn config file register_oid - regristrate a private oid Cleandup the tabcompletion and when it compleates on filenames. added completions for the follwing commands push_command format schema attributeset querytype new pr. command completion is placed in tabcomplete.[ch] Current problems: - the tabcompleation code is leaking - not mutch bot leaking. Added emacs local versiables comment for tabs config to client.c commit 506058d7a9f17fcc88f899d92476fe59cc09bdfb Author: Adam Dickmeiss Date: Tue Jan 29 13:47:33 2002 +0000 New call oid_trav. commit 08e079756cdb1cd5da5779e1833b6065d07292d3 Author: Adam Dickmeiss Date: Mon Jan 28 09:27:48 2002 +0000 ZOOM_record_get returns const char pointer instead of void. C++ compile. commit e0189c067378b23b5bd64b60c9b2f326f860a66f Author: Adam Dickmeiss Date: Mon Jan 28 09:26:42 2002 +0000 SR protocol no longer supported. commit 524904b45367ae17d287704bdbbe0744866fdd23 Author: Adam Dickmeiss Date: Mon Jan 28 09:26:14 2002 +0000 C++ compile. commit 5754b092c42f45eeac52fb1223e51e2a11c92653 Author: Adam Dickmeiss Date: Mon Jan 28 09:25:38 2002 +0000 IdPass authentication. commit f347eed7eaf5fc499d7a56d20084184ebce4aa9e Author: Adam Dickmeiss Date: Mon Jan 28 09:25:08 2002 +0000 Added documentation about source (.) and system (!) commands. commit 941802d34a3752e3ce2c96f1d4df2fb1a51591c1 Author: Adam Dickmeiss Date: Sat Jan 26 20:58:11 2002 +0000 More changes. CHCVS: ---------------------------------------------------------------------- commit 8e5a0692fb8d5d4d852eeb9782848d87ad25bfde Author: Adam Dickmeiss Date: Sat Jan 26 20:50:59 2002 +0000 Fix raw attribute sets (bug introduced by previous commit). commit fde978ee5097a46b9a162dcff3b4b15d24c8c82f Author: Adam Dickmeiss Date: Sat Jan 26 19:20:25 2002 +0000 Function data1_pr_tree prints XML attributes. commit 3ac26d1524a5f5988adfa2f40c00a0d0e3094978 Author: Adam Dickmeiss Date: Fri Jan 25 13:38:00 2002 +0000 Added Hans van Dalen. commit 505e0b7b02818b70cca8f1e911348a0da49ebdd0 Author: Adam Dickmeiss Date: Thu Jan 24 19:33:09 2002 +0000 Fix memory leak for MARC record management. commit 57a4650104210f5e0bd9b6e0dbde0690000c1dc1 Author: Adam Dickmeiss Date: Wed Jan 23 22:40:36 2002 +0000 Retrieval of post script files. -k option for client. commit 16bbe562b92ceb5129c779a2d772c068d6de028f Author: Adam Dickmeiss Date: Wed Jan 23 21:13:30 2002 +0000 More fixes for scan. Non-zero stepSize handled. OID's fixes. commit 05c2cf51484b104fe8cb8211b27b4d257b7865b8 Author: Adam Dickmeiss Date: Wed Jan 23 20:25:42 2002 +0000 Function p_query_rpn returns 0 for unknown attribute set. commit 5c08a4b4de3ef50d6842d5604a34238e200f7716 Author: Adam Dickmeiss Date: Wed Jan 23 20:22:49 2002 +0000 Name "GILS" is an attribute set (again). commit caaf64e73cf587d0e3092b67d5a647f3477ff970 Author: Adam Dickmeiss Date: Tue Jan 22 10:56:22 2002 +0000 Added Shigeru Ishida. commit a57b3c893b5eac42f8351f39331c7188e3abcd99 Author: Adam Dickmeiss Date: Tue Jan 22 10:54:46 2002 +0000 MARC decode fix. Attribute set fix for scan in server. Prox logging. commit d83cfde85ccff3bfb2d45515516c9c15bc785ebb Author: Adam Dickmeiss Date: Mon Jan 21 21:50:32 2002 +0000 SSL/COMSTACK updates. cs_rcvconnect completes SSL handshake. commit d6a829eb574e632408252cca4a65b8e7ff46e0fe Author: Adam Dickmeiss Date: Mon Jan 21 12:54:06 2002 +0000 More example code to handle Extended Services Update. commit ddc774841cef996601b73943f2bccada563af0b9 Author: Adam Dickmeiss Date: Thu Jan 17 23:22:40 2002 +0000 More (dummy) response for Item Order. commit 55003dbfec0492fabba2dcfaffc7a4c698742f98 Author: Adam Dickmeiss Date: Thu Jan 17 21:04:43 2002 +0000 Added check for fnmatch.h. commit 1728b7ac3f56d5dee9983d55a928a5609f811abd Author: Adam Dickmeiss Date: Thu Jan 17 21:04:24 2002 +0000 Reports Database unavailable unless "Default" is specified. commit 73696559c68178180ea533cd501fbdad3a7ff76e Author: Adam Dickmeiss Date: Thu Jan 17 21:03:36 2002 +0000 More diagnostics in log. commit b51db7b9db7ca8f8871f91f90683cd03c88bb4ea Author: Adam Dickmeiss Date: Fri Jan 11 20:26:11 2002 +0000 Option --with-openssl now works when directory is specified. commit 45a927f17e07369aa55e6c4971429e369eb2d103 Author: Adam Dickmeiss Date: Fri Jan 11 20:17:03 2002 +0000 Towards 1.8.5. Option -u for YAZ client. commit dc2ce7c4eed571234ed4f155834643f0c452b2ce Author: Adam Dickmeiss Date: Fri Jan 11 20:16:47 2002 +0000 YAZ client documenation updates. commit 1c990926c6fddba74f38f4c2bcd701d1994a5e1b Author: Adam Dickmeiss Date: Wed Jan 9 12:44:31 2002 +0000 ZOOM fix: fatal errors aren't reset. commit 4e8503c8c711511071c175bffc064c34bcbccfc3 Author: Adam Dickmeiss Date: Wed Jan 9 11:03:41 2002 +0000 ZOOM_record_get returns ISO2709 buffer when "raw" is given. commit 27f0a94af679e84cc738dbe2fa81f815025c3dbc Author: Adam Dickmeiss Date: Thu Jan 3 23:14:09 2002 +0000 Fix date. commit 9b9450232c6edcb5c34097bce758eca96ecc8b3c Author: Adam Dickmeiss Date: Thu Jan 3 22:44:17 2002 +0000 Date change. commit 394e5e325d9f2a4f5189aac7628cbb672118fb46 Author: Adam Dickmeiss Date: Thu Jan 3 22:41:18 2002 +0000 Minor. commit c09e535f7e2e835d4cfbe7833708656f200cfb3d Author: Adam Dickmeiss Date: Thu Jan 3 22:38:35 2002 +0000 Spell fix. commit cd8a27308e5bb886f561b517d091437c7afbf53c Author: Adam Dickmeiss Date: Thu Jan 3 12:18:37 2002 +0000 More options handling for scan. commit 0a34c1d78a7db63a70bbd43ee8efa93ef75488bc Author: Adam Dickmeiss Date: Thu Jan 3 12:09:01 2002 +0000 New copyright. commit 09364dc78e750fb5507a3586a8c1a4d0a25e6315 Author: Adam Dickmeiss Date: Thu Jan 3 10:23:46 2002 +0000 WIN32 fixes. commit 526ab3aa282b1e732814846655eefc199f3f5106 Author: Adam Dickmeiss Date: Thu Jan 3 10:23:33 2002 +0000 Using _vsnprintf on WIN32. commit 3599bbc013ec757862d8a2d6e62aa6a432ba4514 Author: Adam Dickmeiss Date: Wed Jan 2 10:30:25 2002 +0000 More on scansets. commit eab4041057c94f4fd3feffd76c1f987ca67da1c3 Author: Adam Dickmeiss Date: Sun Dec 30 22:21:11 2001 +0000 Scan for ZOOM. commit bd67bd91a1ef6340ba08db039aa04b6fc424fc8d Author: Adam Dickmeiss Date: Fri Nov 30 08:24:05 2001 +0000 New ZOOM option schema. commit 05238a71314c7a256a2c1c7c20d74fb75d8f7e6a Author: Adam Dickmeiss Date: Wed Nov 28 23:00:19 2001 +0000 ZOOM Task structure includes start and count for retrieval. commit cb9bad819f13e44d7af6753bfa1bc8274ca37b9b Author: Adam Dickmeiss Date: Tue Nov 27 22:38:50 2001 +0000 CCL qualifier aliases (use OR for more than one qualifier). commit 590c128319e6987f82f3e798b12173c5ecf197b4 Author: Adam Dickmeiss Date: Tue Nov 27 22:12:24 2001 +0000 Fix and remove OSI reference. commit d8bf5f7a48d0abb1db4bcb6ffceb74f2df8eae76 Author: Adam Dickmeiss Date: Thu Nov 22 11:04:48 2001 +0000 Fixed dup display of records (bug introduced by previous commit). commit c5634aa19153b7b36e6de5a8e5b4536d69b2b7a1 Author: Adam Dickmeiss Date: Thu Nov 22 09:45:31 2001 +0000 Implemented named result sets handling for ZOOM. commit 1cee858bb7ac87aa71e865acb0cdfd64646efa0b Author: Adam Dickmeiss Date: Thu Nov 22 09:45:03 2001 +0000 More verbose server. commit 398b30f86d12b3b14c7d389325164ee2df7836b9 Author: Adam Dickmeiss Date: Wed Nov 21 11:13:13 2001 +0000 New client commands: . (to source YAZ client commands) and ! (to execute shell command). commit c76c4dad2e55e50b26d35855e3f782f2c038d3a5 Author: Adam Dickmeiss Date: Tue Nov 20 10:52:07 2001 +0000 Fixed changes. commit d7c297ae11eae74257636c143bb7e02041c00f59 Author: Adam Dickmeiss Date: Tue Nov 20 09:25:45 2001 +0000 Debian build script part of make dist. commit 598c8178dc444f596d5bd6111b4fed52745cad5e Author: Adam Dickmeiss Date: Mon Nov 19 20:43:39 2001 +0000 No "copy" of source for thread/malloc libraries. commit 981369ab5234a8cb305042db7ad61f1e277900b5 Author: Adam Dickmeiss Date: Mon Nov 19 14:06:11 2001 +0000 More about authentication. Remove SR references. commit 2725f6883ebf5be89639b28969b05b4d203da802 Author: Adam Dickmeiss Date: Mon Nov 19 09:17:12 2001 +0000 changes. commit 7f0e24a73392b1288b117ee46482f58f471ea094 Author: Adam Dickmeiss Date: Mon Nov 19 09:16:37 2001 +0000 Using AM_CFLAGS instead of CFLAGS. 1.8.3 closer. commit 90ed644b177c035f174b3aad8be47bf155940d17 Author: Adam Dickmeiss Date: Sun Nov 18 23:17:45 2001 +0000 YAZ client uses setnames only if target supports it. commit 13671e7cc0f3dd4e4b02f94d64a50778c5696ba6 Author: Adam Dickmeiss Date: Sun Nov 18 21:14:22 2001 +0000 Prefix ZOOM_ instead of Z3950_. Documentation updates. commit b340923765c14d2ba050a171bb557474044d7e6a Author: Adam Dickmeiss Date: Sun Nov 18 21:05:13 2001 +0000 nmem revert fix: Set nmem_init_flag=0. commit c82a7ebce851c96c8c769c2ec4f4b2121a446e19 Author: Adam Dickmeiss Date: Fri Nov 16 10:18:20 2001 +0000 Fix: Remove new-lines from commands in ZOOM shell. commit fd2f1538cdb20385c2c267d318c59d567eb3d242 Author: Adam Dickmeiss Date: Fri Nov 16 09:52:39 2001 +0000 Removed Z3950_connection_host. commit 15f2d80b134fa41e213f6328440d1a25f80efd97 Author: Adam Dickmeiss Date: Thu Nov 15 21:59:40 2001 +0000 Client prevents "present request out of range". commit 02da040a0671d09dfe19790a53ff6408740e7cde Author: Adam Dickmeiss Date: Thu Nov 15 21:58:50 2001 +0000 More about ZOOM options. commit 5a7dc8a6745f24127f408db53cdc613fb6a41b1f Author: Adam Dickmeiss Date: Thu Nov 15 21:44:48 2001 +0000 Removed log .. commit 366e11a6ab3c8cb8d12558ff1d76566c5ebca80e Author: Adam Dickmeiss Date: Thu Nov 15 13:16:02 2001 +0000 ZOOM: Separate get/set for dealing with options. commit 806d40e9fc4341a0366dac49291f7cb5ca79809f Author: Adam Dickmeiss Date: Thu Nov 15 09:16:37 2001 +0000 More thanks. commit d00666d5391066b1acba398090170d3766ec7e4f Author: Adam Dickmeiss Date: Thu Nov 15 08:58:28 2001 +0000 ZOOM: record objects "owned" by result sets. Added Z3950_record_dup. commit fd4adcc80d442f84c6a1894e890b1b6ccd02615e Author: Adam Dickmeiss Date: Tue Nov 13 23:00:42 2001 +0000 Separate malloc debug library. Removal of ASN_COMPILED-#ifdefs. commit 78942f568d83ea621661bfcd2d3f25eee3d316a1 Author: Adam Dickmeiss Date: Tue Nov 13 22:57:03 2001 +0000 More work on event queues. *_option returns new value (not previous). commit 22af523e3a7da990757ab1edab65ac258eacefbd Author: Adam Dickmeiss Date: Mon Nov 12 12:04:49 2001 +0000 1.8.2. commit 0d3b35dc83e1838c199ea9d7f6e670de50df6bdb Author: Adam Dickmeiss Date: Mon Nov 12 11:55:06 2001 +0000 Fixed html dependancy. commit 2ab206244c2469005c12b5c071e360fbb6a1fb9c Author: Adam Dickmeiss Date: Mon Nov 12 11:27:21 2001 +0000 Towards 1.8.2. commit 6b7bf6ee33bf997eff9747550f28fbc27a7020aa Author: Adam Dickmeiss Date: Mon Nov 12 11:24:45 2001 +0000 Ignore comma when dealing with and-lists. commit 0f5de851295231cacc15f91b670fa01fbf22b6fe Author: Adam Dickmeiss Date: Mon Nov 12 10:41:36 2001 +0000 Minor. commit 49218d3cab22778f7460f1099d0534e057be629f Author: Adam Dickmeiss Date: Sun Nov 11 22:25:25 2001 +0000 Protocol behavior sections. record_get raw returning Z External *. commit 79e745223e808aef83c885d94a7a2e58ee8e4ba0 Author: Adam Dickmeiss Date: Thu Nov 8 12:36:15 2001 +0000 More installation info. commit 67e7a7a13ff1e787b9e5cfe84494dfd446c1bcb9 Author: Adam Dickmeiss Date: Tue Nov 6 17:05:19 2001 +0000 ZOOM changes. commit 733dc40da2770d3ecb98d2d2cdc66b05a89bb390 Author: Adam Dickmeiss Date: Tue Nov 6 17:04:32 2001 +0000 Mentions SSL and cs_create_host. Remove stuff about XTImOSI. commit db9768c3988f9536c898250880c13923a2dde32d Author: Adam Dickmeiss Date: Tue Nov 6 17:03:50 2001 +0000 More verbose. commit 3bbbe0d3054648b6fb58eb290632442d036087d4 Author: Adam Dickmeiss Date: Tue Nov 6 17:03:33 2001 +0000 Updated credits list. commit 8af7fd342d3c905ddd1e6be521242d881510ba14 Author: Adam Dickmeiss Date: Tue Nov 6 17:01:25 2001 +0000 System call getprotobyname no longer used. commit f0be6a8011eef48bacd02a6565f62a1ab3355dab Author: Adam Dickmeiss Date: Thu Nov 1 14:30:44 2001 +0000 Added Credits Appendix. commit f999e4ffddd7002f1044e9c8d61319f7b33af3da Author: Adam Dickmeiss Date: Mon Oct 29 14:51:14 2001 +0000 No rule to make yaz.tex. commit 23348031ba9c7b97bf22b76de0c41c48e97a7180 Author: Adam Dickmeiss Date: Mon Oct 29 14:50:40 2001 +0000 Minor change. commit 0305212384e19d2419d62cba83d5b83108665d17 Author: Adam Dickmeiss Date: Mon Oct 29 14:05:30 2001 +0000 Fix xml.dcl in Makefile commit 2c8ec8c2d1dd7dd698e406ff99e1b7b439c4fa9b Author: Adam Dickmeiss Date: Mon Oct 29 13:57:31 2001 +0000 Added *.dsl files for DEST_DIR. commit b24d2d58cd28380a1969780e5e2d7c4f0719f81c Author: Adam Dickmeiss Date: Mon Oct 29 09:17:19 2001 +0000 New function marc_display_exl - used by YAZ client. Server returns bad record on position 98 (for testing). commit dc8023116d26e0999aa8a2cc4372baae55f28adb Author: Adam Dickmeiss Date: Mon Oct 29 09:16:27 2001 +0000 Added comments to better track OID values. commit dfc522984de40e8528dccad20ee1da31021cc578 Author: Adam Dickmeiss Date: Sun Oct 28 23:44:59 2001 +0000 New changelog. commit 8ac07324aa0d1da687ce2d0a2d734e783c2e9144 Author: Adam Dickmeiss Date: Sun Oct 28 23:28:26 2001 +0000 Enable CCL-to-RPN for YAZ client on WIN32. commit e46cd1b274c0f3328ebb091fa61fb41352638778 Author: Adam Dickmeiss Date: Sun Oct 28 23:10:02 2001 +0000 Fix local attribute setting for pquery. commit bd7e251dac1b07c54884d26295f66b90cfb23131 Author: Adam Dickmeiss Date: Fri Oct 26 20:13:44 2001 +0000 Indentation. Variable sgml-local-catalogs set to nil. commit 31c471c3fb3316356e724c5b382f143acd23520c Author: Adam Dickmeiss Date: Thu Oct 25 13:04:01 2001 +0000 Changes to CHANGELOG. commit 12b2b42ab2da50d46f17354deaafaff24e683230 Author: Adam Dickmeiss Date: Thu Oct 25 12:46:07 2001 +0000 codecs not built as they should. commit 67edeb0f006c8ef39dd0f15934abf18e39067bc1 Author: Adam Dickmeiss Date: Thu Oct 25 12:33:06 2001 +0000 WIN version 1.8.0.0. commit fe569a8399e6072e18d7059b8b5950df32cf014e Author: Adam Dickmeiss Date: Thu Oct 25 12:29:35 2001 +0000 Minor changes. commit 04ea98dee3c25b71e8ba74b2446f6b55d9e54785 Author: Adam Dickmeiss Date: Thu Oct 25 12:28:07 2001 +0000 Smaller README. commit 49957b09c9f08b4a36c8e83babce44deac9db462 Author: Adam Dickmeiss Date: Thu Oct 25 12:00:41 2001 +0000 Version 1.8. commit 71a35a24552103dbfc1258085c706e1d6fcad180 Author: Adam Dickmeiss Date: Thu Oct 25 11:55:56 2001 +0000 Renamed ASN.1 Module to Z39.50 ASN.1 module. commit 73ecbfab9603fb29e87e9a01a446aa81a22f21d7 Author: Adam Dickmeiss Date: Thu Oct 25 10:45:08 2001 +0000 Fixed make clean. commit 0a65a91563f87ccc3ee67a6eb509d8d4754e07d1 Author: Adam Dickmeiss Date: Wed Oct 24 21:35:46 2001 +0000 Added include of string.h. commit 7248b20b9e675788555c25d58d807bd8313b8e6d Author: Adam Dickmeiss Date: Wed Oct 24 21:30:47 2001 +0000 More info about UNIX/WIN32 installation. commit f7471d960fb2671c714bdfcd74dae39ce8112652 Author: Sebastian Hammer Date: Wed Oct 24 21:24:38 2001 +0000 Various changes commit bb96685811b1601d9453b3ecfb67368cb37e7afb Author: Adam Dickmeiss Date: Wed Oct 24 20:33:29 2001 +0000 Fix. commit 717e787416d8f78f327fd6d458c82e8a4829c405 Author: Adam Dickmeiss Date: Wed Oct 24 20:27:00 2001 +0000 Fix for DIST files. commit 1391c68b801ea245c6734743cd7dcad81526577f Author: Adam Dickmeiss Date: Wed Oct 24 20:25:07 2001 +0000 Added unix.html. commit ab0fd2f75e554d1c9c0e722abf073f9840f7739b Author: Adam Dickmeiss Date: Wed Oct 24 20:12:36 2001 +0000 Typos. Better introduction, really. Other, minor, updates. commit 3b251ac2d9cbaa140d55abc8e263b11b69357365 Author: Adam Dickmeiss Date: Wed Oct 24 20:11:46 2001 +0000 Removed SR OID's. commit 30dc1fd726606bff28c2f3884f3f294c42550008 Author: Adam Dickmeiss Date: Wed Oct 24 12:50:44 2001 +0000 Typos. Configure options. nmem_init/nmem_exit deal.. commit bc66c2a11aa31c16f46c49100e99dc9b7e940faf Author: Adam Dickmeiss Date: Wed Oct 24 12:24:43 2001 +0000 WIN32 updates: ZOOM runs, nmem_init/nmem_exit called in DllMain. commit 33c05384cfbca55da4ff97e5b2047b16596c72f7 Author: Adam Dickmeiss Date: Wed Oct 24 09:27:59 2001 +0000 More ZOOM documentation. XML Docbook is now part of "make dist". commit e1f879d00e75be3b5b9f3ecc22b34cc0c1c61aec Author: Adam Dickmeiss Date: Tue Oct 23 22:44:32 2001 +0000 Minor change again. commit 304184190fe6812bc788d9eebbd39934eada9ca3 Author: Adam Dickmeiss Date: Tue Oct 23 22:39:53 2001 +0000 Minor corrections. commit 69bcd68523a9a8da083faef16887100369152673 Author: Adam Dickmeiss Date: Tue Oct 23 21:00:19 2001 +0000 Old Z39.50 codecs gone. Added ZOOM. WRBUF MARC display util. commit b638e7e4efc850ee6446b14fa45c66690377ccf2 Author: Adam Dickmeiss Date: Mon Oct 22 16:00:04 2001 +0000 Renamed states for COMSTACKs to avoid confusion with events. commit 670615227704f9ab1dc20c8bdf3db8f09b9600ea Author: Adam Dickmeiss Date: Mon Oct 22 14:03:42 2001 +0000 Added stuff about cs_look / cs_rcvconnect. commit 4e687307f10bd595d8af05c022871d1875c8c463 Author: Adam Dickmeiss Date: Mon Oct 22 13:57:24 2001 +0000 Implemented cs_rcvconnect and cs_look as described in the documentation. commit 1252daa48c1303465e00fccb7f7287d2d6b179ed Author: Adam Dickmeiss Date: Mon Oct 15 20:37:08 2001 +0000 Fix for --libs when pthread was selected on OpenBSD. commit 9e1594c51c65fa993e9d69928c0ecabee8c2b862 Author: Adam Dickmeiss Date: Mon Oct 15 19:36:48 2001 +0000 New function marc_display_wrbuf. commit 38d5a1c71a407c5e60c1bc650ed4edeae88a2efa Author: Adam Dickmeiss Date: Fri Oct 12 21:49:26 2001 +0000 For accept/recv/send check for EAGAIN if it's differs from EWOULDBLOCK. commit 91251107b8bed866a3adcd827f9298b823c03d21 Author: Adam Dickmeiss Date: Tue Oct 9 09:17:17 2001 +0000 WIN version 1.7.0.11. commit f03238c89d03779b3d5731ffdcce0bd7c3e099bc Author: Adam Dickmeiss Date: Sat Oct 6 08:17:34 2001 +0000 Changes. commit 94018089d9c75e5f787430892273cfb776ad374a Author: Adam Dickmeiss Date: Sat Oct 6 08:16:30 2001 +0000 Configure detects POSIX Threads on OpenBSD (and others, perhaps). commit b81a371f23d16b616e6f7355ec7345cf8a482511 Author: Adam Dickmeiss Date: Fri Oct 5 14:43:22 2001 +0000 Implementation name GFS/YAZ instead of GFS. commit 9158f8e318f25cb16171433742950236cae96d36 Author: Adam Dickmeiss Date: Fri Oct 5 13:55:17 2001 +0000 Added defines YAZ_GNU_THREADS, YAZ_POSIX_THREADS in code and yaz-config commit 281a02714c611fed96547b043fd434a57c43c68a Author: Adam Dickmeiss Date: Fri Oct 5 08:17:08 2001 +0000 Updated WIN version. commit c9b1ffcb5d47aa1cd0c0812c55bd1a3301cf834c Author: Adam Dickmeiss Date: Thu Oct 4 00:37:58 2001 +0000 Fixes for GNU threads (not working yet). commit 9eeffdf14fddcf59618fdd7c8c16e4cc32429b4d Author: Adam Dickmeiss Date: Wed Oct 3 23:55:18 2001 +0000 GNU threads support. commit bd6a2e5050dfc5ea460202106fe396c584c31838 Author: Adam Dickmeiss Date: Wed Oct 3 23:54:41 2001 +0000 Fixes for numeric ranges (date=1980-1990). commit ab6f8762c003a867d0e1eb8ac5686a99de47976a Author: Adam Dickmeiss Date: Sun Sep 30 20:15:49 2001 +0000 Bug fix: reading bad tag units could crash the library (espec). commit ce8f5caa5af3f70ce86985b384c0c8be156437b9 Author: Adam Dickmeiss Date: Sun Sep 30 20:10:28 2001 +0000 TRACE_MALLOC=1. commit c227960392ad224178f1ab16f02207717dbe3d1b Author: Adam Dickmeiss Date: Fri Sep 28 14:50:23 2001 +0000 Simpleelement allows upper case (as well as lower case). commit e9410a4de52da8f1ba857f3ebaba52349c331077 Author: Adam Dickmeiss Date: Fri Sep 28 10:42:28 2001 +0000 Bug fix: yaz-config print yazpthread when threads are unavailable. commit aa5f63565232666005bef5c83f2d500d8ce9dfb4 Author: Adam Dickmeiss Date: Thu Sep 27 12:09:18 2001 +0000 Function nmem_exit calls oid_exit (when reference is 0). commit 0de7ee46a77de43f2901103e317815e153efae62 Author: Adam Dickmeiss Date: Wed Sep 26 07:37:58 2001 +0000 Update debian changelog. commit abfaf391015e3036af3d56859511bb7daaa6fe23 Author: Adam Dickmeiss Date: Tue Sep 25 07:35:37 2001 +0000 New Z39.50 OID utilities. commit c7dfadc3347abda902e15f79bfd513e1d48cfbba Author: Adam Dickmeiss Date: Mon Sep 24 21:51:55 2001 +0000 New Z39.50 OID utilities: yaz_oidval_to_z3950oid, yaz_str_to_z3950oid and yaz_z3950oid_to_str. commit c5f9b67c889e65446bcbf727bef3705229c3fd7f Author: Adam Dickmeiss Date: Mon Sep 24 21:48:46 2001 +0000 Setting v1,v2,search and present options for init request. commit 12c55e7b4114d0263f90b8eb20ef67dcaf82d971 Author: Adam Dickmeiss Date: Mon Sep 24 21:47:30 2001 +0000 Added Morten Garkier Hendriksens Debian build rules. commit 5ce37c7fbfad917db2828ab6898d438dd7fd8e17 Author: Adam Dickmeiss Date: Wed Sep 19 10:19:07 2001 +0000 Z_SortCase_caseInsensitive was set to wrong value. commit 767ff54e1425e6be8208fe3fee6e7e1b9cadcfb6 Author: Adam Dickmeiss Date: Fri Sep 14 10:51:58 2001 +0000 WIN version 1.7.0.8. commit aa2763b1a0851b94b97c79c7e3e6c209097dcbbd Author: Adam Dickmeiss Date: Fri Sep 14 10:49:51 2001 +0000 Bug fix: file wasn't closed in ccl_qual_fname. commit 90f5d8f6431d64bceb9fb8d2af99445313119e48 Author: Adam Dickmeiss Date: Tue Sep 11 12:44:22 2001 +0000 Fix. commit 3fa2784b75e5afa82db5f4cbc1403321894e1f27 Author: Adam Dickmeiss Date: Tue Sep 11 12:43:40 2001 +0000 Extra new-line for yaz-date.h. commit 79890eac643c81189343316b06f2d14445cbd023 Author: Adam Dickmeiss Date: Thu Aug 23 09:12:09 2001 +0000 Setting relative width for ASN/PDU tables. commit 115041d41421c262942dd2d97d3828a1e3281ad1 Author: Adam Dickmeiss Date: Thu Aug 23 09:02:46 2001 +0000 WIN32 fixes: Socket not re-used for bind. yaz_log logs WIN32 error message. commit ea85612969e1b81276985c870ce800c5f4ffe189 Author: Adam Dickmeiss Date: Tue Aug 14 12:34:01 2001 +0000 Updated resoruce for YAZ version. commit dfdf794d56520037a623d858436ebfe7598a3113 Author: Adam Dickmeiss Date: Tue Aug 14 12:05:58 2001 +0000 Added sortspec. commit 62e8f19eea1de5311a51ca884305feed38757e81 Author: Adam Dickmeiss Date: Tue Aug 14 11:50:07 2001 +0000 Index Data web stylesheet works. commit 3b3deb4d093d747360a5eb0e02c6b4e9c8a89b84 Author: Adam Dickmeiss Date: Mon Aug 13 09:42:54 2001 +0000 Spell fixes. commit a25b89e9d30e6de573f20d5b591068d49d639a5d Author: Adam Dickmeiss Date: Fri Aug 10 12:50:40 2001 +0000 Fixed bug where sort flags a and d was reversed. commit 109b6408fbe38ca68651a23b59a9ac875e7b8944 Author: Adam Dickmeiss Date: Wed Aug 8 19:35:06 2001 +0000 Implemented utility yaz_sort_spec. commit fe4182bf1ca7bebcb3172cde916d4467c2154e7b Author: Adam Dickmeiss Date: Wed Aug 8 19:33:21 2001 +0000 Added chapter about YAZ client. commit b26c2480fcd2d6c93484372b1b748c5ac54f2c99 Author: Adam Dickmeiss Date: Mon Aug 6 20:22:23 2001 +0000 Client doesn't set VAL_PROXY otherinfo unless -p is specified. commit 3227202c561b3189378cba8318c7610aeae1421a Author: Adam Dickmeiss Date: Fri Jul 20 21:34:36 2001 +0000 Fixed minor typos. Converted PDU tables. commit 3d18b35078096b9fd1feb8e2d6fd7e9e48755ad5 Author: Adam Dickmeiss Date: Fri Jul 20 21:33:45 2001 +0000 Cleanup of stylesheets. Changed path to docbook.dsl. commit bc8b2eabc0fb24c32b0f69c67492edf454d52f7d Author: Adam Dickmeiss Date: Fri Jul 20 21:31:35 2001 +0000 Added oslash latin-1 identity (to fix the standard one). commit ce853cc4919ab346fd629e7727905d3ee6e1129f Author: Adam Dickmeiss Date: Thu Jul 19 23:29:40 2001 +0000 Emacs indent of XML-documentation. Only minor changes in contents. commit 088c938eb8a4c6e4db96603e30b3558fd3d67580 Author: Adam Dickmeiss Date: Thu Jul 19 19:51:41 2001 +0000 Added typecasts to make C++ happy. commit 53fc6ff5ab7aaf73cdf33a77ca11b2fbabf185d6 Author: Adam Dickmeiss Date: Thu Jul 19 19:49:40 2001 +0000 Fixed bug in tcpip_set_blocking. commit 8f2523329baf822bb1f71aaa262376551391553e Author: Adam Dickmeiss Date: Thu Jul 19 19:49:02 2001 +0000 Added include of string.h. commit 9e70372b2df6adc53ff9eef0bdb3a654e8975743 Author: Adam Dickmeiss Date: Thu Jul 19 19:14:53 2001 +0000 C++ compile. commit 2fb0256d3201f9b2a2b66561090b1809e67b6a65 Author: Adam Dickmeiss Date: Thu Jul 19 16:53:02 2001 +0000 More PDU tables updated. commit 1f14d2d8be1c47d9e97fdd8ec55e2e5113abe899 Author: Adam Dickmeiss Date: Thu Jul 19 12:46:57 2001 +0000 Updates to manual. Separate PHP stylesheet. commit e992383c6389f2b4d55c31d78d1c7d68a749284f Author: ja7 Date: Wed Jul 4 20:13:51 2001 +0000 Added new commend "proxy" for ysing a yaz-proxy to connect to the target Added new command line option -p for setting the proxy host commit c6ee180e89543b7c4cb21e98d5b679b65c4a51b6 Author: Adam Dickmeiss Date: Thu Jun 28 12:42:01 2001 +0000 Added prototype for ccl_qual_add_special. commit f84db68d03155813df0aa498f2962fbf8e609d46 Author: Adam Dickmeiss Date: Thu Jun 28 09:27:25 2001 +0000 Number of Extended Services Requests logged. commit 864edb36edafb2368d92f48c7f34223e91f735e4 Author: Adam Dickmeiss Date: Thu Jun 28 09:27:06 2001 +0000 Number of started sessions logged. commit a9407df0295ee7745827b2f053b3f4698857720d Author: Adam Dickmeiss Date: Tue Jun 26 14:11:27 2001 +0000 Added MUTEX functions for NMEM module (used by OID utility). commit 38a63db405b7da6bb6bf167a90b435874d2137f6 Author: Adam Dickmeiss Date: Tue Jun 26 13:03:48 2001 +0000 Bug fix: introduced by previous commit. commit 9a13337111b32d256182a4248f93ebe26e393059 Author: Adam Dickmeiss Date: Tue Jun 26 12:14:15 2001 +0000 When BER decoding a null byte is appended to the OCTET buffer. commit 834b8cc2eae2f3ebf8256cacf8cc137bcc91c038 Author: Adam Dickmeiss Date: Wed Jun 13 20:47:40 2001 +0000 When error is returned from present handler, non-surrogate diagnostic is returned in present response (and fetch handler is no longer called). commit 6e30fa2d25d57c9551106c1c2713c9da18a9f79d Author: Heikki Levanto Date: Mon Jun 11 12:54:47 2001 +0000 Displayng diags in EsResponse, even if they should not be there... commit 96714f89e8a4577ce57683d80c2c3147541e3efa Author: Adam Dickmeiss Date: Mon May 28 13:15:24 2001 +0000 Added missing file. commit 42f7dd415641c76b3c528c8dd04af1afd6a04797 Author: Adam Dickmeiss Date: Mon May 28 12:44:03 2001 +0000 Added Debian package build. commit 3ee667935c4cac82445ecd05c8ae421888dfd40f Author: Adam Dickmeiss Date: Fri May 18 11:42:03 2001 +0000 YAZ Build date for WIN32. commit 205549626352a3cc49c85b8fa055ffde318aad42 Author: Adam Dickmeiss Date: Thu May 17 14:16:15 2001 +0000 Added EXTERNAL handling for item update0 (1.0). commit d96213e7e29deb01d3f24408b557319adea3cb3d Author: Adam Dickmeiss Date: Wed May 16 07:37:39 2001 +0000 Added script cvs-date.tcl that determines last CVS change for YAZ by using output of 'cvs log'. The script generates include/yaz/yaz-date.h which defines YAZ_DATE - format YYYYMMDD. commit 1c699d71c9663164ebc26e3031d69c502886e02d Author: Adam Dickmeiss Date: Wed May 16 07:30:16 2001 +0000 Minor cosmetic changes that makes checker gcc happier. commit 27f74e96aeda8a7a5049444cf22416c4a4240d7e Author: Adam Dickmeiss Date: Wed May 16 07:27:29 2001 +0000 Reference id set for InitRequest. commit ada24b27e68c3a29b7c56147d8aedff0ebdba897 Author: Adam Dickmeiss Date: Wed May 16 07:25:59 2001 +0000 Modified oid_ent_to_oid so that if proto is general, then class is ignored (only oid value is compared). commit eb41380ef9489c53d98ceeffdc1ea8908b4303b6 Author: Adam Dickmeiss Date: Wed May 16 07:22:56 2001 +0000 YAZ CVS Date part of implementationVersion in init{request,Response}. commit 5e88d5b6fc2de30f032179e182c742de279f493e Author: Adam Dickmeiss Date: Wed May 16 07:21:36 2001 +0000 Accept any OID for record syntax. commit c1957f49e5f8c37c06ed839cde52d60108bc2e35 Author: Adam Dickmeiss Date: Wed May 9 23:31:35 2001 +0000 String attribute values for PQF. Proper C-backslash escaping for PQF. commit 15233cfdc4c7610b634b8a8643ed1609c386bcc8 Author: Adam Dickmeiss Date: Mon May 7 12:01:00 2001 +0000 Removed dup CCL lib. commit fcd3a8318a95b56fa3724d800c4e6057774e0da5 Author: ja7 Date: Sun Apr 22 12:26:17 2001 +0000 if Compiled with Command line history a open command is pushed into the command history if yaz-client is startet with a server on the command line. eg yaz-clinet tcp:server:port/database hash the commend open tcp:server:port/database in the command history on startup Added the refid set with setrefid to the update APDU commit 7057699040b614f56be178f3672b4a2b95301d5f Author: Adam Dickmeiss Date: Fri Apr 6 12:26:45 2001 +0000 Optional CCL module. Moved atoi_n to marcdisp.h from yaz-util.h. commit e02e52d1bd554b3c3c34a262dc715666fb42a223 Author: Adam Dickmeiss Date: Thu Apr 5 13:34:36 2001 +0000 Minor changes. commit 772d9a39dd0e3e139ab975d7d45d1262f5471164 Author: Adam Dickmeiss Date: Thu Apr 5 13:08:48 2001 +0000 New configure options: --enable-module. commit eff77f0655f20d0eefb8f94558c24f549d783500 Author: Adam Dickmeiss Date: Mon Apr 2 13:58:09 2001 +0000 Added this. commit e2a45cb579ee5b68950fedd2f9b8cb61591a8c28 Author: Adam Dickmeiss Date: Thu Mar 29 11:47:34 2001 +0000 WIN version 1.7.0.5. commit 09405de098947fc5f359e9bd1225b2747596b513 Author: Adam Dickmeiss Date: Tue Mar 27 23:06:21 2001 +0000 Quotes and slashes may occur within attributes. commit fb36df3c32d9023ca55f8050ea4128f42d2dfc34 Author: Adam Dickmeiss Date: Tue Mar 27 14:48:06 2001 +0000 Fixed scan for bad CCL. commit 065f7bce150c68453a8508adc61bffd15e70128a Author: Adam Dickmeiss Date: Mon Mar 26 14:42:37 2001 +0000 looking for YAZ source in srcdir/../yaz commit 8d08fd5b79e49e14ca014de8e6bed12a2cc0468d Author: Adam Dickmeiss Date: Sun Mar 25 21:55:12 2001 +0000 Added odr_intdup. Ztest server returns TaskPackage for ItemUpdate. commit 5dd6504c984a2f87427aa0fba13a07421d1cb50b Author: Adam Dickmeiss Date: Sun Mar 25 21:54:24 2001 +0000 Update for build in any directory. commit aae3c7aae0c88261736f77459728dd1cd561d752 Author: Adam Dickmeiss Date: Fri Mar 23 13:21:53 2001 +0000 New WIN version. commit 59526fbbf2e3b54ce94b3e79e6c7fef9e4f456fb Author: Adam Dickmeiss Date: Thu Mar 22 21:23:30 2001 +0000 Directive s=pw sets structure to phrase if term includes blank(s). commit 3559c8472a802f894f84d048e0c3ae78132f68ac Author: Adam Dickmeiss Date: Thu Mar 22 16:09:43 2001 +0000 WIN version 1.7.0.3. commit 26d07328e36c41d39216d66d742d133cf7512995 Author: Adam Dickmeiss Date: Wed Mar 21 15:02:39 2001 +0000 More fixes for make where sourcedir and builddir are different. commit cfef2a68b0e7da6c2a3b47e44df9965d63156584 Author: Adam Dickmeiss Date: Wed Mar 21 12:43:36 2001 +0000 Implemented cs_create_host. Better error reporting for SSL comstack. commit 083dedcf7d9f7eac974a48dc49d5a23e284d9760 Author: Adam Dickmeiss Date: Tue Mar 20 15:58:23 2001 +0000 Improved yaz-config for build in any place. commit b1687618c7f5f40c0ac7d0192a6f129fd133e7d0 Author: Adam Dickmeiss Date: Tue Mar 20 11:22:58 2001 +0000 CCL Truncation character may be defined. commit 7e1f569f5266b46123b0174c95b7204338d55dd8 Author: Adam Dickmeiss Date: Mon Mar 19 21:30:06 2001 +0000 Added bib1 and default.bib. commit 3889f5ecf0d1c952175d010d6306f72c6c138f57 Author: ja7 Date: Sun Mar 18 20:45:39 2001 +0000 Added readline and history support to cclsh commit 3a0230d0c5f46e459efe9d12a46214e232a3039b Author: Adam Dickmeiss Date: Tue Mar 13 18:11:38 2001 +0000 Altered zget_ExtendedServicesRequest - sets waitAction to waitIfPossible. commit b9c0fc716a11606031639afe1e3ba6c420ba1035 Author: Adam Dickmeiss Date: Tue Mar 13 18:10:58 2001 +0000 Added option -c to set CCL config file. commit 49bb5732e64ef1bd772d5393450815684eac39b6 Author: Adam Dickmeiss Date: Tue Mar 13 18:10:39 2001 +0000 Updated. commit 9cae644f09ee79ffea80f800b5b037fd8e12304e Author: Adam Dickmeiss Date: Mon Mar 12 14:40:57 2001 +0000 Minor change of print of item update info. commit cb2620919f499439968dffed87671ec823da5afe Author: Adam Dickmeiss Date: Fri Mar 9 14:58:20 2001 +0000 Updated version resource. commit 0cf6aeaac483e7887e44c05fc1e0d008805ebf7b Author: Adam Dickmeiss Date: Fri Mar 9 13:31:34 2001 +0000 Updated version. commit 03c1d6e9c2c2c0bb2ee01e38d7f464a311bfe9e9 Author: Adam Dickmeiss Date: Thu Mar 8 20:18:55 2001 +0000 Added cs_set_blocking. Patch from Matthew Carey. commit da907ba05501a2050d0a70b1d1fdf22a8130589a Author: Adam Dickmeiss Date: Wed Mar 7 13:24:40 2001 +0000 Member and_not in Z_Operator is kept for backwards compatibility. Added support for definition of CCL operators in field spec file. commit 96dd068fd2057b2123ae9444fa441e4738776d87 Author: Adam Dickmeiss Date: Wed Feb 28 16:56:33 2001 +0000 Added version info for WIN32. commit d4b069b3c2525b7ae0fe3bf91c16c48d5cec100c Author: Adam Dickmeiss Date: Wed Feb 28 09:00:06 2001 +0000 Fixed problem with stack overflow for very nested records. commit 69392bd6f5e182f413fd406c598d4ae0108f166c Author: Adam Dickmeiss Date: Mon Feb 26 22:52:54 2001 +0000 Script buildconf script is quiet. commit 59fc25662cfb2144a8f9173616aa70a1da9e4f44 Author: Adam Dickmeiss Date: Wed Feb 21 23:16:49 2001 +0000 Added style sheets. commit e5324215018e129dd19734acd0e683e5af748423 Author: Adam Dickmeiss Date: Wed Feb 21 13:46:53 2001 +0000 C++ fixes. commit 84123e31b540666d168a28292c0461698841f8be Author: Adam Dickmeiss Date: Wed Feb 21 09:41:15 2001 +0000 Fixed problem with old codecs. commit 663704d5e3532c523d5401b2ce8c4d34a3d0cd17 Author: Adam Dickmeiss Date: Wed Feb 21 09:19:44 2001 +0000 Updated README and CHANGELOG. commit 13a51cad2e55f62459d7ce4b5a94ed9560105709 Author: Adam Dickmeiss Date: Wed Feb 21 09:08:37 2001 +0000 Removed this one. commit 1dc42669e01354e9bf56e306786177ffa0764781 Author: Adam Dickmeiss Date: Wed Feb 21 09:08:23 2001 +0000 Removed config.stub. commit b0ea0712dd81e2d3dd25ec14c0bb9a6ce0a51056 Author: Adam Dickmeiss Date: Wed Feb 21 09:03:34 2001 +0000 Removed Makefile.in's and libtool/automake files that are auto-created with the buildconf.sh script. commit 9f6bbd483ea92b4a5ae114a36bfebd942e138460 Author: Adam Dickmeiss Date: Tue Feb 20 11:25:32 2001 +0000 Added ill_get_APDU and ill_get_Cancel. commit 4491bbb1a05c42c1540c3eb16401028eac05c36a Author: Adam Dickmeiss Date: Tue Feb 20 11:23:50 2001 +0000 Updated ccl_pquery to consider local attribute set too. commit a7b99c21cc2445c19d3f76150049b42a96631b48 Author: Adam Dickmeiss Date: Mon Feb 12 15:35:19 2001 +0000 More gils CCL field mappings. commit aabf1ddf38ac10199480c78045c09456c86524a8 Author: Adam Dickmeiss Date: Sat Feb 10 01:21:59 2001 +0000 Dumper only keeps one record at a time in memory. commit 045c1b65972cd05508ff188e201c17e5da571b43 Author: Adam Dickmeiss Date: Thu Feb 1 08:52:26 2001 +0000 Fixed bug regarding inetd mode. commit 3dd5b55e719b2deba4bdc96c0e2dc55f41b7d70f Author: Adam Dickmeiss Date: Tue Jan 30 21:34:53 2001 +0000 Changes. commit 1e05ad915933124916c16e164cd2065646379cd7 Author: Adam Dickmeiss Date: Tue Jan 30 21:34:17 2001 +0000 Added step-size for Scan backend interface. commit 9a0db72d69faf9b014a9cb05c9c95c7d8ba214b9 Author: ja7 Date: Tue Jan 30 15:52:48 2001 +0000 added command for setting packageName in ES packages! command is named packagename default is NULL for server suplyed package name commit e437c49e5b848a38b8dd0913da4c79828c60af18 Author: Adam Dickmeiss Date: Mon Jan 29 11:19:05 2001 +0000 Clients prints options in InitResponse. commit 2888744f98c72347a8f584f4b56dad77905d1a2b Author: Adam Dickmeiss Date: Mon Jan 29 09:38:22 2001 +0000 Fixed bug that made the frontend server crash when no attribute set was specified for scan. commit 6a5e596a2520ae688b080432212728bd4b12901e Author: Adam Dickmeiss Date: Wed Jan 24 11:55:31 2001 +0000 Fixed nasty bug introduced by previous commit (attribute sets not properly allocated). commit 548d8ab9b0b5930db27643b47fc55afce5511219 Author: Adam Dickmeiss Date: Mon Jan 22 10:41:47 2001 +0000 Multiple attribute may be specified for sorging. commit dc3d5ecceac6245d85f90195e63e94018cbcdce7 Author: Adam Dickmeiss Date: Thu Jan 4 14:03:42 2001 +0000 Minor change. commit 0f72f09a46621eb0aa9960b990dd35c221333e4d Author: Adam Dickmeiss Date: Thu Jan 4 13:36:24 2001 +0000 Added XML Docbook documentation for YAZ - will eventually replace the linuxdoc SGML doc. commit 356e1d9e8eeb92d9ca9e883c1048ad79e5a5c49f Author: Adam Dickmeiss Date: Fri Dec 29 11:12:12 2000 +0000 Updated with more info. commit 4a9980caf2a67eb3168992d3a37afa296d5efaf8 Author: Adam Dickmeiss Date: Thu Dec 14 22:10:46 2000 +0000 Minor updates. commit bf2b1fb48dd2b2edb871441fb1b10d11df378e9c Author: Adam Dickmeiss Date: Thu Dec 14 16:01:32 2000 +0000 Fixed YAZLALIB setting (when no threads was specified). commit 0fa4ed293e6d00b6ef3f0179543a12f803c61b6d Author: Sebastian Hammer Date: Mon Dec 11 21:43:38 2000 +0000 Added blocking synopsis for COMSTACK commit 754b0cc078d975dc04dfb1e58e93780935a53a49 Author: Sebastian Hammer Date: Mon Dec 11 20:55:18 2000 +0000 Work commit ccdc25fd34d4ce420755fb6ed492e00d6df5d776 Author: Adam Dickmeiss Date: Tue Dec 5 19:14:12 2000 +0000 Updated CHANGELOG and windows.txt. commit 7dbfe8eb851425008edcba35173278f1c54fc037 Author: Adam Dickmeiss Date: Tue Dec 5 19:07:24 2000 +0000 Fixed problem with element level in reading of abstract syntax. commit e8d4a4b06783f74ff4e6a32f4f4b2622473d1b3c Author: Adam Dickmeiss Date: Tue Dec 5 19:05:10 2000 +0000 Service automatically starts in the directory from which it was installed. commit d3a6e1e7f5f661593507deecd86bc72c869d19c8 Author: Adam Dickmeiss Date: Tue Dec 5 19:03:19 2000 +0000 WIN32 fixes for drive specifications. commit 82780038a8dfa288d03d6e9c8ef9df5f4e67fbfe Author: Adam Dickmeiss Date: Tue Dec 5 14:44:25 2000 +0000 Readers skips sections. commit 8f3b80611e6f01ee8ef66fb8c57f2370497459eb Author: Adam Dickmeiss Date: Tue Dec 5 14:34:49 2000 +0000 Fixed bug with termlists (introduced by previous commit). commit fec7f7b97c77fbf1d7073bbd47816b9da02d0adb Author: Adam Dickmeiss Date: Tue Dec 5 12:21:44 2000 +0000 Added termlist source for data1 system. commit 99fef536b882e1a7e8fae9955ff8c28bfe171e9c Author: Adam Dickmeiss Date: Tue Dec 5 10:06:23 2000 +0000 Added support for null-data rules like . commit 7f6f1b2def7cb8f2124168f90ea3e2e728bd39b3 Author: Adam Dickmeiss Date: Fri Dec 1 17:56:41 2000 +0000 on WIN32 function statserv_closedown closes socket(s) to provoke close. commit 43801085d371c69455730182f72c4e53d8c8218f Author: Adam Dickmeiss Date: Wed Nov 29 14:22:47 2000 +0000 Implemented XML/SGML attributes for data1 so that d1_read reads them and d1_write generates proper attributes for XML/SGML records. Added register locking for threaded version. commit 1edc4e2e9b58c9ec9fe830eb7c991946084911b0 Author: Adam Dickmeiss Date: Mon Nov 27 15:17:40 2000 +0000 Using SSLeay_add_all_algorithms instead of OpenSSL_add_all_algorithms. commit ece0783e15e266f33b30db9d55b2dcdbacb55ac6 Author: Adam Dickmeiss Date: Mon Nov 27 14:16:55 2000 +0000 Fixed bug in ccl_rpn_simple regarding resultSetId's. commit ffe0319f6125ea953ba8859b0e5a3cc3f4a77716 Author: Adam Dickmeiss Date: Thu Nov 23 10:59:22 2000 +0000 Minor change. commit 8e4eabe621f8b8195faa6625a38a2e1ae7b68aa1 Author: Adam Dickmeiss Date: Thu Nov 23 10:58:32 2000 +0000 SSL comstack support. Separate POSIX thread support library. commit 37b3d8433b89248def810d7cfa9b110893519f65 Author: Adam Dickmeiss Date: Thu Nov 16 13:11:07 2000 +0000 Changed because ccl_rpn_query sets attribute set. commit eaf27c9dc97e048dcd9a90dc05aa8133b3020c5b Author: Adam Dickmeiss Date: Thu Nov 16 13:03:12 2000 +0000 Function ccl_rpn_query sets attributeSet to Bib-1. commit 448e7f2a48f6485a8d452c75420524fb37453bc1 Author: Adam Dickmeiss Date: Thu Nov 16 09:58:02 2000 +0000 Implemented local AttributeSet setting for CCL field maps. commit 4b89c0a02975f8140f079e5883692a7de30126be Author: Adam Dickmeiss Date: Mon Nov 13 09:44:59 2000 +0000 Work on SCAN: RPN2CCL conversion and proper "next" scan. commit e0fea214f3bf8b0a75ae18c0e9c97c6d5e22df5f Author: Adam Dickmeiss Date: Wed Nov 1 14:47:00 2000 +0000 Added CCL support for WIN32. commit 0bbcf1f8447a9d6514bc66e7390993c01d6ca0e3 Author: Adam Dickmeiss Date: Wed Nov 1 09:18:40 2000 +0000 Fixed for new version of automake. commit 33a6eab614ca84eef817f675843e6de820d13708 Author: Adam Dickmeiss Date: Tue Oct 17 19:50:28 2000 +0000 Implemented and-list and or-list for CCL module. commit 45f8f517ebe10930067907c19a56557afd779826 Author: Adam Dickmeiss Date: Wed Oct 11 12:39:49 2000 +0000 Updated current version number for library. commit eeffeb31d2d436d41161046b4a5c0f5ff43a9ad4 Author: Adam Dickmeiss Date: Wed Oct 11 12:38:42 2000 +0000 New spec release. commit 10a1b30cd1e5537ef3c60b27f96b36a428ebb390 Author: Adam Dickmeiss Date: Wed Oct 11 12:24:58 2000 +0000 Removed --source option from yaz-config. commit 5682310668a3e9607b5cc55f2ebeac402213f38f Author: Adam Dickmeiss Date: Wed Oct 11 11:36:15 2000 +0000 Updated version number for shared object. commit 180d8e06b6f1e7fe34b1a80ca1edde0dddf113f1 Author: Adam Dickmeiss Date: Wed Oct 11 10:40:56 2000 +0000 Work on yaz-config creation. Added yaz.m4. commit db715f04889e8811b9162e5308a8702985437f3f Author: Adam Dickmeiss Date: Fri Oct 6 12:55:50 2000 +0000 Minor updates (for fixed version of automake in CVS). commit cd1022386e3c47a196fd08d7b0bbf32f25b61a56 Author: Adam Dickmeiss Date: Fri Oct 6 12:46:27 2000 +0000 Including sys/types.h and netinet/in.h instead on arpa/inet.h on Unix. commit a8351208b6d55c46bf73cc4011645a81c9a94565 Author: Adam Dickmeiss Date: Fri Oct 6 12:01:12 2000 +0000 Updates regarding ASN-code generation (mostly). commit 23a3d157b61486fec09962339c407c4626e18268 Author: Adam Dickmeiss Date: Fri Oct 6 12:00:28 2000 +0000 Fixed Handle leak for WIN32. commit 21bb477b8b3d2e06ade68603a47b227040202ac8 Author: Adam Dickmeiss Date: Tue Oct 3 13:26:24 2000 +0000 Minor fix. commit faf616abe44b655b3154c5421b3ede39aca8783a Author: Adam Dickmeiss Date: Tue Oct 3 13:17:53 2000 +0000 Minor updates to configure script. commit fa21652860bfd374c3fa9adee83ad726bffd6dbd Author: Adam Dickmeiss Date: Tue Oct 3 12:55:50 2000 +0000 Removed several auto-generated files from CVS. commit b86dedd714b84b52d7f1bfe71555d08367c2c179 Author: Adam Dickmeiss Date: Mon Oct 2 13:58:50 2000 +0000 Added some OID's. commit 33b5e2e3822214b25aa544688a2788086840b7a6 Author: Adam Dickmeiss Date: Mon Oct 2 13:05:32 2000 +0000 Fixed bug introduced by previous commit. commit 7282236bf8f7f5ed9890f04c2b658397fd333e8b Author: Adam Dickmeiss Date: Mon Oct 2 12:31:43 2000 +0000 File yaz-config generated by configure (not Makefile). commit 4b05ad4607916d50257919cead06b54785c18e29 Author: Adam Dickmeiss Date: Mon Oct 2 11:07:44 2000 +0000 Added peer_name member for bend_init handler. Changed the YAZ client so that tcp: can be avoided in target spec. commit 9d746417d51ee7eedd3cedf78b734d498cc49521 Author: Adam Dickmeiss Date: Fri Sep 15 17:46:49 2000 +0000 Added TCP wrapper for yaz.spec. commit 53d3f4a26c04bd272452cac57cb4672456027324 Author: Adam Dickmeiss Date: Thu Sep 14 12:05:08 2000 +0000 Threads disabled unless specified for configure. commit 9b2bfae4cadcc52c5facf342f1abaa0c885d6f11 Author: Adam Dickmeiss Date: Sat Sep 9 08:05:57 2000 +0000 Fixed TCP wrapper setting so that it is only enabled when the set to. commit c066367416a8bed99c6c11eb8b6c74991762cd95 Author: Adam Dickmeiss Date: Thu Sep 7 12:53:29 2000 +0000 Changed copyright message in spec file. commit cbeb1227a16f62975115e1e9216ccf2724bfd046 Author: Adam Dickmeiss Date: Mon Sep 4 08:58:15 2000 +0000 Added prefix yaz_ for most logging utility functions. commit f9cb371e2a0eef09e1416fde6f1efd609ef80205 Author: Adam Dickmeiss Date: Mon Sep 4 08:27:11 2000 +0000 Work on error handling for tcpip_accept. commit 5411affe4d00fc2d7bb4e8c907c53d4c085a44ce Author: Per M. Hansen Date: Thu Aug 31 14:20:34 2000 +0000 A chapter about the yaz-client was added to the documentation. commit 68d5c20794c09348e4a0fed7f00c2bd97f535e12 Author: Adam Dickmeiss Date: Thu Aug 31 10:20:12 2000 +0000 Added member request_format and output_format for backend fetch method. commit 4f7e8b411cb0c30c02b3eaf23fdfef5275dae098 Author: Adam Dickmeiss Date: Thu Aug 31 09:51:25 2000 +0000 Added record_syntax member for fetch method (raw OID). commit 16ce40aa92448a07d7b8673d873f549087f27e83 Author: Adam Dickmeiss Date: Thu Aug 10 08:41:26 2000 +0000 Fixes for ILL. commit 3fbac983921247d7804695af483263420089beec Author: Adam Dickmeiss Date: Fri Aug 4 10:40:45 2000 +0000 Fixed bug in yaz-config.in. commit bc5e5d4ed7440baeac26adbbeedc5719d9b18dac Author: Adam Dickmeiss Date: Thu Jul 6 10:38:47 2000 +0000 Enhanced option --enable-tcpd. commit ee3757af27a96aa388b76c8dbcc175c02d91a50e Author: Adam Dickmeiss Date: Tue Jul 4 08:53:22 2000 +0000 Fixed bug. commit 3b2f87676aa2bf0d508e1ff71a57941852ce5628 Author: Adam Dickmeiss Date: Wed Jun 21 10:10:39 2000 +0000 Added CVS id. commit 188b39dc723e0011264f8bd8f4a07d65cf8ddb72 Author: Adam Dickmeiss Date: Wed Jun 21 10:10:05 2000 +0000 Modified yaz-config so that it only reports usage when bad options are specified. commit 861013735f9e11cdc85019cbb361661d3350a1a7 Author: Adam Dickmeiss Date: Tue Jun 20 15:25:37 2000 +0000 Fix. commit 70f0ff9bf920e65b47211fd88f409e2b1a2b8e43 Author: Adam Dickmeiss Date: Mon Jun 19 09:49:35 2000 +0000 Added options for yaz-config. commit c3f57c8345a7f18e072352e65e20b895a0011787 Author: ian Date: Fri Jun 9 13:51:01 2000 +0000 Added LOG_APP for logging application (Rather than code) events that might be useful when creating usage reports. commit 7220998c93de3081e36802fea70524ad6c1768b1 Author: Adam Dickmeiss Date: Thu Jun 8 13:40:14 2000 +0000 Using a4 instead of letter for postscript. commit 8fd016e2789222e1fb346063b1fe27a33e51a479 Author: Adam Dickmeiss Date: Thu May 25 19:58:00 2000 +0000 Changed CCLRPN setting to CCL2RPN. commit 4cc3807b8b684cbf198849703a9aa97500c9db6e Author: Adam Dickmeiss Date: Thu May 25 19:57:35 2000 +0000 Changed include of yaz-util.h to wrbuf.h. commit 986cee5f65c6f0d5dde92b7fe2977a4532ecd3f9 Author: Adam Dickmeiss Date: Thu May 18 11:57:04 2000 +0000 Client display time elapsed. commit 8b1bdc0019106e248a81c1997a4101643ac4c60c Author: Adam Dickmeiss Date: Thu May 18 11:55:47 2000 +0000 Fixed DANMARC profile. commit 9ed20d6529182e33ebca7423313eba893d07b69e Author: Adam Dickmeiss Date: Thu May 11 14:37:55 2000 +0000 Minor changes. commit 2b85787ba94cfbc6cd1123e9773802aee6740ca5 Author: Adam Dickmeiss Date: Tue May 9 11:48:58 2000 +0000 Fix (bug introduced by previous commit). commit 588af2e484a5a48afac3069578959437c9b3271e Author: Adam Dickmeiss Date: Tue May 9 10:55:05 2000 +0000 Public nmem_print_list (for debugging). commit 813d54d6b885886d0bf823937576e69fd48f81aa Author: Adam Dickmeiss Date: Fri May 5 13:48:15 2000 +0000 Minor changes. commit f93804a685b51e2d724847d071d47c173c2c0ee6 Author: Adam Dickmeiss Date: Wed May 3 22:00:00 2000 +0000 Reference counter (if multiple modules are init/freeing nmem). commit bc0541635987ad8f35af9df6aacd5534d519ccb6 Author: Adam Dickmeiss Date: Tue May 2 19:32:15 2000 +0000 Defined READLINE_LIBS for the yaz-client. commit 6817442a2614e09d9c32896dc3c2581a3dd491c7 Author: Adam Dickmeiss Date: Tue May 2 17:19:58 2000 +0000 Removed MINUS token. commit 95043c4abd87486b64ef44a575313cf4153c1445 Author: Adam Dickmeiss Date: Mon May 1 09:36:50 2000 +0000 Range operator only treated in ordered ranges so that minus (-) can be used for, say, the and-not operator. commit 247a4ed52a51a1dbd85877438b86a39ca68a3cca Author: Adam Dickmeiss Date: Mon Apr 17 14:21:38 2000 +0000 WIN32 update. commit ee0459ed35eb48fdbf8e221de1ef7d6d59a0b0ad Author: Adam Dickmeiss Date: Tue Apr 11 21:22:28 2000 +0000 Fixed linux specific test. commit 3518888d1548b5f157909599122c757f29d92080 Author: Adam Dickmeiss Date: Thu Apr 6 12:32:56 2000 +0000 Fixed setting of yaz-config. commit 3739a09637244036dedbabb6040ed48978b8e330 Author: Adam Dickmeiss Date: Wed Apr 5 09:43:45 2000 +0000 Minor fixes regarding packaging. commit d4f5c8867c6f02b3c8ee33e0b226e1d26e5c65d0 Author: Adam Dickmeiss Date: Wed Apr 5 07:41:16 2000 +0000 Added config files for libtool. commit 7acd51b7cdffca5ad92a777d2c6e8e9bae1f9fd3 Author: Adam Dickmeiss Date: Wed Apr 5 07:39:54 2000 +0000 Added shared library support (libtool). commit 6fdf5380057b2e9159050ddbb7cd79c86690a6ef Author: Adam Dickmeiss Date: Wed Mar 29 15:23:55 2000 +0000 Further work. commit 670bcd00bdc2b4559fde47a9b38cbb855b89aa48 Author: Adam Dickmeiss Date: Wed Mar 29 15:07:16 2000 +0000 Updated for PHP. commit 484e85dc68452b84d36770c1dc6801632dd75c45 Author: Adam Dickmeiss Date: Mon Mar 20 19:29:59 2000 +0000 Minor change. commit a6eef2e7073a7295d1a7bf09f538946135a5ebbb Author: Adam Dickmeiss Date: Mon Mar 20 19:06:25 2000 +0000 Added Segment request for fronend server. Work on admin for client. commit 29ad0d85b05dd7ed7a68a01b87ebce5195bdbb85 Author: Adam Dickmeiss Date: Fri Mar 17 12:47:02 2000 +0000 Minor changes to admin client. commit 49efb9d1b4fc68e075b5121b68922f866f4b330f Author: ian Date: Thu Mar 16 13:55:49 2000 +0000 Added commands for sending shutdown and startup admin requests via the admin ES. commit 9e92c884f129f66b829fdb3069b09e669fc7aa56 Author: ian Date: Thu Mar 16 13:30:11 2000 +0000 Added startup and shutdown options to admin extended service commit ee171c36f5db3f64d42b840c247ac33f056d656d Author: Adam Dickmeiss Date: Wed Mar 15 12:59:49 2000 +0000 Added handle member to statserv_control. commit 274791ccf3e873a88ef1f2aef185a3d711c972b4 Author: ian Date: Tue Mar 14 15:23:17 2000 +0000 Removed unwanted ifdef and include of zes-admin.h commit e06308d4b7e38f10c61acab44bbf32de9294a313 Author: ian Date: Tue Mar 14 15:22:04 2000 +0000 Added Admin external to choice table. commit 91bd424e18017a225bc500e5ac94f71382a6a03f Author: ian Date: Tue Mar 14 14:06:04 2000 +0000 Minor change to order of debugging output for send_apdu, fixed encoding of admin request. commit 8f0d059e248dba37a875875ae6d8561a0a9d49a1 Author: ian Date: Tue Mar 14 13:52:32 2000 +0000 Added Admin Extended Service to External Choice commit 3b5d9ce6b714e69e96b8c738c4055196cb1f42b4 Author: ian Date: Tue Mar 14 09:27:07 2000 +0000 Added code to enable sending of admin extended service requests commit 29796ec9a5a8b2393f578a44dc15b74db23fde50 Author: ian Date: Tue Mar 14 09:22:58 2000 +0000 Added Admin Extended Service ASN commit cf784482d7256a192c0b4f95e4746ed12efb3bab Author: ian Date: Tue Mar 14 09:22:15 2000 +0000 Added asn & encoders/decoders for Admin Extended Service commit 94e393e8f7af200a72bc27caf341c6dd2ca6d318 Author: ian Date: Tue Mar 14 09:21:08 2000 +0000 Added Admin Extended Service OID commit 1d88cc1a3680e80dc7996abe5a6e0a99f9ef3d1b Author: ian Date: Tue Mar 14 09:19:49 2000 +0000 Added admin extended service encoders & decoders. commit 2c77fc43bcc40cc4786a39b14c76a481dbe66ffe Author: Adam Dickmeiss Date: Tue Mar 14 09:06:10 2000 +0000 Added POSIX threads support for frontend server. commit 2059ba0c9ca49689d20c7687195c30d06cbb4cf9 Author: Adam Dickmeiss Date: Fri Mar 10 08:41:30 2000 +0000 Documentation no longer made when doing 'make all'. commit 93d0e8388bf22b6da2a9c2d7eb3d6df58cbe8344 Author: Adam Dickmeiss Date: Fri Mar 3 10:23:47 2000 +0000 Version 1.6. commit 6d04fc7a64ab1dd82574935bb189e055fe2d5e72 Author: Adam Dickmeiss Date: Fri Mar 3 10:18:50 2000 +0000 Added script to convert documentation to indexdata.dk web style. commit 1059af772d449ae66893bedf4a4ffd2b13b9c37f Author: Adam Dickmeiss Date: Thu Mar 2 08:53:47 2000 +0000 Fix. commit d90d31f39aba4c7256d5b83eaf4192630b18ae02 Author: Adam Dickmeiss Date: Thu Mar 2 08:48:20 2000 +0000 Renamed ASN.1 compiler to yaz-comp (used to be yc.tcl). commit 988421f953de4623a11b90008c52e135631078ba Author: Adam Dickmeiss Date: Wed Mar 1 14:19:21 2000 +0000 Added documentation. commit a5bef8528509e705092cd767e0b65bf8da85ccad Author: Adam Dickmeiss Date: Wed Mar 1 13:46:23 2000 +0000 Added ill decoders to CVS. commit 69abdf35bf2cb6927d34b9fb1f526a0962f0fe8f Author: Adam Dickmeiss Date: Wed Mar 1 13:41:03 2000 +0000 Added files. commit 007a366af5ddaebf813e39588f1c09646d33bcef Author: Adam Dickmeiss Date: Wed Mar 1 11:15:31 2000 +0000 Fix. commit 51901976217886437964a5450614caa377ded52c Author: Adam Dickmeiss Date: Wed Mar 1 11:08:22 2000 +0000 Fix. commit e973eb3ceaeaf25735f8250aed8400c87ddcb9da Author: Adam Dickmeiss Date: Wed Mar 1 11:06:09 2000 +0000 Updated makefiles (again). commit f6ed0e935a985cceea7fefeb745bbeb2b756d557 Author: Adam Dickmeiss Date: Wed Mar 1 11:05:28 2000 +0000 2000. commit 005f5cf043a2b4929eeeb9d41de4c410228d2e06 Author: Adam Dickmeiss Date: Wed Mar 1 10:59:53 2000 +0000 Updated doc. commit 2e7228ce7b24bbb78c072cffe4dd059e536eb76e Author: Adam Dickmeiss Date: Wed Mar 1 09:53:32 2000 +0000 Added header. commit afeee382cc14a2dbacf9f61217ef0e4209a371e1 Author: Adam Dickmeiss Date: Wed Mar 1 09:51:59 2000 +0000 Added O_BINARY again. commit 5641875c76fe4e239731fb97ac528f05a3c2de91 Author: Adam Dickmeiss Date: Tue Feb 29 15:58:19 2000 +0000 Added item-req.h commit 51ce48f9d3319a9f8952c4c6deb2c39692403376 Author: Adam Dickmeiss Date: Tue Feb 29 15:52:33 2000 +0000 Added compiled ASN.1 C files. commit ee5338c518eced23556105b4b2ad3cd850fd79ea Author: Adam Dickmeiss Date: Tue Feb 29 14:13:55 2000 +0000 Minor. commit 5dabb1f264e9fa71e977ddd8ad2e8c0e6de56484 Author: Adam Dickmeiss Date: Tue Feb 29 14:13:44 2000 +0000 MInor. commit 9affdfe1851fa0994299ca2c6495003911d56cb8 Author: Adam Dickmeiss Date: Tue Feb 29 13:52:36 2000 +0000 Updated. commit 19af2bd8dfd21731cc978beccd1346133d614c67 Author: Adam Dickmeiss Date: Tue Feb 29 13:44:54 2000 +0000 Check for config.h (currently not generated). commit 715f35c6d320d5589ea1b80434ab1b2abef823b0 Author: Adam Dickmeiss Date: Mon Feb 28 12:34:40 2000 +0000 Minor. commit 95ad0fb5f35ae1885c8f2c235d073961555a6329 Author: Adam Dickmeiss Date: Mon Feb 28 12:34:28 2000 +0000 MInor. commit b027d2d599e0c1e7806d8feebbe30afa62d3d41e Author: Adam Dickmeiss Date: Mon Feb 28 12:28:34 2000 +0000 Added. commit 4a61787f847937c8ec74286572a4aa1efb9e3d55 Author: Adam Dickmeiss Date: Mon Feb 28 11:46:25 2000 +0000 Minor. commit a3d5725ed3e509fea9ee6246e01b86416bf91a55 Author: Adam Dickmeiss Date: Mon Feb 28 11:45:41 2000 +0000 Updated again. commit 7dabb33444218a5c5b83cf1a4d9fe386699f872e Author: Adam Dickmeiss Date: Mon Feb 28 11:44:39 2000 +0000 Updated makefiles. commit c0903fd5f123d300c1a107af6cbd6f70631fcf32 Author: Adam Dickmeiss Date: Mon Feb 28 11:27:22 2000 +0000 Minor. commit eb403d586a08851dc75cdb8d1e70200f8e154fcb Author: Adam Dickmeiss Date: Mon Feb 28 11:25:45 2000 +0000 Minor. commit 275e3d21ac4979241fbe3522ce43c6e769020e46 Author: Adam Dickmeiss Date: Mon Feb 28 11:25:21 2000 +0000 Added Makefile.in for tab. commit 7650dadee1e1a910677c8d305aa70dbbf38e79e6 Author: Adam Dickmeiss Date: Mon Feb 28 11:21:36 2000 +0000 Added config.h.in. commit 78e049108ef4c65f1dc3dddd747e59b90b75a9a6 Author: Adam Dickmeiss Date: Mon Feb 28 11:20:05 2000 +0000 Using autoconf. New definitions: YAZ_BEGIN_CDECL/YAZ_END_CDECL. commit 4553ace9ab808a5db41bd7e03db6b8b4e9f8acc7 Author: Adam Dickmeiss Date: Mon Feb 28 11:13:03 2000 +0000 Removed odr_priv.obj. commit 494f920a167da8363b008176b75960f983e1631a Author: Adam Dickmeiss Date: Fri Feb 25 11:40:09 2000 +0000 Check for possible inclusion -ltermcap when doing -lreadline check. commit f8bd96fa2d6164cec530daa8cec05bec21b1854e Author: Adam Dickmeiss Date: Thu Feb 24 23:49:13 2000 +0000 Fixed memory allocation problem. commit c9f3e870fcf3f6f2dabb1046658c0a3804b14a55 Author: Adam Dickmeiss Date: Thu Feb 24 08:52:01 2000 +0000 Bug fix. commit 6fa916522816708cb739129df535850d561d0f3a Author: Adam Dickmeiss Date: Thu Feb 10 13:44:02 2000 +0000 Tcl command clock not used if unavailable (Tcl7.4 and earlier). commit 4a3375fecf8c2a6d6659c523bb38c5a5796355a1 Author: Adam Dickmeiss Date: Thu Feb 10 13:42:43 2000 +0000 Removed C++ comment. commit b4ae0369b59f4e3e9f077197a2bfca08dc654102 Author: Adam Dickmeiss Date: Tue Feb 8 10:39:53 2000 +0000 Added a few functions to set name of operands, etc. commit 4e06ed87f410f2304808ccd922856671785a9d7c Author: Adam Dickmeiss Date: Sat Feb 5 10:47:19 2000 +0000 Identifier-length and indicator-lenght no longer set to 2 (forced). commit 2fdf1cc871e6342d03460e703c8c3bb67b7f5267 Author: Adam Dickmeiss Date: Fri Feb 4 11:01:15 2000 +0000 Added more elements. commit b04a1b2d9a23bea37512d2219e2a3551afffd702 Author: Adam Dickmeiss Date: Wed Feb 2 15:13:23 2000 +0000 Minor change. commit c126b2a625462f95475f00efdfdf9ce41a0e9c79 Author: Adam Dickmeiss Date: Mon Jan 31 13:15:21 2000 +0000 Removed uses of assert(3). Cleanup of ODR. CCL parser update so that some characters are not surrounded by spaces in resulting term. ILL-code updates. commit 62bcf7a811cd3151ac10f93317c9ddfa6b16f539 Author: Adam Dickmeiss Date: Sat Jan 15 09:39:50 2000 +0000 Implemented ill_get_ILLRequest. More ILL testing for client. commit 6c025ab4358025e833fdcd5f0457607c5c69352b Author: Adam Dickmeiss Date: Sat Jan 15 09:38:51 2000 +0000 Implemented ill_get_ILLRequest. Added some type mappings for ILL protocol. commit 0341f9b770084da8ccb8e7be7039ce4a7abfdc88 Author: Adam Dickmeiss Date: Sat Jan 15 09:18:42 2000 +0000 Bug fix: some elements where treated as OPTIONAL when they shouldn't. commit acc7723b7d7d6cd3e63866354c8878d0aa21694f Author: Adam Dickmeiss Date: Thu Jan 13 23:05:50 2000 +0000 Fixed tagging for member requester-CHECKED-IN in ILL ASN.1 spec. commit 79430a0c78468168265d169c185c87379b25616b Author: Adam Dickmeiss Date: Wed Jan 12 14:36:07 2000 +0000 Added printing stream (ODR) for backend functions. commit 09c145d7b569e19acd43a50a53c3a8846f7a1c43 Author: Adam Dickmeiss Date: Mon Jan 10 15:16:53 2000 +0000 Added several OID's. commit e5ae0dd3bbac8bb387edb28df0dafc2e8230a96e Author: Adam Dickmeiss Date: Thu Jan 6 14:59:13 2000 +0000 Added oid_init/oid_exit. Changed oid_exit. commit 92c24290e2f731c145291392071b7de965fcacf5 Author: Adam Dickmeiss Date: Thu Jan 6 14:30:56 2000 +0000 Minor change - to prevent warnings. commit 6b12d4fd69aa6c44b45df80c9d3892134fb4cb0e Author: Adam Dickmeiss Date: Thu Jan 6 11:27:16 2000 +0000 Updated for ILL. commit 4ee3f2c5b2404a96041129f8bffa7d3e15a75d19 Author: Adam Dickmeiss Date: Thu Jan 6 11:27:02 2000 +0000 Minor fix so that this source compiles using Visual C++. commit f1f27f8024382290d2809faec271ffeead2cfd84 Author: Adam Dickmeiss Date: Thu Jan 6 11:25:59 2000 +0000 Added case to prevent warning. commit 809ef8947e98c402bdf0b57e730545525ce4e94a Author: ian Date: Tue Jan 4 17:46:17 2000 +0000 Added function to count occurences of a tag spec in a data1 tree. commit 88ce7f5c3713fbf4992763ae38c9fb79a5ccb551 Author: Adam Dickmeiss Date: Wed Dec 22 13:13:32 1999 +0000 Search terms may include "operators" without causing error. commit cca8ec45a77a26602e58dc8aec7f5116ce4b9d46 Author: Adam Dickmeiss Date: Tue Dec 21 16:25:20 1999 +0000 Fixed handling of default/inherited attributes. commit fc2093cfd23eda0ee8384b18dc7e7b8adffd073a Author: Adam Dickmeiss Date: Tue Dec 21 16:24:48 1999 +0000 More robust ISO2709 handling (in case of real bad formats). commit 5ebe07935fedc4ce6b2a3bb0aa29425674ce7d08 Author: ian Date: Tue Dec 21 14:16:19 1999 +0000 Changed retrieval module to allow data1 trees with no associated absyn. Also added a simple interface for extracting values from data1 trees using a string based tagpath. commit e347736dafbae4bbd1eec56e3577353662aee332 Author: Adam Dickmeiss Date: Mon Dec 20 15:20:13 1999 +0000 Implemented ccl_pquery to convert from CCL tree to prefix query. commit d205d4870b1d64af05e9d6f6a2223086af4cce9e Author: Adam Dickmeiss Date: Thu Dec 16 23:36:19 1999 +0000 Implemented ILL protocol. Minor updates ASN.1 compiler. commit 35288d484fe640629398ac8e0c937ced92c75ae0 Author: Adam Dickmeiss Date: Thu Dec 9 22:31:19 1999 +0000 Minor. commit 6e41787b76789b646db74d75a5239031898b13c6 Author: Adam Dickmeiss Date: Thu Dec 9 00:38:03 1999 +0000 New CHANGELOG. commit a27662836b544858a5b3c96cdc335d7da7d30088 Author: Adam Dickmeiss Date: Wed Dec 8 13:37:14 1999 +0000 Minor. commit d953d065a4ed1abd68cec29f93e061a2b8934cd8 Author: Adam Dickmeiss Date: Wed Dec 8 13:21:02 1999 +0000 Minor fix. commit 332d9c8c3c66d71a25dc258c87464f0271a2ca74 Author: Adam Dickmeiss Date: Wed Dec 8 13:14:12 1999 +0000 Added comp.sh. commit a24ec014f584c01a09f44d7900f59d8efd9bc87f Author: Adam Dickmeiss Date: Wed Dec 8 13:10:48 1999 +0000 New version. commit 3ccb0b75bece286721adca359095f1c36366197a Author: Adam Dickmeiss Date: Thu Dec 2 14:01:17 1999 +0000 Changed LICENSE. commit 30cfc59b71c25923e2e9cfb63c310c095bb3b6c1 Author: Adam Dickmeiss Date: Thu Dec 2 13:54:56 1999 +0000 Updated information about YAZ. commit d9ee01635f03f9095a66f71b73580560d48798e8 Author: Adam Dickmeiss Date: Tue Nov 30 13:47:10 1999 +0000 Improved installation. Moved header files to include/yaz. commit cb182c3eb21ca4405d0c9f928ceb33f3fd2f95ba Author: Adam Dickmeiss Date: Mon Nov 29 15:12:27 1999 +0000 Changed the way implementationName - and version is set. commit 5b539981aefd6607b1a4d7747645774c24987f79 Author: Adam Dickmeiss Date: Mon Nov 29 14:36:28 1999 +0000 Implementation_name and implementation_version copied verbatim. commit 77fe09be0d9eb7a585c35a7be679c738a23dffab Author: Adam Dickmeiss Date: Wed Nov 10 09:06:40 1999 +0000 Fixed yaz_oi_update so that it ignores NULL pointer. commit 5f743e6b18587c2daae4fe9cee8cf991b7352d24 Author: Adam Dickmeiss Date: Thu Nov 4 14:58:44 1999 +0000 Added status elements for backend delete result set handler. Updated delete result result set command for client. commit 83b2f733ce31f24ea6bbe014907552e58826a9dd Author: Adam Dickmeiss Date: Wed Nov 3 09:05:56 1999 +0000 Implemented wrbuf_puts. commit 9bf9aa776b136ecaddb3193da79639a70f1f8a6f Author: Adam Dickmeiss Date: Thu Oct 28 11:36:40 1999 +0000 wrbuf_write allows zero buffer length. commit 18ed9f15a489511014d4384a53b27e35824dd831 Author: Adam Dickmeiss Date: Thu Oct 21 12:06:28 1999 +0000 Retrieval module no longer uses ctype.h - functions. commit cdea632bd515af06beaa311c8569180da1e082da Author: Adam Dickmeiss Date: Thu Oct 21 09:50:33 1999 +0000 SGML reader uses own isspace - it doesn't do 8-bit on WIN32! commit 0f47fe84fe77373dad8b00d72836627b4ea3ae60 Author: Adam Dickmeiss Date: Tue Oct 19 12:35:55 1999 +0000 Better dump of OCTET STRING. commit 008efaed7cfe4bbbfdcae17ba22187b4acafdb02 Author: Adam Dickmeiss Date: Tue Oct 19 12:35:42 1999 +0000 Minor bug fix (bug introduced by previous commit). commit 8e3a0973e8149ae25f5404395f417761edee1604 Author: Adam Dickmeiss Date: Fri Oct 15 11:35:41 1999 +0000 Character '.' matches any single character. commit 4bf3190b5cb75c5f5a46ff7a1b6834c188cca008 Author: Per M. Hansen Date: Tue Oct 12 13:03:12 1999 +0000 The danmarc.abs file was addes to support the DANMarc2 record format. commit 0008748e4e9730bfffd4a4c5aba63fb0fe9a3371 Author: Adam Dickmeiss Date: Mon Oct 11 10:01:24 1999 +0000 Implemented bend_sort_rr handler for frontend server. commit 379059e41e165d18f177bacba85212018f451e57 Author: Adam Dickmeiss Date: Mon Oct 11 10:00:29 1999 +0000 Modified printing of records. commit b58f834c58793ae2f098a7da470f521c512784f3 Author: Per M. Hansen Date: Wed Sep 29 14:43:39 1999 +0000 The file dan1.att was added, containing the DAN-1 Attribute set. commit b61bad92f2725995d69732d46361638b8a101c27 Author: Adam Dickmeiss Date: Mon Sep 13 12:51:35 1999 +0000 Fixed bug in yaz_oi_update and added delete option. commit 0d8c0f33c8ab0063c1fac9b1188b9e353d35de5d Author: Adam Dickmeiss Date: Mon Sep 13 12:51:14 1999 +0000 Added CLIENT IP OID. commit b09357c410fba556fbf06e6065aadf78a04f5671 Author: Adam Dickmeiss Date: Fri Sep 10 08:58:32 1999 +0000 Set TRACE_XMALLOC to 1. commit b440dce0831a72bebe4f4821ab7771cc05e8facb Author: Adam Dickmeiss Date: Fri Aug 27 09:40:31 1999 +0000 Renamed logf function to yaz_log. Removed VC++ project files. commit d74993fb08e9d5112264f1cc73973dc986dd41ad Author: Adam Dickmeiss Date: Wed Jul 21 08:48:02 1999 +0000 Removed dmalloc.obj. commit c365561ca2d2f7b16dd287e524abc616eba9b9fc Author: Adam Dickmeiss Date: Tue Jul 13 13:29:02 1999 +0000 Removed dmalloc.h. commit 4d45f16d48247ba07d2eca0592239bba2d36b65d Author: Adam Dickmeiss Date: Tue Jul 13 13:28:24 1999 +0000 Better debugging for NMEM routines. commit 64d911da4c79982db410fc56e74e43aedf34f937 Author: Adam Dickmeiss Date: Tue Jul 13 13:24:53 1999 +0000 Updated memory debugging memory allocatation routines. commit d79d108cf41b2552d07f9219190fcf527cf5d264 Author: Adam Dickmeiss Date: Tue Jul 13 13:23:47 1999 +0000 Non-recursive version of data1_read_node. data1_read_nodex reads stream of bytes (instead of buffer in memory). commit a0bdc8bbd4d346939e7c24fd7e07b6d361d78643 Author: Adam Dickmeiss Date: Tue Jul 6 12:17:15 1999 +0000 Added option -1 that runs server once (for profiling purposes). commit 8e6b961d50a3cad40b5686ccff47540e7405135d Author: Adam Dickmeiss Date: Tue Jul 6 12:16:00 1999 +0000 Improved layout generated record in SGML/XML format. commit f22a5e53e3563367b54471bbcff0b544dab81c30 Author: Adam Dickmeiss Date: Tue Jul 6 12:13:35 1999 +0000 Added "schema" command. commit 762e0e6bf7324c38a001b7a14c41c4a1e98e9499 Author: Adam Dickmeiss Date: Wed Jun 30 09:10:32 1999 +0000 Fixed reading of MS-DOS files. commit 957e9475ba40602fa1def5f1a6ff5a5b10c7c13c Author: Adam Dickmeiss Date: Fri Jun 18 11:29:27 1999 +0000 Added doc to CHANGELOG. commit 617d78c63e7a502367abc3504f192770aa537482 Author: Adam Dickmeiss Date: Thu Jun 17 10:54:44 1999 +0000 Added facility to specify implementation version - and name for server. commit 01c57e6248b73d42453be75d5bceb6fa7ff8081d Author: Adam Dickmeiss Date: Wed Jun 16 12:00:08 1999 +0000 Added proximity. commit 5e81facdf5baf68e33e3370bbc3aa6226dac5bc2 Author: Adam Dickmeiss Date: Wed Jun 16 11:55:24 1999 +0000 Added APDU log to client. commit c74f92579fac45600836ca695a973fd11c1a20db Author: Adam Dickmeiss Date: Fri Jun 11 16:45:59 1999 +0000 Fixed minor bug in ScanRequest encoder. commit 61662168d4d4c1f7edb38cccac4b4a24dcecc58e Author: Adam Dickmeiss Date: Thu Jun 10 11:45:30 1999 +0000 Added bend_start, bend_stop handlers and removed pre_init. Handlers bend_start/bend_stop are called when service/daemon is started/stopped. commit f3eef298fe7e48d8305dd6b239cc7748561a4d5c Author: Adam Dickmeiss Date: Thu Jun 10 09:18:54 1999 +0000 Modified so that pre_init is called when service/server is started. commit c874a015436f78e8f6f5952e068db23d55a31b22 Author: Heikki Levanto Date: Wed Jun 9 15:10:08 1999 +0000 Cleaning up. Seems to work all right commit 30967dafb037ed60bb6c69d9a0e23bff9eba54b8 Author: Adam Dickmeiss Date: Wed Jun 9 14:37:37 1999 +0000 Minor changes. commit 04bb1765f48598e0a1c271c10980352f698f5046 Author: Adam Dickmeiss Date: Wed Jun 9 14:23:58 1999 +0000 Added enable-yc (removed with-yc) and enable-tcpd. commit 1a9b27497a71eafda912d0d4a9069bc61fa5455e Author: Adam Dickmeiss Date: Wed Jun 9 14:01:33 1999 +0000 Fixed for compiled ASN.1. commit 3eb44ee565de8be51505f8ac3c6ef724ac356e0e Author: Heikki Levanto Date: Wed Jun 9 13:33:32 1999 +0000 Compiles and links both old and new type stuff all right commit 7d97c14b8f494310d0d866e9e82bb37c8b5a4e63 Author: Heikki Levanto Date: Wed Jun 9 11:05:30 1999 +0000 At least it can compile commit 4e664c278636002a3a0c7897d233a258ac1ec18d Author: Adam Dickmeiss Date: Wed Jun 9 10:52:11 1999 +0000 Added YAZ_EXPORT. commit a19243ec18959150a30c63c521fc5b0af860ce18 Author: Adam Dickmeiss Date: Wed Jun 9 09:43:31 1999 +0000 Header files moved to include (used to be z39.50). commit a407bd021d8ea49257cf119e409a8c1e94e6fc25 Author: Adam Dickmeiss Date: Wed Jun 9 09:43:11 1999 +0000 Added option -I and variable h-path to specify path for header files. commit 25fa35a0e1f84fa9b6366d71ee5b2ab58a2bd468 Author: Heikki Levanto Date: Wed Jun 9 09:41:09 1999 +0000 More work on the ASN-generated files. commit 1a9dd6317f70b3d230429cab8a481913a6731813 Author: Heikki Levanto Date: Tue Jun 8 14:32:30 1999 +0000 Proto.h works all right, removed linker warnings from server.lib commit 6c5d249279c2d0035eae94aae229bb9d1324c418 Author: Heikki Levanto Date: Tue Jun 8 14:07:24 1999 +0000 Renamed a pile of files Tmpdir (to get around Ms leaving temp files around, and crashing when too many with same number...) commit 8d363b42a1805306b5df26aac694a4491d5c9119 Author: Adam Dickmeiss Date: Tue Jun 8 13:11:55 1999 +0000 Fixed problem with proto.h. commit 91481d554b60c13c6c163d20b7bd71c24af562aa Author: Heikki Levanto Date: Tue Jun 8 12:16:19 1999 +0000 Deleting this, renamed to makefile (.nothing) commit 6056c9215b71c976714e822e560ca6352e36387c Author: Heikki Levanto Date: Tue Jun 8 12:15:41 1999 +0000 Renamed to makefile (.nothing) (from .mak) Working on the proto.h problems and alternative confiigurations commit b4aa8d5fc85bd832c06f9782a3eb6a1e01a01d21 Author: Adam Dickmeiss Date: Tue Jun 8 10:16:17 1999 +0000 Minor changes. commit 0de9135acc6357f14e32cab39f5aa87949b78967 Author: Adam Dickmeiss Date: Tue Jun 8 10:12:43 1999 +0000 Moved file to be part of zutil (instead of util). commit 4dbd27ab2a5105631878e9a30c9cfcd57d85231d Author: Adam Dickmeiss Date: Tue Jun 8 10:10:49 1999 +0000 Added Makefile. commit 161ec45b40a3ab08e08946c9654ab6fea4604760 Author: Adam Dickmeiss Date: Tue Jun 8 10:10:15 1999 +0000 New sub directory zutil. Moved YAZ Compiler to be part of YAZ tree. commit ea114332560c12eaa8daa8de3d127e56d135b3e3 Author: Heikki Levanto Date: Fri Jun 4 10:04:28 1999 +0000 Cleaning up commit 0038ea56f28bf86ed4e70e6f076fed78ad5b96e1 Author: Heikki Levanto Date: Wed Jun 2 13:23:29 1999 +0000 Debug options for C compiler commit 2ae069a121b2105132a7e00702a1b8e439312981 Author: Adam Dickmeiss Date: Tue Jun 1 14:29:11 1999 +0000 Work on Extended Services. commit 30d40f3b6199b55b0bfbc59afabedf437330dacf Author: Adam Dickmeiss Date: Thu May 27 13:07:54 1999 +0000 Fix. commit 2c185557bb24fa795cee97d813074932e8cc6f78 Author: Adam Dickmeiss Date: Thu May 27 13:02:20 1999 +0000 Assigned OID for old DB Update (VAL_DBUPDATE0). commit c73dee95ff68d866ad3868e2494ac2325580b35a Author: Adam Dickmeiss Date: Wed May 26 15:24:26 1999 +0000 Fixed minor bugs regarding DB Update (introduced by previous commit). commit 3e8a6d354cf280b4a157796bae8d4ea713784247 Author: Adam Dickmeiss Date: Wed May 26 14:47:12 1999 +0000 Implemented z_ext_record. commit b23f8886419f5fa9f4a46ba15812ad02d1ca8e55 Author: Adam Dickmeiss Date: Wed May 26 13:49:12 1999 +0000 DB Update implemented in client (very basic). commit 18225043ecae8ca09b8e49fa047ecf7f314dcbfb Author: Adam Dickmeiss Date: Wed May 26 07:49:35 1999 +0000 C++ compilation. commit 68f9c30763ddbba9f25b6e893078ead2583c6f21 Author: Heikki Levanto Date: Wed May 19 08:26:22 1999 +0000 Added comments commit 891f66faece5ac308dc9a9ed021021841fbb712b Author: Heikki Levanto Date: Tue May 18 16:58:48 1999 +0000 Does yaz, client, server.lib, *and* ztest! commit 59c58f47d1a67496611b9a0f4eb71e9b1d8aa9b5 Author: Heikki Levanto Date: Tue May 18 16:03:50 1999 +0000 Compiles and links yaz.dll and client.exe, which seems to work. Server and ztest still missing commit ed4b5e42855bb04c65b4a8deb2be881e2af13daa Author: Adam Dickmeiss Date: Thu May 6 13:21:26 1999 +0000 Added tcpdchk.c. commit fd24afccaa7ffa98f8f39a43c56cc431d36a0ac5 Author: Adam Dickmeiss Date: Wed May 5 14:49:43 1999 +0000 Added ApS. commit bca4c4e39bb825d3cab14d9af01ac7f5dd5457a2 Author: Adam Dickmeiss Date: Thu Apr 29 07:31:23 1999 +0000 Changed tcpip_strtoaddr_ex so that only part 'till '/' is considered part of hostname. commit d6c907d206f3afa05de6cab2de81734946c24daf Author: Adam Dickmeiss Date: Wed Apr 28 15:17:01 1999 +0000 Fixed problem with Makefile and sub directories. commit d52639011c722745e5e6d563f8b6a41fb096a43b Author: Adam Dickmeiss Date: Tue Apr 27 08:34:10 1999 +0000 Modified odr_destroy so that file is not closed when file is 0. commit c591b6b2f9f567e259c536e4c312d9d76f0c58ea Author: Adam Dickmeiss Date: Mon Apr 26 07:25:25 1999 +0000 Implemented OtherInfo utility. commit 919441ddfbd885d783323cb1d23ee372d0be9ad0 Author: Adam Dickmeiss Date: Fri Apr 23 13:34:33 1999 +0000 Fixed bug in match_triple. Thanks to Franck Falcoz . commit dc0be0ca0f414a154581185f946426aba550bd89 Author: Adam Dickmeiss Date: Wed Apr 21 11:46:00 1999 +0000 Fixed bug in {en,de}coder for OtherInformation. commit e147ddf129696b470aed3cfcdb405af84ee56ef6 Author: Adam Dickmeiss Date: Tue Apr 20 09:56:47 1999 +0000 Added 'name' paramter to encoder/decoder routines (typedef Odr_fun). Modified all encoders/decoders to reflect this change. commit bf7ee634e855d15e955d06e7b225d2045abd518a Author: Adam Dickmeiss Date: Fri Apr 16 14:45:55 1999 +0000 Added interface for tcpd wrapper for access control. commit 742b23a913c14e0a4d39fa8f314300fea55c2352 Author: Adam Dickmeiss Date: Thu Apr 15 09:19:43 1999 +0000 Added COOKIE UserInfo OID. commit 27fe93072b78a3232f6ce368c63940e1bbef5db8 Author: Adam Dickmeiss Date: Fri Apr 9 12:16:11 1999 +0000 Added OtherInfo private OID proxy. commit 102fffd24eb36b4b8322b3f139166ce5f5a4b7d4 Author: Adam Dickmeiss Date: Wed Mar 31 11:18:24 1999 +0000 Implemented odr_strdup. Added Reference ID to backend server API. commit ba3b08ceb55b7448c0022892d6d013a107b26ab7 Author: Adam Dickmeiss Date: Wed Mar 31 11:15:37 1999 +0000 Fixed memory leaks in ccl_find_str and ccl_qual_rm. commit 2f97006aa778654d4ae5407c41292793ff2fce8f Author: Adam Dickmeiss Date: Wed Mar 31 11:11:14 1999 +0000 Function getprotobyname only called once. Minor change in tcpip_get to handle multi-threaded conditions. commit 52a3162e5220a69b5650b702653e3791918c24b0 Author: Adam Dickmeiss Date: Tue Mar 23 14:14:25 1999 +0000 Yet another fix. commit 9f37e63c44f09146effc68d3aa269d31c745bb12 Author: Adam Dickmeiss Date: Thu Mar 18 12:57:13 1999 +0000 Fixed bug in TargetInfo encoder/decoder. commit 546c28ba38f70ca66b6ce522df97645d9d5cefb9 Author: Adam Dickmeiss Date: Thu Mar 18 12:57:03 1999 +0000 Minor fix. commit 55d72035ddd00fcb6fe39a86023f472eb020c14b Author: Adam Dickmeiss Date: Thu Mar 11 15:26:51 1999 +0000 Fixed bug (introduced by previous commit). commit c066a043f79860daf37234db3509156a3fc9205f Author: Adam Dickmeiss Date: Thu Mar 11 11:12:07 1999 +0000 Added GNU readline support. HTML display in client. commit febd96e724a673b84f5db8f48dfb71c805c7f5e6 Author: Sebastian Hammer Date: Thu Feb 18 10:30:46 1999 +0000 Changed ES: Update OID commit 3e8dfca3d9632d64c9cba76a98b1adf6e5c65a1f Author: Sebastian Hammer Date: Thu Feb 18 10:30:29 1999 +0000 Added note about the ES: Update change commit f920402c075345a9e8de3bc8f5b513cba09bb58d Author: Adam Dickmeiss Date: Thu Feb 11 09:10:26 1999 +0000 Function nmem_init only mandatory on Windows. commit 26fdcc5e41254131ef755b14243c19d202b14d8e Author: Adam Dickmeiss Date: Tue Feb 2 13:57:28 1999 +0000 Uses preprocessor define WIN32 instead of WINDOWS to build code for Microsoft WIN32. commit eed3de307e48d66d45104148a1138e0a101cf3a1 Author: Adam Dickmeiss Date: Mon Feb 1 15:37:32 1999 +0000 Fixed minor bug introduced by previous commit. commit 49e9b34058467505c371057cb01425e877d6df02 Author: Adam Dickmeiss Date: Mon Feb 1 15:35:21 1999 +0000 Added XML display. commit 87ef7657b92bc53bd98e18ef5046ae3698a7fb01 Author: Adam Dickmeiss Date: Mon Jan 25 13:49:47 1999 +0000 Made data1_pr_tree make better printing of data1 buffers. commit 21ea17f766bb492a93154ec7b242653fa37dec91 Author: Adam Dickmeiss Date: Fri Jan 8 11:23:10 1999 +0000 Added const modifier to some of the BER/ODR encoding routines. commit a09c8bfc4f5f873400cfa411d73e58035e9e4f52 Author: Adam Dickmeiss Date: Tue Dec 15 12:45:42 1998 +0000 Minor change. commit 208f8e3130f2a3a4ebeac69a2097367ef8f1617e Author: Adam Dickmeiss Date: Mon Dec 14 14:48:05 1998 +0000 Fixed memory leak - happened when fetching MARC records. commit 9c515b4bffa3c99fec87d3bdfaba158aca8e1dc1 Author: Adam Dickmeiss Date: Thu Dec 3 11:33:04 1998 +0000 Added OID's for XML. commit 87e38ceac69db72baab73144743ba5a638ec984d Author: Adam Dickmeiss Date: Tue Nov 17 09:53:15 1998 +0000 Chagned project to include logrpn.c commit 93ba03e40c50a4216b871a24ba2aec4739c18b30 Author: Adam Dickmeiss Date: Tue Nov 17 09:52:59 1998 +0000 Fixed minor bug (introduced by previous commit). commit e207755675f8dbf552f1e0696077594e7fa68190 Author: Adam Dickmeiss Date: Mon Nov 16 16:02:32 1998 +0000 Added loggin utilies, log_rpn_query and log_scan_term. These used to be part of Zebra. commit 51a57f063cc48f3343ab59f10aab92b80d424eaf Author: Adam Dickmeiss Date: Mon Nov 9 13:39:45 1998 +0000 Fixed configure. commit 42eee1a00a498bd7a106363d85f804d163d3cfb6 Author: Adam Dickmeiss Date: Mon Nov 9 13:23:08 1998 +0000 Minor changes. commit 7c7a61e6c983a3f87a697597995ed885d8465a01 Author: Sebastian Hammer Date: Thu Nov 5 10:24:53 1998 +0000 Fixed typo in resourcetype commit d04c6957682517a2236c94dfbbec7eb8fbb4d8fa Author: Adam Dickmeiss Date: Tue Nov 3 10:14:12 1998 +0000 Changed definition of data1 node so that it uses less space. commit cacd7aaabab274094439a32b2876a865e06ca0dd Author: Adam Dickmeiss Date: Tue Nov 3 10:09:36 1998 +0000 Fixed bug regarding YC. commit f69d4aa4609ff3daa71733da1ea0fcd8322ab954 Author: Adam Dickmeiss Date: Wed Oct 28 15:09:59 1998 +0000 Added --with-yc option to configure. For the data1_node in data1.h: decreased size of localdata and removed member "line" which wasn't useful. commit ccbb2c2626db1995797199b57c99fd95d8d35a9e Author: Adam Dickmeiss Date: Wed Oct 28 10:28:35 1998 +0000 Minor changes for project. commit 938eac215351d662d5ed11efbd95f5e123f3195b Author: Adam Dickmeiss Date: Wed Oct 28 10:26:59 1998 +0000 New functions log_init_file, log_init_level, log_init_prefix. commit 8448f144099c16b7ab17b2547cc3a04816dcce07 Author: Adam Dickmeiss Date: Tue Oct 20 15:16:22 1998 +0000 Minor change to prevent warning. commit 25c96db16e4312d9936843d48442ddcd66a0c00d Author: Sebastian Hammer Date: Tue Oct 20 15:15:25 1998 +0000 Work commit 18b3066bd7ad40c86583503aa2d4a100c74c8c03 Author: Adam Dickmeiss Date: Tue Oct 20 15:13:45 1998 +0000 Minor fix regarding output for Item Order. commit 7fb350046d29651fbc27cf92aefde03ceff53895 Author: Sebastian Hammer Date: Tue Oct 20 14:00:30 1998 +0000 Fixed Scan commit 676a21e809c237ea03a72530126ce2c25b531be9 Author: Sebastian Hammer Date: Tue Oct 20 14:00:23 1998 +0000 Work commit f422693382524b11066ec4129ca9213effdb893a Author: Sebastian Hammer Date: Tue Oct 20 13:55:37 1998 +0000 Fixed Scan bug in asn and client commit f4fb653200d8de7ea39f89afba3a1c6a946fb167 Author: Sebastian Hammer Date: Tue Oct 20 13:23:15 1998 +0000 changed preferred pos to 1 commit ec63ca9a4271e2575a417346e67c45e84157ba35 Author: Adam Dickmeiss Date: Tue Oct 20 13:21:43 1998 +0000 Fixed scan response handler. commit a49837cbe6fcbeeb9ce857b0eeb942619ba80b5e Author: Adam Dickmeiss Date: Mon Oct 19 15:24:20 1998 +0000 New nmem utility, nmem_transfer, that transfer blocks from one NMEM to another. commit 576bbdac86159c56e0f609177a355e59e7cfc3a8 Author: Adam Dickmeiss Date: Mon Oct 19 14:16:36 1998 +0000 Fixed data1_gettagbyname. Bug introduced by previous revision. commit 8b0cb132d10388facca6fcdefb87b997e9c51203 Author: Sebastian Hammer Date: Sun Oct 18 22:33:35 1998 +0000 Added diagnostic dump of Item Order Eservice. commit 23e611c8f572fd6ae2a3aa9beed93948c4da5fb9 Author: Adam Dickmeiss Date: Sun Oct 18 07:48:56 1998 +0000 Fixed oid_getentbyoid so that it returns NULL when parsed oid is NULL. commit 21a7fea425de8b32ac71bbbb981e88e77e6a3428 Author: Adam Dickmeiss Date: Thu Oct 15 08:29:14 1998 +0000 Tag set type may be specified in reference to it using "tagset" directive in .abs-files and "include" directive in .tag-files. commit 62c71dc65bf251b5edc55b9583ba319336a51ded Author: Adam Dickmeiss Date: Thu Oct 15 08:26:23 1998 +0000 Added type cast to make C++ happy. commit cd4c2685a415533bd122c04adbdc3b90701ac6b3 Author: Per M. Hansen Date: Wed Oct 14 14:24:08 1998 +0000 Publisher changed from (2,3) to (2,31) in meta.abs. commit e93e1b6814d3e9cd8575f7f2d496bf3be83434b4 Author: Adam Dickmeiss Date: Wed Oct 14 13:32:35 1998 +0000 Added include of string.h. commit 45bfcdc6cfcb7af8b930fe49c43aeadfe5624f20 Author: Adam Dickmeiss Date: Wed Oct 14 13:31:56 1998 +0000 Bug fix. Bug introduced by previous commit. commit 90c3ff17bfb20a694faea88229b6230918818f16 Author: Adam Dickmeiss Date: Tue Oct 13 20:52:17 1998 +0000 Changed headers and removed obsolete ordinal spec from attsets. commit 8921101959d7544ec4691822357b1bcf08627097 Author: Adam Dickmeiss Date: Tue Oct 13 20:06:05 1998 +0000 Added changes. commit bf5a7e7603a4430bfd86ee30c8b18ade8101d169 Author: Adam Dickmeiss Date: Tue Oct 13 20:05:57 1998 +0000 Minor change. commit 63ce3b67bdea2b7cd0531f3f11ccbc8c94753455 Author: Adam Dickmeiss Date: Tue Oct 13 16:12:23 1998 +0000 Added support for Surrogate Diagnostics for Scan Term entries. commit cc5c16420eb491137840f6b0976a99a37573e7cb Author: Adam Dickmeiss Date: Tue Oct 13 16:11:11 1998 +0000 Added printf-format check for logf when using GNUC. commit 4482f2b095b641545987153d42c4069da9edf66e Author: Adam Dickmeiss Date: Tue Oct 13 16:10:16 1998 +0000 Added extra argument 'lineno' to function readconf_line. commit db9513f9eca4ef13d3cea779a695bb822fd973a9 Author: Adam Dickmeiss Date: Tue Oct 13 16:09:45 1998 +0000 Added support for arbitrary OID's for tagsets, schemas and attribute sets. Added support for multiple attribute set references and tagset references from an abstract syntax file. Fixed many bad logs-calls in routines that read the various specifications regarding data1 (*.abs,*.att,...) and made the messages consistent whenever possible. Added extra 'lineno' argument to function readconf_line. commit 2cfcdda457bc91588509f801ba55e956d37368f9 Author: Adam Dickmeiss Date: Tue Oct 13 16:03:37 1998 +0000 Better checking for invalid OID's in p_query_rpn. commit 23cfa431fda52535722e4efdc3f462995937e863 Author: Adam Dickmeiss Date: Tue Oct 13 16:01:52 1998 +0000 Implemented support for dynamic object identifiers. Function oid_getvalbyname now accepts raw OID's as well as traditional names. commit 853b3f256a6753ea6dc26f6123a4956740ed82b4 Author: Adam Dickmeiss Date: Tue Oct 13 16:00:17 1998 +0000 Implemented nmem_critical_{enter,leave}. commit 144325b3bf52d2408a6fe1c395ee955ec3b208c6 Author: Adam Dickmeiss Date: Tue Oct 13 15:58:36 1998 +0000 Minor fix in odr_getoidbystr_nmem. commit 0e3207ccc9893cb48c2f7938fedb9001ecbb9d71 Author: Adam Dickmeiss Date: Wed Sep 30 15:06:03 1998 +0000 Fixed LIB dependencies in Makefiles. commit db63853847b11ee3432b140fa28b23360db90007 Author: Adam Dickmeiss Date: Mon Sep 28 12:44:47 1998 +0000 Minor changes. commit d4727a15cd43e69241152bcdec5c8ad97c6c8695 Author: Adam Dickmeiss Date: Mon Sep 28 12:44:40 1998 +0000 Fixed bug in f_integer. commit 8030536c98d595898b316df5eb118b1d6398450c Author: Adam Dickmeiss Date: Tue Sep 22 09:41:21 1998 +0000 Fix. commit 142235dcf39ff59a20918e53abcf62f59fa9f2a4 Author: Adam Dickmeiss Date: Tue Sep 22 09:40:54 1998 +0000 Fixed Makefile. commit 16d8b52d5affdc95443895a2ac4a92dfcd5703eb Author: Adam Dickmeiss Date: Tue Sep 22 09:40:37 1998 +0000 Minor changes in sort spec. commit 962f5f857455567d9b56cc17d96eb95608a0222e Author: Adam Dickmeiss Date: Wed Sep 2 12:41:48 1998 +0000 Added decode stream in bend search structures. commit 30d8d86b830a88f1c8f5fef944b6d36150651b9b Author: Adam Dickmeiss Date: Tue Aug 25 16:19:37 1998 +0000 Minor changes to Makefile(s). commit 1fbf9907e66c5697b9537a1a4849295c05b12b6b Author: Adam Dickmeiss Date: Fri Aug 21 14:13:21 1998 +0000 Added GNU Configure script to build Makefiles. commit b5bc2a31ad5125dc6d3ed1b6e626f0b9d22618bb Author: Adam Dickmeiss Date: Wed Aug 19 16:10:03 1998 +0000 Changed som member names of DeleteResultSetRequest/Response. commit adfa93d3033913d04c134941f7035f00fd2f080b Author: Adam Dickmeiss Date: Mon Aug 3 10:23:55 1998 +0000 Fixed bug regarding Options for Sort. commit 3060b77b776350c6e677c06b3070542dba5c42b6 Author: Adam Dickmeiss Date: Mon Jul 20 12:38:41 1998 +0000 Implemented delete result set service to server API. commit 1b29df1d940a30bca2af0fb5c7e19961520bf230 Author: Adam Dickmeiss Date: Mon Jul 20 12:38:13 1998 +0000 More LOG_DEBUG-diagnostics. commit 9b639eeb66d918ee531668b405a6f4c4438c64af Author: Adam Dickmeiss Date: Mon Jul 20 12:37:06 1998 +0000 Added 'delete ' command. Changed open command so that it reconnects if already connected. commit 28418a65c9421ef2dc2779a4d8f5febbec3c36f2 Author: Adam Dickmeiss Date: Mon Jul 20 12:36:22 1998 +0000 Minor changes. commit 9fc822fe67ef4f5a898d9a85fbae7dd9a3435023 Author: Adam Dickmeiss Date: Mon Jul 20 12:35:57 1998 +0000 Added more memory diagnostics (when NMEM_DEBUG is 1). commit 348e11131385e72241a04997e90c8c77147e6423 Author: Adam Dickmeiss Date: Tue Jul 7 15:51:03 1998 +0000 Changed server so that it stops if bind fails - "address already in use" typically causes this. commit 3a14421799597d61196e2bb07bdd83396000cb45 Author: Adam Dickmeiss Date: Tue Jul 7 15:49:23 1998 +0000 Added braces to avoid warning. commit 5379711b958f1b4ae4148b1734f618e71b3dd6ef Author: Adam Dickmeiss Date: Tue Jul 7 15:49:01 1998 +0000 Reduced chunk size. commit 81503ca4c08bfaf4eb6782a9207cc33fa941a442 Author: Adam Dickmeiss Date: Fri Jul 3 14:21:27 1998 +0000 Added critical sections for pthreads-library. Thanks to Ian Ibbotson, Fretwell Downing Informatics. commit 6a39772ad0cbd1bcb5d0984cd783d4a9e06bdfdb Author: Adam Dickmeiss Date: Mon Jun 29 07:59:17 1998 +0000 Minor fix. commit 4519f45627820ab5acbb40400fc3667b08c140d3 Author: Sebastian Hammer Date: Fri Jun 26 11:17:23 1998 +0000 v2+ commit c03149b852e2937bd0637b21c3058a48dd25a739 Author: Adam Dickmeiss Date: Tue Jun 23 15:37:50 1998 +0000 Added type cast to prevent warning. commit 48096bb041fcc45b11666ad058963a633a0ec3db Author: Adam Dickmeiss Date: Mon Jun 22 11:32:35 1998 +0000 Added 'conditional cs_listen' feature. commit ec29e37cd269b330eb493157dedf9aacf5c6ca46 Author: Adam Dickmeiss Date: Tue Jun 9 13:55:06 1998 +0000 Minor changes. commit 3aefb04b1ebd1a699ab732b7504fdf25a2c35fa7 Author: Adam Dickmeiss Date: Tue Jun 9 13:21:32 1998 +0000 Added "other" element paths. commit 29001d9d8d6830e25a4430c7c3cb51408db984d0 Author: Adam Dickmeiss Date: Mon Jun 8 14:26:41 1998 +0000 Fixed bug in f_queryTypeDetails. commit 5a43720eeca6175e7eba0672a9dc622c24125996 Author: Adam Dickmeiss Date: Fri Jun 5 08:58:48 1998 +0000 Fixed un-initialised var in f_rpnCapabilities. commit cbd030fea600f6fb59fc377dec5efc2c708584bb Author: Adam Dickmeiss Date: Fri Jun 5 08:57:43 1998 +0000 Fixed problem with function wordlen. commit dcf5a575f87f61a78dfd2d82f6c480ddc72e273b Author: Adam Dickmeiss Date: Tue Jun 2 14:32:45 1998 +0000 Changed usmarc configuration files. commit 5772fdf31f5f93854570470b4956ae3faf6dcaf5 Author: Adam Dickmeiss Date: Tue Jun 2 10:23:07 1998 +0000 Minor changes. commit 2156e17830e0e3ba739800d6616fa045b0fe5565 Author: Adam Dickmeiss Date: Wed May 27 16:57:06 1998 +0000 Support for surrogate diagnostic records added for bend_fetch. commit 053b1a0ea316109ad6735c877c1472485458e31d Author: Adam Dickmeiss Date: Wed May 27 16:55:54 1998 +0000 Minor changes. commit 3e506bbbebc55bd870aaf2be4d0014cec0779851 Author: Adam Dickmeiss Date: Wed May 20 13:51:46 1998 +0000 Better documention in top-level Makefile. commit 63383353371a1a5ec1d84a42b56c44d6fdf09f07 Author: Adam Dickmeiss Date: Wed May 20 09:55:32 1998 +0000 Function tcpip_get treats EINPROGRESS error in the same way as EWOULDBLOCK. EINPROGRESS shouldn't be returned - but it is on Solaris in some cases. commit ce9012da65c7aec337e292f3b077ae954532501a Author: Adam Dickmeiss Date: Wed May 20 09:52:39 1998 +0000 Removed 'dead' definition. commit 0d9eca26da6a9369bb00efd75a9472380526f547 Author: Adam Dickmeiss Date: Mon May 18 13:06:50 1998 +0000 Changed the way attribute sets are handled by the retriaval module. Extended Explain conversion / schema. Modified server and client to work with ASN.1 compiled protocol handlers. commit 2f252f9a14edf0383d551b6aed12597c745cc264 Author: Adam Dickmeiss Date: Mon May 18 10:14:08 1998 +0000 Minor change - removed 'dead' definitions. commit fa0ebb67bb67a5f57b8a198e3e477cd84c064d26 Author: Adam Dickmeiss Date: Mon May 18 10:13:07 1998 +0000 Fixed call to es_request handler - extra argument was passed. commit e1be891b28d0123675ddcefe37587b0546f95936 Author: Adam Dickmeiss Date: Mon May 18 10:10:40 1998 +0000 Minor change to avoid C++ warning. commit 081bf3419fb97408aea83964cac9f130c6d1bbdc Author: Adam Dickmeiss Date: Mon May 18 10:10:01 1998 +0000 Added Explain-schema and Explain-tagset to OID database. commit ac9747b9c363db9de92cdcb83605ff274bfdcaa9 Author: Per M. Hansen Date: Mon Apr 27 10:17:03 1998 +0000 Copy files to binary directory. commit 87c7c5348b589a0acc3d84d8a88f3789e76df6a2 Author: Adam Dickmeiss Date: Sun Apr 26 11:08:09 1998 +0000 Fixed Makefile. commit c96b62f6352ee14de1a0c868a90c626d522664ed Author: Adam Dickmeiss Date: Sun Apr 26 10:55:48 1998 +0000 Fixed project dependencies. commit 4e0710badb00d3957d110ce661cec2f32148b2d0 Author: Per M. Hansen Date: Tue Apr 21 10:04:30 1998 +0000 Added Universe resource report. commit 8de81d57ebf189d37a160fe66df667b50ba7cb86 Author: Sebastian Hammer Date: Fri Apr 17 11:04:05 1998 +0000 *** empty log message *** commit bed56a5a945178d0b0ed76601753770fb581504f Author: Adam Dickmeiss Date: Thu Apr 2 14:33:29 1998 +0000 Minor changes. commit 4b867394d5d5dda2be8427c96e0fb0fd07eddbdc Author: Adam Dickmeiss Date: Thu Apr 2 08:27:36 1998 +0000 Minor change in definition of Z_TargetInfo. Furhter work on Explain schema - added AttributeDetails. commit f94999cca65bd3464c1c6db8b5046e0a010b0c7f Author: Adam Dickmeiss Date: Tue Mar 31 15:13:19 1998 +0000 Development towards compiled ASN.1. commit b436ce38e1e619d2225c7c75c1f0de841aa13bad Author: Adam Dickmeiss Date: Tue Mar 31 11:07:44 1998 +0000 Furhter work on UNIverse resource report. Added Extended Services handling in frontend server. commit 3248693ab32c811f109a70d653622c087977b418 Author: Adam Dickmeiss Date: Fri Mar 20 17:29:20 1998 +0000 Include of odr_use.h in odr.h. Added prototype for odr_enum. commit 84b60b9a8d2052540541726390fde416c59e1f40 Author: Adam Dickmeiss Date: Fri Mar 20 14:46:06 1998 +0000 Added UNIverse Resource Reports. commit bb28f91640a69a39e485e4c67b636fb17b3bb6af Author: Adam Dickmeiss Date: Fri Mar 20 14:45:27 1998 +0000 Implemented odr_set_of and odr_enum. commit 74582047b4f19d220c6722a85f4651dc742f083f Author: Adam Dickmeiss Date: Fri Mar 20 14:45:01 1998 +0000 Implemented odr_enum and odr_set_of. commit 90b607d71dc080e2d6d9bd9670d8e20431c9f2a0 Author: Adam Dickmeiss Date: Mon Mar 16 12:21:15 1998 +0000 Fixed problem with tag names that weren't set to the right value when wildcards were used. commit b995c31a59a57b7c338e57a4067028bb7619e64e Author: Adam Dickmeiss Date: Thu Mar 12 11:28:45 1998 +0000 Fix: didn't set root member of tagged node in function. data1_add_insert_taggeddata. commit 1ff2e27ec44aebe0c9f6cc5a26ea19cd6e97b9e8 Author: Sebastian Hammer Date: Fri Mar 6 11:47:48 1998 +0000 Updated meta schema to reflect Dublin Core additions to TagsetG commit e1af980ed4466d784db2395ad5bdddadb8a24504 Author: Adam Dickmeiss Date: Thu Mar 5 08:15:32 1998 +0000 Implemented data1_add_insert_taggeddata utility which is more flexible than data1_insert_taggeddata. commit 964a340466d80d4c992aaa5a81159f6c13fb70d8 Author: Adam Dickmeiss Date: Thu Mar 5 08:12:48 1998 +0000 Added description. commit 559aecba0e61eca34706023436692ba23faa29a7 Author: Adam Dickmeiss Date: Thu Mar 5 08:09:03 1998 +0000 Minor change to make C++ happy. commit 475b8ce3047108dcf7a87251733299077d7001e7 Author: Adam Dickmeiss Date: Thu Mar 5 08:07:58 1998 +0000 Make data1 to EXPLAIN ignore local tags in root. commit 413ba1f52face6dc6c160b24e64eb650591784ac Author: Adam Dickmeiss Date: Thu Mar 5 08:05:10 1998 +0000 Added a few casts to make C++ happy. commit f4be2b662141a53c7b9a8a9b410b549dfd2bc1fb Author: Adam Dickmeiss Date: Fri Feb 27 14:08:04 1998 +0000 Added const to some char pointer arguments. Reworked data1_read_node so that it doesn't create a tree with pointers to original "SGML"-buffer. commit 852a501e43f29602c69e7f12faf241b18f2479ac Author: Adam Dickmeiss Date: Fri Feb 27 14:05:34 1998 +0000 Added printing of integer nodes. commit 6f2577984a4b90d7ef4c4565b619927cd45c9132 Author: Adam Dickmeiss Date: Fri Feb 27 14:04:55 1998 +0000 Fixed bug in statserv_remove. commit 84842745a27a08eb4a6c1ea971dfcc320c81bac6 Author: Adam Dickmeiss Date: Mon Feb 23 10:57:09 1998 +0000 Take care of integer data nodes as well in conversion. commit 79fbddfe6b191ef88aae59f728af93d68252448c Author: Adam Dickmeiss Date: Mon Feb 16 10:20:42 1998 +0000 Added prt-dat.c. commit 97e0cd0e1341f4b75216dec7c95f7a4627f4e63d Author: Adam Dickmeiss Date: Wed Feb 11 13:48:00 1998 +0000 Changes. commit 044d170f0a963555486df54653cd2fdc5815928b Author: Adam Dickmeiss Date: Wed Feb 11 11:53:21 1998 +0000 Changed code so that it compiles as C++. commit 6565e283922168b7a1284d0c4164f94c833f6301 Author: Adam Dickmeiss Date: Tue Feb 10 17:25:21 1998 +0000 Updated tagset-G and M. commit 460e6384de368d1c41d544d7cb8cd95043cbe821 Author: Adam Dickmeiss Date: Tue Feb 10 15:32:03 1998 +0000 Added new Object Identifiers. commit fa86345c14168c451f8c76b71309b27230bfee44 Author: Adam Dickmeiss Date: Tue Feb 10 15:31:46 1998 +0000 Implemented date and time structure. Changed the Update Extended Service. commit 683bd26f52e6f7791627c60a08f14e4532e01769 Author: Adam Dickmeiss Date: Tue Feb 10 15:30:32 1998 +0000 Changes. commit ee1eaa955f545d57c0ff8ce4ce210db95a4d817c Author: Adam Dickmeiss Date: Tue Feb 10 11:03:56 1998 +0000 Added support for extended handlers in backend server interface. commit 20928b0dc31d2895dcc926f1c4192abaf25eca36 Author: Adam Dickmeiss Date: Tue Feb 10 11:03:06 1998 +0000 Implemented command refid. Client prints reference-ID's, when present, in responses. commit 00d32932ca2e4e86e83239bcfea3ab17007211eb Author: Adam Dickmeiss Date: Tue Feb 10 11:01:11 1998 +0000 Minor. commit dc00fb12c66d5718e5764daaaa9319749d67ea21 Author: Adam Dickmeiss Date: Tue Feb 10 11:00:59 1998 +0000 *** empty log message *** commit 11ef03208ae620bdba76aa18c924e83b1d433368 Author: Adam Dickmeiss Date: Tue Feb 10 10:29:37 1998 +0000 Changed definition of Z_Triple in file prt-grs.h - member boolean renamed to zboolean. Some C++ compilers complained about the name. commit 8f7995bdfe85beb2ff6fa08e99bb05242f3bf71f Author: Adam Dickmeiss Date: Tue Feb 10 10:28:56 1998 +0000 Added app_name, service_dependencies, service_display_name and options_func. options_func allows us to specify a different function to interogate the command line arguments. The other members allow us to pass the full service details accross to the service manager (CW). commit 7851330f91232de8147b1b9653d3e3d7069b5c06 Author: Adam Dickmeiss Date: Fri Jan 30 15:32:57 1998 +0000 1.4pl2. commit a807bde38544a7aa45dd2988e504a1acb3fd30c0 Author: Adam Dickmeiss Date: Fri Jan 30 15:24:57 1998 +0000 Fixed bug in inetd code. The server listened on tcp:@:9999 even though it was started in inetd mode. commit 43b1963c0e75ef802c8f5dd37bbc587d63188e72 Author: Adam Dickmeiss Date: Thu Jan 29 14:26:42 1998 +0000 Updated. commit deb4dce69ad5af12594d5712c8b50d8b84f8d9a0 Author: Adam Dickmeiss Date: Thu Jan 29 14:08:52 1998 +0000 Better sort diagnostics. commit 6a7d650e44134d161a4614a5e68245216dec2b19 Author: Adam Dickmeiss Date: Thu Jan 29 14:08:43 1998 +0000 Updated README. commit ffb88e8bb97c6e24989b7f04b8bbf1a4203d2f72 Author: Adam Dickmeiss Date: Thu Jan 29 13:42:18 1998 +0000 Updated. commit 7574c044d6c2dc8ede5c7c406f9939215a220260 Author: Adam Dickmeiss Date: Thu Jan 29 13:30:23 1998 +0000 Better event handle system for NT/Unix. commit b18eb98c47d7c5aa8dc816058d6a95d07286eff7 Author: Adam Dickmeiss Date: Thu Jan 29 13:28:23 1998 +0000 YAZ version 1.4pl1. commit 68f97633042d0d38061ff47aad35b46b3c4ab9a8 Author: Adam Dickmeiss Date: Thu Jan 29 13:18:29 1998 +0000 Removed Unicode file. commit 1f6254e4d56700f2862a549a77daeb6c22d1f8d4 Author: Adam Dickmeiss Date: Thu Jan 29 13:17:56 1998 +0000 Added sort. commit e50b06029483660fdcd60cb7f723baadfda34a0a Author: Adam Dickmeiss Date: Thu Jan 29 13:16:02 1998 +0000 Added dummy sort in test server. commit 7d30eaa32473c738d9fe494a526044e9cb9be658 Author: Adam Dickmeiss Date: Thu Jan 29 13:15:35 1998 +0000 Implemented sort for the backend interface. commit 0fa324b5444b23e6ad84796393644dcd6aeb7469 Author: Adam Dickmeiss Date: Thu Jan 29 13:13:39 1998 +0000 Function zget_presentRequest fills resultSetId with "default" instead of "Default". commit 2da6a9a95d6007eca27f715dbf77bea323cb9069 Author: Sebastian Hammer Date: Wed Jan 14 09:53:26 1998 +0000 Added a bit more info to dump. commit 62f35bd310a0201576b78d7f6695e8ff3de6ae3c Author: Adam Dickmeiss Date: Wed Jan 7 13:51:45 1998 +0000 Minor change. commit a7827306d9d9fd634a4b4336944bee781fa61e32 Author: Adam Dickmeiss Date: Wed Jan 7 13:34:06 1998 +0000 Fixed Makefile(s). commit 1ca987b3a11334e4b0ad24c372162f5ecbf28847 Author: Adam Dickmeiss Date: Wed Jan 7 12:59:27 1998 +0000 Updated Makefiles so that there is no dependancy on ELIBS. commit 084748e546e8f050b32b29bee29da13a1f6d9969 Author: Adam Dickmeiss Date: Wed Jan 7 12:58:22 1998 +0000 Using fgets instead of gets. commit fb9fcec623beac87912604f17c680fad3def4a1b Author: Adam Dickmeiss Date: Mon Jan 5 09:04:57 1998 +0000 Fixed bugs in encoders/decoders - Not operator (!) missing. commit cef1af6f2b0a094a907dec1a7bd1c4f6a42ef13c Author: Adam Dickmeiss Date: Mon Jan 5 09:03:37 1998 +0000 1998. commit 75e5b90dc0e8d15cb059025b61169f5a1bd113ca Author: Adam Dickmeiss Date: Mon Jan 5 09:03:12 1998 +0000 Moved to 1998. commit f7d86f5de3de80dcd56b7f5206d46203095eaf36 Author: Adam Dickmeiss Date: Thu Dec 18 10:51:30 1997 +0000 Implemented sub-trees feature for schemas - including forward references. commit 62e356bd92b3ab4c97d82dfdce290ca84f0759ca Author: Adam Dickmeiss Date: Fri Dec 12 06:32:33 1997 +0000 Added include of string.h. commit ed052a0eef82918aa53056c70b15e5b268fe0980 Author: Adam Dickmeiss Date: Tue Dec 9 16:28:04 1997 +0000 Changes. commit 4090fc5c7b77769020633d09cf63b325aceaf49a Author: Adam Dickmeiss Date: Tue Dec 9 16:18:16 1997 +0000 Work on EXPLAIN schema. First implementation of sub-schema facility in the *.abs files. commit 237dda955eb78cb6339c5dc3fc7be1246dafa4fb Author: Adam Dickmeiss Date: Tue Dec 9 16:17:09 1997 +0000 Fix bug regarding variants. Tags with prefix "var" was incorrectly interpreted as "start of variants". Now, only "var" indicates such start. Cleaned up data1_read_node so tag names and variant names are copied and not pointed to by the generated data1 tree. Data nodes still point to old buffer. commit c8cc5d797f7f1b2512bd34154c78360c1eeebb79 Author: Adam Dickmeiss Date: Tue Dec 9 16:11:02 1997 +0000 Assume strerror is defined on Unixes as well. It's standard ANSI. commit 28231d4c83085109d800c6689ae778cc041c51e7 Author: Adam Dickmeiss Date: Mon Nov 24 11:33:56 1997 +0000 Using function odr_nullval() instead of global ODR_NULLVAL when appropriate. commit 7674cd40af86e353235cb1b509f4b4687167cdf2 Author: Adam Dickmeiss Date: Wed Nov 19 10:30:06 1997 +0000 More explain work. commit dd307c65deac044b20c13e99aad2de0d8608a8b7 Author: Adam Dickmeiss Date: Tue Nov 18 09:51:08 1997 +0000 Removed element num_children from data1_node. Minor changes in data1 to Explain. commit 392d9ab6e5ff63fff887c3456d05853161c7fd2c Author: Adam Dickmeiss Date: Fri Nov 7 13:33:54 1997 +0000 Changes. commit 55c6ac70550af857d80ef233147dbc986e4095e1 Author: Adam Dickmeiss Date: Fri Nov 7 13:31:47 1997 +0000 Added NT Service name part of statserv_options_block. Moved NT service utility to server library. commit 9989790d80d5953f51e088712cb1b9113303b694 Author: Adam Dickmeiss Date: Thu Nov 6 11:36:44 1997 +0000 Implemented variant match on simple elements -data1 tree and Espec-1. commit 5c61f82e12a89cbff40d962d35f487552f709ff7 Author: Adam Dickmeiss Date: Wed Nov 5 09:20:51 1997 +0000 Minor change. commit 5bdebd49e54680d214fe5d87dda4ba41f1a3433b Author: Adam Dickmeiss Date: Wed Nov 5 09:18:31 1997 +0000 The client handles records with no associated syntax. commit 068a5a7412f492019b4d6f5e89158098d44368f7 Author: Adam Dickmeiss Date: Fri Oct 31 12:20:07 1997 +0000 Improved memory debugging for xmalloc/nmem.c. References to NMEM instead of ODR in n ESPEC-1 handling in source d1_espec.c. Bug fix: missing fclose in data1_read_espec1. commit 6063e06ec904a68cff5b1497c73a9022389af3ed Author: Adam Dickmeiss Date: Wed Oct 29 12:00:37 1997 +0000 Routine zget_SearchRequest fills resultSetName member with "default" instead of "Default". commit 41c09d8b6ab58b149435a6f87cd9f738fe7d86f5 Author: Adam Dickmeiss Date: Mon Oct 27 14:04:21 1997 +0000 Minor change. commit bc6408d690659dbefebbbde30e284962aeee6e24 Author: Adam Dickmeiss Date: Mon Oct 27 14:04:07 1997 +0000 New debug utility, data1_pr_tree, that dumps a data1 tree. commit c4159a200151b1704984ec01f48356fbc757372d Author: Adam Dickmeiss Date: Mon Oct 27 14:03:01 1997 +0000 Added new member to statserver_options_block, pre_init, which specifies a callback to be invoked after command line parsing and before the server listens for the first time. commit 62046e165c034a360b9ec8b5213bbb0e4b8fbca8 Author: Adam Dickmeiss Date: Mon Oct 27 13:55:03 1997 +0000 Fixed memory leak: member response wasn't freed when queue was destroyed. commit 52acac488c6f474a5260a2195b0b31ff68961924 Author: Adam Dickmeiss Date: Mon Oct 27 13:54:18 1997 +0000 Changed structure field in data1 node to be simple string which is "unknown" to the retrieval system itself. commit 1374fb292f8bf773290f1662460c422a3ff5a60d Author: Adam Dickmeiss Date: Mon Oct 27 13:52:46 1997 +0000 Header yaz-util includes all YAZ utility header files. commit 399d7c3b7664bf9c9c5cf58ccbcf80aabd4a9039 Author: Adam Dickmeiss Date: Mon Oct 6 09:37:53 1997 +0000 Added prototype for data1_get_map_buf. commit 78223496659afe7c31285f335b1eafc45a9a3b6a Author: Adam Dickmeiss Date: Mon Oct 6 09:09:52 1997 +0000 Function mmem_exit releases memory used by the freelists. commit 88d0696e5d482ccfeef78cce71ccfd38669d8a16 Author: Adam Dickmeiss Date: Mon Oct 6 08:55:07 1997 +0000 Changed log_init so that previous (if any) is closed. commit 03cb3a09ea39f9852123c7ef5ee6357950b0d2b8 Author: Sebastian Hammer Date: Thu Oct 2 12:16:51 1997 +0000 Smll commit 78400d74853fa7ada46541b93bb9c1f6689b5e1e Author: Sebastian Hammer Date: Thu Oct 2 12:10:24 1997 +0000 Attempt to fix bug in especs commit 79071b9f48a74b3cf2894dbe5430729bad25055d Author: Sebastian Hammer Date: Thu Oct 2 12:09:05 1997 +0000 CHanged date commit 0eb2cd457af935a98a1ae9d3b3cbb7c83cf3e368 Author: Adam Dickmeiss Date: Tue Sep 30 11:50:04 1997 +0000 Added handler data1_get_map_buf that is used by data1_nodetomarc. commit a6fdb006dd7e6a2bda36af3809c60ed2b2662f2c Author: Adam Dickmeiss Date: Tue Sep 30 11:48:12 1997 +0000 Fixed bug introduced by previous commit. commit 8a670a6fb183776cd612be6f537d0d6d5bc62d5c Author: Adam Dickmeiss Date: Tue Sep 30 11:47:47 1997 +0000 Added function 'cause checkergcc doesn't include assert handler. commit 87fc0addbe9e893294d402551e2ba67ba53417ec Author: Adam Dickmeiss Date: Tue Sep 30 09:33:10 1997 +0000 Minor changes - removed indentation of ifdef. commit 79bf9f1b8b224b6b7323b280fca704591ac17324 Author: Adam Dickmeiss Date: Mon Sep 29 13:18:59 1997 +0000 Added function, oid_ent_to_oid, to replace the function oid_getoidbyent, which is not thread safe. commit 18cc954000e6b33d2316faea946f0576602b60f3 Author: Adam Dickmeiss Date: Mon Sep 29 09:01:19 1997 +0000 Changed CCL parser to be thread safe. New type, CCL-parser, declared and a create/destructor ccl_parser_create/ccl_parser_destroy has been added. commit 5e2a2c9901994e4e772a499d5fc03c9d044ca80a Author: Adam Dickmeiss Date: Mon Sep 29 08:58:25 1997 +0000 Fixed conversion of trees so that true copy is made. commit 88e45d920d4fedb9557e896cf9448f9ab9cfb422 Author: Adam Dickmeiss Date: Mon Sep 29 08:56:37 1997 +0000 Changed CCL parser to be thread safe. New type, CCL_parser, declared and a create/destructers ccl_parser_create/ccl_parser/destory has been added. commit 16ca5674650eb3a7e0cc4bb8bd0fd66057bffe1e Author: Adam Dickmeiss Date: Mon Sep 29 07:24:42 1997 +0000 Added changes. commit 1f81de34041641b984664688688bd77ec3f0436a Author: Adam Dickmeiss Date: Mon Sep 29 07:24:21 1997 +0000 Updated project files, README, TODO, etc. commit 07105c9a04e982a8838dc25154998d4f60a8be34 Author: Adam Dickmeiss Date: Mon Sep 29 07:22:26 1997 +0000 Added static modifier to msg_tab. commit 9e83ba1ba78f4922d8e6f5434a263e2d339ea4b5 Author: Adam Dickmeiss Date: Mon Sep 29 07:20:31 1997 +0000 Client code uses nmem_init. commit 1f7958b4f3d909e12b5d76ec9f5a080f0fbca61f Author: Adam Dickmeiss Date: Mon Sep 29 07:19:32 1997 +0000 Server library uses nmem_init/nmem_exit. The log prefix no longer includes leading path on NT. commit 049f10d4442fb4a562331d465ec6196e17e77423 Author: Adam Dickmeiss Date: Mon Sep 29 07:17:31 1997 +0000 Added typecast to avoid warnings on MSVC. commit a2a7abe97309bb4b8e153145a00bd9817957dad7 Author: Adam Dickmeiss Date: Mon Sep 29 07:16:14 1997 +0000 Array cs_errlist no longer global. commit c287183a2eb9f42d40b8ba1293d98068ebe02002 Author: Adam Dickmeiss Date: Mon Sep 29 07:15:25 1997 +0000 Changed use of setsockopt to avoid warnings on MSVC. commit 6f4d57a5ce5f3f291ce118d8877c95d22ceb4e36 Author: Adam Dickmeiss Date: Mon Sep 29 07:14:16 1997 +0000 New functions nmem_init/nmem_exit to init/close NMEM system. commit a95a789a11a25cf2002a51ce1028f56c48e24b8f Author: Adam Dickmeiss Date: Mon Sep 29 07:13:43 1997 +0000 Changed type of a few variables to avoid warnings. commit 84e4c0195cfd14430102ccb7bc9deeb8951b55d1 Author: Adam Dickmeiss Date: Mon Sep 29 07:13:13 1997 +0000 Minor changes. commit eb0f67241481fb645a377b1c5df9683f8f1bd2fb Author: Adam Dickmeiss Date: Mon Sep 29 07:12:50 1997 +0000 NMEM thread safe. NMEM must be initialized before use (sigh) - routine nmem_init/nmem_exit implemented. commit a1863a0dc871b97b6fffe0f221e9c552c683848e Author: Adam Dickmeiss Date: Fri Sep 26 09:41:55 1997 +0000 Updated client to handle multiple diagnostics. commit 2c73c63dbd44310ca9a06b20d82e01f7ad617ddc Author: Adam Dickmeiss Date: Wed Sep 24 13:35:44 1997 +0000 Added two members to data1_marctab to ease reading of weird MARC records. commit 191f86396f357a0d26df67ce6b7d9ccb23f3e207 Author: Adam Dickmeiss Date: Wed Sep 24 13:29:40 1997 +0000 Added verbose option -v to marcdump utility. commit 07f19b4ed398c181a0ea8a9fb581f8098de6eec2 Author: Adam Dickmeiss Date: Mon Sep 22 12:33:41 1997 +0000 Fixed bug introduced by previous commit. commit 33ec719e54ba8b5cc86c7745ebcbcfa572eb3e0d Author: Adam Dickmeiss Date: Thu Sep 18 08:48:09 1997 +0000 Fixed minor bug that caused log_init to ignore filename. commit beea0cfaabaad70258dcaaa6b082a324e8f7e60f Author: Adam Dickmeiss Date: Thu Sep 18 08:47:17 1997 +0000 Added better doc about windows. commit 113640450c45ca7ac96285cc8ca666bfd597ed21 Author: Sebastian Hammer Date: Wed Sep 17 13:30:34 1997 +0000 Added RTF version of YAZ doc commit dd4eea1c142f1f4b6d2ec6343891d99d4fb7a269 Author: Adam Dickmeiss Date: Wed Sep 17 12:28:24 1997 +0000 Introduced new 'global' data1 handle. commit 94bebd449fe1a96a21fd39fb2b3549b5de9c11b1 Author: Adam Dickmeiss Date: Wed Sep 17 12:25:49 1997 +0000 First Unicode attempt. commit 6517fa53d35512887780fd07de5667940da18a9e Author: Adam Dickmeiss Date: Wed Sep 17 12:10:26 1997 +0000 YAZ version 1.4. commit 9006495b0949ec4c474866cb69376653540b1aab Author: Adam Dickmeiss Date: Tue Sep 9 10:10:18 1997 +0000 Another MSV5.0 port. Changed projects to include proper library/include paths. Server starts server in test-mode when no options are given. commit 8fcf022b257ac4321f13dd1b9045a01d1535992b Author: Adam Dickmeiss Date: Fri Sep 5 15:26:43 1997 +0000 Added ODR encode in search and scen bend request structures. Fixed a few enums that caused trouble with C++. commit 7eb2f0de616840d9a340519eac4c271820cd1248 Author: Adam Dickmeiss Date: Fri Sep 5 09:50:55 1997 +0000 Removed global data1_tabpath - uses data1_get_tabpath() instead. commit 44c7c8b6a256ed36e88ea3fbe4d6e88c202b1e23 Author: Adam Dickmeiss Date: Thu Sep 4 14:19:13 1997 +0000 Added credits. commit 5c4ee092bd344807137486d591fa1d03dce868e9 Author: Adam Dickmeiss Date: Thu Sep 4 13:51:58 1997 +0000 Added data1 to marc conversion with indicators. commit e7abd38ba0b6a5076d710a9bdc1eecd22abe00a8 Author: Adam Dickmeiss Date: Thu Sep 4 13:50:31 1997 +0000 Bug fix in ztest. commit 17d98abc1430e5be0973eeeb22dbd31896c5bedc Author: Adam Dickmeiss Date: Thu Sep 4 13:49:05 1997 +0000 Minor changes. commit 542c22e17883f15a72d783371891b492cbd4b80c Author: Adam Dickmeiss Date: Thu Sep 4 13:48:04 1997 +0000 Added data1 to marc conversion. commit 997adca73354c0845fc2290eec08376a1d10de95 Author: Adam Dickmeiss Date: Thu Sep 4 13:46:40 1997 +0000 Added ztest. commit 7ac51c067e1306e5451d10dca49ddaf5a0f61cbc Author: Adam Dickmeiss Date: Thu Sep 4 13:45:17 1997 +0000 Added UNImarc to list of available syntaxes. commit a897ee8640a92d11e5454c45b637b6644972d8b9 Author: Adam Dickmeiss Date: Thu Sep 4 07:59:29 1997 +0000 Added atoin.o. commit 082304e19f807fdd71b4810cc9e84492294a1c5d Author: Adam Dickmeiss Date: Thu Sep 4 07:59:02 1997 +0000 Added include of xmalloc.h. commit 53b093ecc1472f537c11a5392831740eeb3753e5 Author: Adam Dickmeiss Date: Thu Sep 4 07:58:36 1997 +0000 Added prototype for atoi_n. commit b5961610191b8bd0e1cb2124bac964e2bbdf6e87 Author: Adam Dickmeiss Date: Thu Sep 4 07:57:51 1997 +0000 Definition of ISO2709 control characters to this file. commit 613ae477d12bbe5ab06383a4c2372d1e4a6d2b62 Author: Adam Dickmeiss Date: Thu Sep 4 07:57:01 1997 +0000 When using UNIX, O_BINARY is defined if it's not already defined. commit c3cba493ccadbc990e8291eb707b0bf461c0e97f Author: Adam Dickmeiss Date: Thu Sep 4 07:54:34 1997 +0000 Right hande side operand of yaz_matchstr may include a ? in which case it returns "match ok". commit 4fa1a39b60253db85291f4001a92341e4eaf7faa Author: Adam Dickmeiss Date: Thu Sep 4 07:53:02 1997 +0000 Added include readconf.h. commit 2a782cebfa5189908617c8938ea0baac5d636587 Author: Adam Dickmeiss Date: Thu Sep 4 07:52:27 1997 +0000 Moved atoi_n function to separate source file. commit 43613b8c6c0d998668f15f493ea3612f55384279 Author: Adam Dickmeiss Date: Mon Sep 1 09:31:48 1997 +0000 Removed definition statserv_remove from statserv.h to eventl.h. commit 9a2b41f58cf220c9583b654ff77776a18e958b44 Author: Adam Dickmeiss Date: Mon Sep 1 09:31:26 1997 +0000 Removed definition statserv_remove to eventl.h. (A hack really). commit 9cf3ca740ee80f3242af98f5630450ca17078e9d Author: Adam Dickmeiss Date: Mon Sep 1 09:30:39 1997 +0000 Added include of yaz-util.h. commit 14136ccc562d5d894fb2ba59304ae64d3516f518 Author: Adam Dickmeiss Date: Mon Sep 1 08:58:04 1997 +0000 Removed declaration of data1_matchstr since it's a macro. commit 2203bb027f811b89e75ef2c743232f97eaf1464f Author: Adam Dickmeiss Date: Mon Sep 1 08:55:52 1997 +0000 New windows NT/95 port using MSV5.0. Test server ztest now in separate directory. When using NT, this test server may operate as an NT service. Note that the service.[ch] should be part of generic, but it isn't yet. commit 6b8dc2364e08641a6c6c83b6ec8a16cb33df9119 Author: Adam Dickmeiss Date: Mon Sep 1 08:54:12 1997 +0000 New windows NT/95 port using MSV5.0. Made prefix query handling thread safe. The function options ignores empty arguments when met. commit 69e1deffc8ce5541d72110417f9e555f7e33aac2 Author: Adam Dickmeiss Date: Mon Sep 1 08:52:58 1997 +0000 New windows NT/95 port using MSV5.0. The test server 'ztest' was moved a separate directory. MSV5.0 project server.dsp created. As an option, the server can now operate as an NT service. commit d690f39cdf024d17ef66fa7ef980c8804f3d7618 Author: Adam Dickmeiss Date: Mon Sep 1 08:51:06 1997 +0000 New windows NT/95 port using MSV5.0. Had to avoid a few static variables used in function ber_tag. These are now part of the ODR structure. commit 46ed30d0d83dd1b21e58a4db365a60aefaa5aad8 Author: Adam Dickmeiss Date: Mon Sep 1 08:49:47 1997 +0000 New windows NT/95 port using MSV5.0. To export DLL functions the YAZ_EXPORT modifier was added. Defined in yconfig.h. commit 6438b1afb3455d2b0aba71e90c873e3b8a6d5e54 Author: Adam Dickmeiss Date: Mon Sep 1 08:49:14 1997 +0000 New windows NT/95 port using MSV5.0. Minor changes only. commit dd7b0c83efe3e7b355332bd16b42a0e30f8874d7 Author: Adam Dickmeiss Date: Mon Sep 1 08:48:44 1997 +0000 New windows NT/95 port using MSV5.0. Only a few changes made to avoid warnings. Sub project created: client.dsp. commit a00dfa73d5d3796f8048f2134fec2685b62e2658 Author: Adam Dickmeiss Date: Mon Sep 1 08:48:11 1997 +0000 New windows NT/95 port using MSV5.0. Only a few changes made to avoid warnings. commit 84704ab102d3e9eb5a95061b141264d846c54628 Author: Adam Dickmeiss Date: Mon Sep 1 08:47:18 1997 +0000 New windows NT/95 port using MSV5.0. commit 53f9d5a65d5f1ca2e925490e7ed9b4e9d2a84dc9 Author: Sebastian Hammer Date: Fri Aug 29 13:34:58 1997 +0000 Added thesaurus oids commit 0036a074683ee59ce1d78ef400e648c395e38d5e Author: Sebastian Hammer Date: Tue Aug 19 08:46:05 1997 +0000 Added Thesaurus OID commit 838edb61c2e8ae6b501e78e0eac1453ae5120dc1 Author: Sebastian Hammer Date: Tue Aug 19 08:45:13 1997 +0000 Added Thesaurus commit 1d441010a7487ea43798e61ef8a1e58bcba44c10 Author: Sebastian Hammer Date: Tue Aug 19 08:43:49 1997 +0000 Housekeeping commit 2ce3c7f562337bd2b9141822e3dd82df6a9c9436 Author: Sebastian Hammer Date: Tue Aug 19 08:40:52 1997 +0000 Added thesaurus OID commit f62a2f5d68717e0eca21dbb60d1cb5afe943d666 Author: Adam Dickmeiss Date: Mon Jul 28 12:34:42 1997 +0000 Added new OID entries (RVDM). commit 605bd5bc3803abd10df0efb91ab385828f40a57d Author: Adam Dickmeiss Date: Mon Jul 21 12:48:11 1997 +0000 Removed windows DLL stubs. commit 20cae8a917916791dde5c0318a7b18f0ad5a4d67 Author: Adam Dickmeiss Date: Mon Jul 21 12:47:38 1997 +0000 Moved definition of nmem_control and nmem_block. commit e0d889da6625684d4f6a4f166af7e811e224b091 Author: Adam Dickmeiss Date: Mon Jul 21 12:46:03 1997 +0000 Bug fix: changed definition of attributeValues in Z_AttributeOccurrence. commit 88d26764ac94b4a2872c77e2deed58b15d2f6f02 Author: Adam Dickmeiss Date: Mon Jul 21 12:44:30 1997 +0000 Moved definitions of nmem_block and nmem_control. commit e7a11f55c79f2ddf7a2cdaa898cfe57ce2fe404a Author: Adam Dickmeiss Date: Wed Jul 2 14:12:52 1997 +0000 Changed header to 1997. commit b64a18142c265f9c760e995b7e400d571434eccf Author: Adam Dickmeiss Date: Wed Jul 2 12:57:48 1997 +0000 Fixed #if-bug. Thanks to RVDM. commit 35b62368432b7fa342483b6d4bc8c89297b59706 Author: Adam Dickmeiss Date: Tue Jul 1 14:15:10 1997 +0000 Added new BIB-1 diagnostic messages. commit a894f0001b48c407989e134b120502efaaf32592 Author: Adam Dickmeiss Date: Tue Jul 1 13:52:21 1997 +0000 Added messages about new diagnostic codes. commit 634b63bb77773c5ec28b772fa62384c9cf62ff38 Author: Adam Dickmeiss Date: Tue Jul 1 13:49:56 1997 +0000 Take care of case when invalid target is specified on command line. commit 73fc91ec903170c76d464c4ed7a83eb9ce635a1d Author: Adam Dickmeiss Date: Mon Jun 23 10:31:25 1997 +0000 Added ODR argument to ccl_rpn_query and ccl_scan_query. commit 5e46e56c425c46bad6cef226669767de3a990f9e Author: Adam Dickmeiss Date: Mon Jun 23 10:31:11 1997 +0000 Added RVDM's SEQUENCE OF patch again! commit 2d6537257dbfc2fd692468224f529c0e1fad5c3c Author: Adam Dickmeiss Date: Mon Jun 23 10:30:45 1997 +0000 Added ODR stream as parameter to ccl_rpn_query and ccl_scan_query. commit 157a6ff3b40c1fc21491df10d37e86ee93431c13 Author: Adam Dickmeiss Date: Mon Jun 23 10:30:18 1997 +0000 Added call to ccl_rpn_delete in search. Added ODR stream "out" as parameter to ccl_rpn_query to release RPN query. commit 9ea4211c533ffd9e7e7b5fea5cb192a986cdaf87 Author: Adam Dickmeiss Date: Mon Jun 23 10:28:27 1997 +0000 Added ODR argument to ccl_rpn_query to provide release of RPN structure. commit 88941d4a9e272daca9323cd19bf4829b6d32871b Author: Sebastian Hammer Date: Wed May 14 11:14:44 1997 +0000 Old versions of GILS tables commit b3052f9ebd9a9510b90d2dc56d558638bf30ece7 Author: Sebastian Hammer Date: Wed May 14 11:09:51 1997 +0000 Moved to GILS version 2 commit bf4149c63ad2e11429e302a89f472de52b4d7ce8 Author: Adam Dickmeiss Date: Wed May 14 06:53:19 1997 +0000 C++ support. commit 73664b466cb0c5e9478b4af7c5d4ebed1f2db49e Author: Adam Dickmeiss Date: Mon May 5 11:21:09 1997 +0000 In handling of SEQUENCE OF: Counter set to zero when SEQUENCE OF isn't there at all. commit a7a4ea3451105aa7dea1e4b2a3e7062dfbc727bc Author: Adam Dickmeiss Date: Mon May 5 11:20:35 1997 +0000 Client uses "options" utility and marc dump filename may be specified as an option (-m ). commit 55a302e87c3404fd8b8b56d7ef7263dd335b17b6 Author: Adam Dickmeiss Date: Mon May 5 11:19:51 1997 +0000 Changes. commit b70baaf0e38b063475d6043bb1ab405be957a389 Author: Sebastian Hammer Date: Fri May 2 08:39:27 1997 +0000 Support for private OID table added. Thanks to Ronald van der Meer commit 041ef5728e8383265ce2f1df34fe196cfa098823 Author: Sebastian Hammer Date: Fri May 2 08:39:10 1997 +0000 New PDUs added, thanks to Ronald van der Meer commit f81e1101449cb58fd07b881edfb1c241ffb742c0 Author: Sebastian Hammer Date: Fri May 2 08:38:33 1997 +0000 None commit 21b66c54ac623132427d5a34e6ff3dd8ebee9928 Author: Adam Dickmeiss Date: Thu May 1 15:07:55 1997 +0000 Added DLL entry point routines. commit 2d978ce2c9706142728e61af13294613b417ec44 Author: Adam Dickmeiss Date: Thu May 1 15:06:42 1997 +0000 Added log_mask_str_x routine. commit 5ea58e8014fef30e6e8217c911620d62e8eab6d9 Author: Adam Dickmeiss Date: Thu May 1 15:06:32 1997 +0000 Moved WINSOCK init. code to tcpip_init routine. commit 85a2e7affad79fd8bd59b403ba7b5f7867d60523 Author: Sebastian Hammer Date: Wed Apr 30 08:52:02 1997 +0000 Null commit 63af8d32cee5cb5222e22ed64d4752093a8b8d4a Author: Sebastian Hammer Date: Wed Apr 30 08:49:50 1997 +0000 Work commit e8ed2e5014d3ed2970406747c7913aa5438972db Author: Adam Dickmeiss Date: Mon Feb 24 10:37:26 1997 +0000 Changed header. commit 065bdef058a58e2db5242d99c16febf9f9aad899 Author: Adam Dickmeiss Date: Wed Feb 19 14:46:15 1997 +0000 The "all" specifier only affects elements that are indexed (and not all elements). commit 1082d0a6c655bcd6e30566aa7547e5d370572e67 Author: Sebastian Hammer Date: Thu Jan 2 10:47:56 1997 +0000 Added optional, physical ANY commit 214455c7382c4867df4f6cd8cb23b59602192e6d Author: Sebastian Hammer Date: Thu Dec 5 13:17:47 1996 +0000 Fixed GRS-1 null-ref commit e2cc1d8b0f67a734d0a16a0c95e169acf9106241 Author: Adam Dickmeiss Date: Fri Nov 15 15:48:24 1996 +0000 Fixed reference to bad element. Other small changes. commit 01dfe62210bac0f8fc1e566537ad99bbc378bd66 Author: Adam Dickmeiss Date: Mon Nov 11 13:15:29 1996 +0000 Added proximity operator. commit ca7139cb3a1ffbd081a8a64ecaa29be9eb50353f Author: Adam Dickmeiss Date: Mon Nov 11 13:14:46 1996 +0000 Fixed tagging bug in z_ProximityOperator. commit c6860bd2b0d52f5f53dd01f0f1857f5d310108ba Author: Adam Dickmeiss Date: Mon Nov 11 13:14:15 1996 +0000 Added doc about proximity in PQF. commit de62d4d97943ed7033f48bdbcaf06f67952f86fe Author: Adam Dickmeiss Date: Fri Nov 8 14:09:22 1996 +0000 Removed reference to gils-f.est. commit 6c5cedfce30df58be034fd3555ae6935b3023882 Author: Adam Dickmeiss Date: Fri Nov 8 11:03:26 1996 +0000 Client accepts multiple database names. commit 42dcb6fd4b9fccb404c4403e0d63c2bfb31cabbb Author: Adam Dickmeiss Date: Fri Nov 8 11:03:01 1996 +0000 More work. commit 086436151f45e51a855c748010a95615bc5e30a0 Author: Adam Dickmeiss Date: Fri Nov 1 08:45:18 1996 +0000 Bug fix: used close on MS-Windows. Fixed to closesocket. commit 684d09483b9c10997bc71503d36bc98451e34e93 Author: Adam Dickmeiss Date: Tue Oct 29 13:36:26 1996 +0000 Added header. commit e9728b65671cd921aeefddf5474689b0dbaf2010 Author: Adam Dickmeiss Date: Tue Oct 29 13:35:38 1996 +0000 Implemented data1_set_tabpath and data1_get_tabpath. commit 98d6fcc28c858c00a47aa59391abb99649f54ba0 Author: Adam Dickmeiss Date: Tue Oct 29 13:34:56 1996 +0000 Minor change. commit 527e5237725b631a58124f9b0d7b5ce97c62a183 Author: Adam Dickmeiss Date: Tue Oct 29 13:34:38 1996 +0000 New functions to get/set data1_tabpath. commit 0aa8e547996dc0adb27cc1e10c25c472585f63cb Author: Adam Dickmeiss Date: Tue Oct 29 13:33:52 1996 +0000 Updated. commit 11ac75c90de88b723bb755b12cacb9f388fe1502 Author: Adam Dickmeiss Date: Wed Oct 23 12:31:24 1996 +0000 Added 'static' modifier to dummy variable in odr_constructed_begin. commit 0a159e0b47088801788dc3a90b79f6d5e964ea1f Author: Sebastian Hammer Date: Fri Oct 11 15:06:52 1996 +0000 Version 1.3 commit 3888e88cde70f36851544ab7acc04e0943470ec6 Author: Adam Dickmeiss Date: Fri Oct 11 15:00:23 1996 +0000 CCL parser from Europagate Email gateway 1.0. commit 6c88d52909c7cb7a143a05583b2ac1c90c94a9d9 Author: Sebastian Hammer Date: Fri Oct 11 12:38:03 1996 +0000 Smallish commit e6a55188366477082cb2446e7065d0f624dabcfb Author: Sebastian Hammer Date: Fri Oct 11 11:57:16 1996 +0000 Smallish commit 110e7f1267301bf0174e9423b0b1a7172e0b3ae2 Author: Adam Dickmeiss Date: Fri Oct 11 10:35:38 1996 +0000 Fixed a bug that caused data1_read_node to core dump when no abstract syntax was defined in a "sgml"-record. commit f8ec9ce4a0624d49be64a0cce115846155b79e42 Author: Sebastian Hammer Date: Thu Oct 10 12:35:12 1996 +0000 Added Update extended service. commit 927478192af381aa21ba51487cb8c4417e3d87ff Author: Sebastian Hammer Date: Thu Oct 10 12:32:01 1996 +0000 ZZ commit 205c2223beca67a0dc7bf14df988b2c05faf1293 Author: Sebastian Hammer Date: Thu Oct 10 11:52:18 1996 +0000 Added SearchResult additionalInfo commit de697b2c40e31fd28235af628940bd08734f764b Author: Sebastian Hammer Date: Thu Oct 10 11:51:58 1996 +0000 Added SerchResult additional info commit 1318fabb307dce513479df1890cac2f20cddda45 Author: Sebastian Hammer Date: Wed Oct 9 15:54:51 1996 +0000 Added SearchInfoReport commit 7436fd1fdf0ca6d2c5c68d9cc0cd57f53d9c8e12 Author: Adam Dickmeiss Date: Tue Oct 8 12:58:08 1996 +0000 New ODR function, odr_choice_enable_bias, to control behaviour of odr_choice_bias. commit 78909a91319d7274a6c0f896d25c909d071742aa Author: Adam Dickmeiss Date: Tue Oct 8 12:56:57 1996 +0000 Bug fix: tagging of type 101 query. commit 29bc46cf839f066e31641eb21fdd3b2dbd4a35d0 Author: Adam Dickmeiss Date: Tue Oct 8 12:55:47 1996 +0000 changes. commit 5e0c6af02d0e1e2042d846de614dce4c061200f2 Author: Sebastian Hammer Date: Tue Oct 8 10:45:05 1996 +0000 *** empty log message *** commit 8ad1f962f612a8a14a0b1abad080fd18987caf4e Author: Sebastian Hammer Date: Tue Oct 8 10:44:57 1996 +0000 Resolved conflicts. commit 180d06f2b91d0197c8ac7548f0e90f91b8427068 Author: Sebastian Hammer Date: Tue Oct 8 10:43:20 1996 +0000 Added SOIF syntax. commit 93e6cd96accab7cdef3a573479a5ec9c9fc47610 Author: Sebastian Hammer Date: Mon Oct 7 15:54:47 1996 +0000 Added files commit 4ed0df89283b51f12daddfcce1eff246e6962a08 Author: Sebastian Hammer Date: Mon Oct 7 15:29:16 1996 +0000 Added SOIF support commit abda0ffc1ac8fca34535f39c6581ed16e70e15f9 Author: Sebastian Hammer Date: Mon Oct 7 15:28:54 1996 +0000 Work commit bb182c49a5a8b379b8a021eed572d070307333a9 Author: Sebastian Hammer Date: Thu Aug 29 14:19:34 1996 +0000 Fixed conflict (CVS) commit 52463063061a631f9cb086e938bc4494efec0bb5 Author: Sebastian Hammer Date: Tue Aug 27 10:43:22 1996 +0000 Made select() optional commit cbadcb46e4898cb46ad9b49dba8cc4fc789a164a Author: Adam Dickmeiss Date: Mon Aug 12 14:10:34 1996 +0000 New function p_query_attset to define default attribute set. commit 7fe0d6399102ca8c9b51d45f3d8b439a5e6adce0 Author: Adam Dickmeiss Date: Mon Aug 12 14:09:54 1996 +0000 ODR_DEBUG not set. commit 8e3d81fc1e875957337ff69c6a449c40c00ed8bd Author: Adam Dickmeiss Date: Mon Aug 12 14:09:11 1996 +0000 Default prefix query attribute set defined by using p_query_attset. commit 4eec94579e5ca6f1121ed12ce26945ed23bbea74 Author: Adam Dickmeiss Date: Mon Aug 12 14:08:30 1996 +0000 New function: p_query_attset. commit 711159f51111a2f1de5343bfdbd56a0e41d42baf Author: Sebastian Hammer Date: Fri Jul 26 14:07:21 1996 +0000 Small commit 63aea810bb0d282daf5468eca9f5aa6a5611fc2e Author: Sebastian Hammer Date: Fri Jul 26 13:37:06 1996 +0000 Various smaller things. Gathered header-files. commit a7ab1771fdb372874b190308cffd3517625b6c83 Author: Sebastian Hammer Date: Fri Jul 26 13:36:15 1996 +0000 Various smallish commit f537f1037e07b2a4be1681d158e17cc62683cbfa Author: Sebastian Hammer Date: Fri Jul 26 13:35:38 1996 +0000 Gathered header-files commit 2da1b7c395cd33f03bbb93919c88a4d0fb2de1ed Author: Sebastian Hammer Date: Fri Jul 26 12:34:07 1996 +0000 Porting. commit bc33b8b53697bcc10a02f7e7456fd75b2c3473ef Author: Sebastian Hammer Date: Sat Jul 6 19:58:23 1996 +0000 System headerfiles gathered in yconfig commit 567ab40a74611002aef26af8db8986d24b1c4bd5 Author: Adam Dickmeiss Date: Wed Jul 3 13:21:36 1996 +0000 Function xfree_f checks for NULL pointer. commit c1c75fd66581fb7df0a63f42eec3a055210b3bf0 Author: Sebastian Hammer Date: Mon Jun 10 08:57:45 1996 +0000 1.2 commit 5fe647af23484842955ab7a7e26d0ab34e3c2b1c Author: Sebastian Hammer Date: Mon Jun 10 08:57:38 1996 +0000 Added OPAC, ResourceReport commit 09127934b3646ba7d5bc0a853b693792d64d3bac Author: Sebastian Hammer Date: Mon Jun 10 08:56:00 1996 +0000 Work on Summary. commit 7b975f32e5bb0ae39b62167f9eb09b02be36d3f6 Author: Sebastian Hammer Date: Mon Jun 10 08:55:33 1996 +0000 Added Summary. Unfinished work commit 77c156ef02efc5a3da23d153dac166e729ec79ef Author: Sebastian Hammer Date: Mon Jun 10 08:55:20 1996 +0000 Added Summary, OPAC commit 9f1aa1005f6e9db2484ec053bf0fd9b109625755 Author: Sebastian Hammer Date: Mon Jun 10 08:53:47 1996 +0000 Added Summary commit bf6c973ee6b5864bdb95d7d953fdcac75ea1b060 Author: Sebastian Hammer Date: Mon Jun 10 08:53:31 1996 +0000 Added Summary,OPAC,ResourceReport commit fd4b371b704caa2b56210b4ca386cfdfd5da7089 Author: Sebastian Hammer Date: Mon Jun 10 08:53:01 1996 +0000 Work commit a3f3407f990d349081d3cc20645b3acea48a674c Author: Sebastian Hammer Date: Fri Jun 7 11:04:32 1996 +0000 Fixed tag->tagset dependency commit 89150df2052b2c929ea9de488b24bc86095ee5f8 Author: Sebastian Hammer Date: Thu Jun 6 12:07:17 1996 +0000 *** empty log message *** commit 7aad6ab82d35210ea6da14848effb175e91ddb0a Author: Adam Dickmeiss Date: Wed Jun 5 08:53:50 1996 +0000 Added availability/linkage to brief syntax. commit 0e653cc4ea3853110878a6ca04c364de85822fd7 Author: Adam Dickmeiss Date: Wed Jun 5 08:51:03 1996 +0000 Added local-subject-index to any. commit f593a4ffa67fe4fba173d75845923ccd4e11288e Author: Sebastian Hammer Date: Tue Jun 4 09:52:12 1996 +0000 Added sampletext commit 0ff5815242556923f24a9dcbbad9ebe30e64f165 Author: Sebastian Hammer Date: Mon Jun 3 15:57:16 1996 +0000 Added body-of-text to BIB-1 ANY and the WAIS profile commit 536d269ace110d131df1baa2daca17088ac8b734 Author: Sebastian Hammer Date: Mon Jun 3 09:47:05 1996 +0000 Added schemaIdentifier. commit d4f3ce4724b0bf9cec075846852b48108b67a67c Author: Sebastian Hammer Date: Mon Jun 3 09:46:42 1996 +0000 Added OID data type. commit d77bb491a62b7cb0f444bc88467c69c0b090e43a Author: Sebastian Hammer Date: Mon Jun 3 09:46:31 1996 +0000 Fixed stupid bug in str2oid routine. commit 59e8e36fa1b1e39a605a22ab2de0ac219ea481e8 Author: Sebastian Hammer Date: Mon Jun 3 09:46:03 1996 +0000 Added OID type. commit 97e81740fd91d912d75ff85fefc61b1d19cbc611 Author: Sebastian Hammer Date: Mon Jun 3 09:45:50 1996 +0000 Added display of OIDs in the GRS routine. commit 03bdc2bf7729a8de0050a4defb7f1fb9c85cb7b3 Author: Sebastian Hammer Date: Fri May 31 13:52:21 1996 +0000 Fixed uninitialized variable for local tags in abstract syntax. commit 52b0f7a370fd7444f650909a574e49fdb0ffc522 Author: Sebastian Hammer Date: Fri May 31 13:51:13 1996 +0000 *** empty log message *** commit 61332f860c40c483d1283532e5fb225daee75e67 Author: Sebastian Hammer Date: Thu May 30 12:03:51 1996 +0000 Work. commit d896caa8d64509d95e79ad1ec5966d880abc1883 Author: Sebastian Hammer Date: Thu May 30 11:03:10 1996 +0000 Fixed NextresultSetPosition bug fixed. commit d8effb26c004e99bfd83855511c4ec5a7c7f3c79 Author: Sebastian Hammer Date: Wed May 29 15:48:48 1996 +0000 Added \n to the isspace rule. commit d0ef7e3d61ea8c14a8649fd199e9060039f3b7b0 Author: Sebastian Hammer Date: Wed May 29 15:47:50 1996 +0000 Fixed in bug DiagRecs decoder. Thanks to Linda Harris. commit cc0ed1844dbaffb40219b3a2a2d8129aa52eab3f Author: Adam Dickmeiss Date: Wed May 29 11:25:59 1996 +0000 Fixed URL. commit 146c30a56bda9fcbb049ce2d4f442718fbb09341 Author: Sebastian Hammer Date: Wed May 29 11:19:17 1996 +0000 Added phrases to WAIS table commit cf1b621628966dac71de3648217dee37fae4f068 Author: Sebastian Hammer Date: Wed May 29 10:05:01 1996 +0000 Changed space criteria to support 8-bit characters commit 87ab96b9e9da7255fe0b1d13dc0ab1626afdd1b7 Author: Sebastian Hammer Date: Wed May 29 10:04:13 1996 +0000 Work commit e0816c15e2756bff6ef9265ac72ad5baf5306be9 Author: Sebastian Hammer Date: Wed May 29 10:03:28 1996 +0000 Options work commit dd8028493d407933a943543a243cb6c51eb627fc Author: Sebastian Hammer Date: Wed May 29 10:02:02 1996 +0000 Work commit bc39d5bc3e621e09a0d8b0b912a4e4dfaf43d087 Author: Adam Dickmeiss Date: Wed May 22 08:35:36 1996 +0000 Removed CFLAGS definiton. commit c8dee83a98997f5aaf799aad6d6e30c93783bc2a Author: Adam Dickmeiss Date: Wed May 22 08:35:24 1996 +0000 Bug fix. commit ab9f5c94f9c68c2cd137d5c27c068200606e18c8 Author: Adam Dickmeiss Date: Wed May 22 08:34:44 1996 +0000 Added ifdef USE_XTIMOSI; so that 'make depend' works. commit 7ff711579bfae14782a3334ca8b3c255c44cf3d2 Author: Sebastian Hammer Date: Tue May 14 09:26:46 1996 +0000 Added attribute set to scan backend commit 658b0fee0e1a3cb2eda9933a5287e9c2d731ba36 Author: Sebastian Hammer Date: Tue May 14 09:26:26 1996 +0000 Work. commit 8e4dbf0df9d4d7d72c288d79b97ba3d3c22ac17a Author: Sebastian Hammer Date: Tue May 14 09:01:52 1996 +0000 Added AttributeSet. commit 94ec9363531cb432fed61650c9719da443d4b1c2 Author: Sebastian Hammer Date: Thu May 9 09:32:41 1996 +0000 Any unfolds commit 20a7d5f03bb08f114a2133367e283ce5e811a16a Author: Sebastian Hammer Date: Thu May 9 07:27:55 1996 +0000 Added some phrase indices. commit e77a0b69d06145878c5ba474b1ec0293e6015a18 Author: Sebastian Hammer Date: Thu May 9 07:27:43 1996 +0000 Multiple local attributes values supported. commit 1ef40949fde41e67c12cb83ed039cbe6c6342f4c Author: Sebastian Hammer Date: Thu May 9 07:27:11 1996 +0000 Multiple local values supported. commit 52b081f8851742ade8c349aa54b80a3998aee957 Author: Sebastian Hammer Date: Thu May 9 07:26:49 1996 +0000 *** empty log message *** commit 5c03aa670c7420063f751a66e200987ea4bf40eb Author: Sebastian Hammer Date: Thu May 9 07:25:22 1996 +0000 Sm commit e42d9ee8961aed7ac5750a4eccbbe681da92df0c Author: Sebastian Hammer Date: Wed May 1 12:45:28 1996 +0000 Support use of local tag names in abs file. commit 6589c8c535a2c0e86f24cf45c2dd45ecf9ae7093 Author: Sebastian Hammer Date: Wed May 1 12:45:00 1996 +0000 *** empty log message *** commit d1c517a616a425f6a6966ae1639176248e65e68a Author: Sebastian Hammer Date: Wed Apr 10 11:40:43 1996 +0000 *** empty log message *** commit 20c20b95722fee18675cb36d9474612a2251853a Author: Sebastian Hammer Date: Wed Apr 10 11:40:33 1996 +0000 1.1pl2 commit ac690c9648474fd1cba7780a1ad25f86d0577a84 Author: Sebastian Hammer Date: Wed Apr 10 11:39:42 1996 +0000 Fixed bug in UserInfo commit ac00a317f993121e851a20209a233ab49fb232ef Author: Sebastian Hammer Date: Wed Apr 10 11:39:29 1996 +0000 New version commit 8c815707cf40388090327143d3d0d27be5c4a902 Author: Sebastian Hammer Date: Mon Mar 25 10:18:24 1996 +0000 Added "meta" profile - dublin core experiment commit 8a4ae2667c1cfc7b9f3ef5dfbae1a62573c7ab90 Author: Sebastian Hammer Date: Mon Mar 25 10:18:03 1996 +0000 Removed trailing whitespace from data elements commit fc89703038b1168a8f52b6920c50dedb9080063d Author: Adam Dickmeiss Date: Fri Mar 15 16:10:53 1996 +0000 Introduced new prefix query features. commit 7a41d7a92859be6ecc255e943e693d0a885c4229 Author: Adam Dickmeiss Date: Fri Mar 15 11:05:32 1996 +0000 The user can set the preferred query type (prefix, ccl, ..) with the querytype command. commit 7b57148e0984b3df36e031d866bfc461703160e3 Author: Adam Dickmeiss Date: Fri Mar 15 11:03:46 1996 +0000 Attribute set can be set globally for a query with the @attrset operator. The @attr operator has an optional attribute-set specifier that sets the attribute set locally. commit 168943c0bfd934f30eadfe523e3c145af85a8cb3 Author: Adam Dickmeiss Date: Fri Mar 15 11:01:46 1996 +0000 Extra argument to p_query_rpn: protocol. Extra arguments to p_query_scan: protocol and attributeSet. commit e909a485843cfc400caf7ca885c813f5337aa7e8 Author: Sebastian Hammer Date: Wed Mar 13 09:19:09 1996 +0000 Added bogus mapping of rank field commit 3111fa3db35d0d3b76ba0f70a2c9ed83d5114c11 Author: Sebastian Hammer Date: Fri Mar 8 14:38:41 1996 +0000 Fixed output. commit d1947ea9d8f4fab6ce179997c2554443884756d5 Author: Sebastian Hammer Date: Fri Mar 8 14:38:25 1996 +0000 *** empty log message *** commit b8d21245e1c2faeb7741bf87835ab67b9004f4e1 Author: Adam Dickmeiss Date: Thu Feb 29 14:23:13 1996 +0000 Bug fix. commit 092d47f339eb07f67dc9e8356a53af81be546737 Author: Adam Dickmeiss Date: Mon Feb 26 18:34:44 1996 +0000 Bug fix. commit 3931f892988e7ec50aebfb59189515f68dff103e Author: Sebastian Hammer Date: Fri Feb 23 10:01:00 1996 +0000 Smallish commit cb914e4afd1e815bf47604efdfa964cee69557fa Author: Sebastian Hammer Date: Fri Feb 23 10:00:51 1996 +0000 SCAN Work commit 214a19efbb9f3ccb3cfe678b5c9ba805774b3d12 Author: Sebastian Hammer Date: Fri Feb 23 10:00:39 1996 +0000 WAIS Work commit 2f1df9e6d0f93335cf2a6a487b0a06b43ff37b0c Author: Sebastian Hammer Date: Fri Feb 23 10:00:25 1996 +0000 Fixes to SCAN commit 081fe93172671cdb70410461ea1845566e3a5f25 Author: Sebastian Hammer Date: Wed Feb 21 15:57:17 1996 +0000 *** empty log message *** commit 01555b079443406950c519ad757b36eb2bc38657 Author: Sebastian Hammer Date: Wed Feb 21 15:23:36 1996 +0000 Reversed fclose and return; commit 9b233e7a12a109a54090ffbc5e059db0ab9b4621 Author: Sebastian Hammer Date: Wed Feb 21 14:55:38 1996 +0000 Smallish commit 2e7c9fd11f560b19856ea2a34f6953e949d8075a Author: Sebastian Hammer Date: Wed Feb 21 13:12:07 1996 +0000 *** empty log message *** commit d29152205ca296a1aaea14ab2a656d53c68680f6 Author: Sebastian Hammer Date: Wed Feb 21 12:55:51 1996 +0000 small commit 13710cb8cd0a6b8d6a1f88ff69f3a2ec2ec9769c Author: Sebastian Hammer Date: Wed Feb 21 12:52:55 1996 +0000 Test commit 12ecd8b127f4f576b37278eeaff07a12e73b7110 Author: Adam Dickmeiss Date: Tue Feb 20 17:58:09 1996 +0000 Added const to yaz_matchstr. commit ec28e95aa1800749663124d88106bc86b28b8ada Author: Adam Dickmeiss Date: Tue Feb 20 17:57:53 1996 +0000 Added const to oid_getvalbyname. commit a4b3ddd8ad754b42454c7a18fdb3ef61f7bd580d Author: Adam Dickmeiss Date: Tue Feb 20 16:41:36 1996 +0000 Minor change. commit 473db99967af5162fb1e0f1a68ec713ef4e19213 Author: Sebastian Hammer Date: Tue Feb 20 16:37:33 1996 +0000 Using yaz_matchstr in oid_getvalbyname commit 7826e2c92b1a07182ba5bfb94c304f1fa7d27387 Author: Sebastian Hammer Date: Tue Feb 20 16:33:02 1996 +0000 Moved matchstr to global util commit de40d7c17747988ed4c53e51e45cbb790a3abd7b Author: Sebastian Hammer Date: Tue Feb 20 16:32:48 1996 +0000 Created util file. commit d1f1647de20f92bdb32c61a8dafac5f252dac914 Author: Sebastian Hammer Date: Tue Feb 20 13:02:58 1996 +0000 Wais length. commit db974144cf7ea08657432437b71611ac85d1c2d1 Author: Sebastian Hammer Date: Tue Feb 20 12:57:41 1996 +0000 V1.1 commit 89eb5df93edfe3141cc0e06997a4c6023d7bc552 Author: Sebastian Hammer Date: Tue Feb 20 12:55:56 1996 +0000 *** empty log message *** commit dee13aeae17005ba0ef3adf7bf99958160e393d9 Author: Sebastian Hammer Date: Tue Feb 20 12:53:04 1996 +0000 Chanes to SCAN commit c830124fd18d0bc1dc330d7d8b62aac51d12659c Author: Sebastian Hammer Date: Tue Feb 20 12:52:54 1996 +0000 Added odr_peektag commit 8df01d1889fa540918519fa5fb00fa0afd82b67a Author: Sebastian Hammer Date: Tue Feb 20 12:52:09 1996 +0000 WAIS protocol support. commit 697c9c32315a2e827a0133b3f6c2eed9953926b6 Author: Sebastian Hammer Date: Tue Feb 20 12:51:54 1996 +0000 Fixed problems with EXTERNAL. commit ab66367f19b935a874d190bbe5b5d8f20dbf3592 Author: Sebastian Hammer Date: Tue Feb 20 12:51:41 1996 +0000 Completed SCAN. Fixed problems with EXTERNAL. commit 297a057b70eb2747f46b5fe216984394cde6ea8b Author: Sebastian Hammer Date: Tue Feb 20 12:50:45 1996 +0000 Various commit f1bb2364c333c161a8197785e51348c70f31ca6b Author: Sebastian Hammer Date: Mon Feb 12 18:18:07 1996 +0000 Fidgeting. commit 17c6fa471c8ff21bd9133a806569e10a0919e24c Author: Sebastian Hammer Date: Mon Feb 12 18:17:48 1996 +0000 SMALLISH commit 9d17b5cfa8555d4762f162785edede1e0314cc07 Author: Sebastian Hammer Date: Sat Feb 10 12:23:41 1996 +0000 Enable inetd operations fro TCP/IP stack commit b835ec5cc4cd3a601f589e948f3d1220f179710f Author: Sebastian Hammer Date: Sat Feb 10 12:23:11 1996 +0000 Enablie inetd operations fro TCP/IP stack commit bd6ab82d45c0079d404ec0c325c5f4c8a9ca86e6 Author: Sebastian Hammer Date: Sat Feb 10 12:22:49 1996 +0000 Work on SCAN commit 52cfdac6b573bceb94777e9393cf02719d6e2c9d Author: Sebastian Hammer Date: Sat Feb 10 12:21:57 1996 +0000 Smallish commit 069f580ad7901713aaf7bb8d27aaba82124c15c7 Author: Adam Dickmeiss Date: Mon Feb 5 12:24:26 1996 +0000 Implemented log_event_{start,end}-functions. commit 37a88d1e2934cddb2a6711b34011628e6b40e912 Author: Adam Dickmeiss Date: Mon Feb 5 12:23:41 1996 +0000 Removed RPN_QUERY define (not used in these modules). commit d4901e9a337370bf73e34a7d1ce718e3ea178a66 Author: Sebastian Hammer Date: Wed Jan 24 16:01:14 1996 +0000 pl4 commit 4324da797a51137daa4d7e2d665df2ff82ce8c66 Author: Sebastian Hammer Date: Mon Jan 22 09:46:31 1996 +0000 Added Sort PDU. Moved StringList to main protocol file. commit 4eb6ad2c0421101a9d68c4d4d519823526651a9b Author: Sebastian Hammer Date: Mon Jan 22 09:46:07 1996 +0000 Added Sort PDU commit a571156582fe34154568c7b42f142e56879557d3 Author: Sebastian Hammer Date: Fri Jan 19 15:41:52 1996 +0000 *** empty log message *** commit ef96020a7ee2ee72323f043a4257d332b91ee353 Author: Sebastian Hammer Date: Fri Jan 19 15:41:47 1996 +0000 Fixed uninitialized boolean. commit 4e88eb87479d35e80be11f9821f5e754dbea22eb Author: Sebastian Hammer Date: Fri Jan 19 15:41:34 1996 +0000 dumpber was ignoring the file argument. commit 8d041b46a730c44ea9488a3056f9fdcba4fd0ce9 Author: Sebastian Hammer Date: Fri Jan 19 15:41:14 1996 +0000 Smallish. commit 826b36840ea0cb5c0a6262ec25691e83ea20780a Author: Adam Dickmeiss Date: Thu Jan 18 09:46:34 1996 +0000 Changed prototype for reader function parsed to data1_read_record. commit 31cdb9d2330fe01012b3976ecf10c6bb1546f548 Author: Adam Dickmeiss Date: Wed Jan 17 14:52:47 1996 +0000 Changed prototype for reader function parsed to data1_read_record. commit 8987907b5c39b3f1575a40d02ffd8912487d81d3 Author: Sebastian Hammer Date: Wed Jan 10 15:21:24 1996 +0000 Added links to access control PDUs commit c195f14eb2fd48882f7b19dcb1b2421b1d174900 Author: Sebastian Hammer Date: Wed Jan 10 13:07:02 1996 +0000 *** empty log message *** commit 593e3a0579cb7de6d79c1ebc665612fd9cb5bac9 Author: Sebastian Hammer Date: Wed Jan 3 16:22:56 1996 +0000 *** empty log message *** commit 1aef484f50fc535620d43dab81584432115681b2 Author: Adam Dickmeiss Date: Tue Jan 2 13:57:30 1996 +0000 Added error messages. commit e37f1b24803ae41bba736eabdc14851018578abc Author: Sebastian Hammer Date: Tue Jan 2 11:46:49 1996 +0000 Changed 'operator' to 'roperator' to avoid C++ conflict. Moved to pl3 commit 8bec24d252450a514ba47690ef187a76a29f8b47 Author: Sebastian Hammer Date: Tue Jan 2 11:46:40 1996 +0000 Changed 'operator' to 'roperator' to avoid C++ conflict. commit 5510ef5973c29973156c06ffb920deeb04a662d8 Author: Sebastian Hammer Date: Tue Jan 2 11:42:31 1996 +0000 Moved to pl3 commit 4ae699c927bc26f3550d1a8ca911e8d1fe75dbfc Author: Sebastian Hammer Date: Tue Jan 2 08:57:19 1996 +0000 Changed enums in the ASN.1 .h files to #defines. Changed oident.class to oclass commit 3c061ecc327ee0e2e5f0c63b4951c7d51cb87ce7 Author: Sebastian Hammer Date: Fri Dec 15 16:57:11 1995 +0000 Added formatted-text. commit 1a74e6a6a7f7b81ebbda9de508b10610508b8db7 Author: Sebastian Hammer Date: Fri Dec 15 16:20:41 1995 +0000 Added formatted text. commit 05d23eb6c40d04281eb51c9e7931c63ea51ceb6f Author: Sebastian Hammer Date: Fri Dec 15 16:19:45 1995 +0000 Added formatted_text. commit 2967b364c0bc6c5e35957acb05dc27d45787171c Author: Sebastian Hammer Date: Fri Dec 15 11:22:15 1995 +0000 Added bodyofDisplay commit b2d4fae21009b1909a35ef9ae6bcd27c1a5dca74 Author: Sebastian Hammer Date: Thu Dec 14 16:28:07 1995 +0000 More explain stuff. commit abfbb8adfc5e2cbc048b623d41eaf36f05cf8bd9 Author: Sebastian Hammer Date: Thu Dec 14 11:09:43 1995 +0000 Work on Explain commit 53c17d9dc2f7c8355bbac800ed02862eb5780d4f Author: Sebastian Hammer Date: Thu Dec 14 11:09:31 1995 +0000 Added Explain record syntax to the format command. commit 78afbee947e1e4d6cd950e2fb9421abcdf1fbab4 Author: Sebastian Hammer Date: Thu Dec 14 11:09:09 1995 +0000 Fixed bug in tagging. commit 8916c5245235fa1229f8a23ba7ebb1500e98b818 Author: Sebastian Hammer Date: Wed Dec 13 17:14:26 1995 +0000 *** empty log message *** commit 381bf177c2d16c3f19ad60d3fca0d644c6e9e064 Author: Sebastian Hammer Date: Wed Dec 13 16:03:35 1995 +0000 *** empty log message *** commit 6545117117f63785408dec79e13e26d9f5779d55 Author: Sebastian Hammer Date: Wed Dec 13 15:38:43 1995 +0000 Added SGML-output filter. commit ad7f3313654b48d43981d8b55a2a99d53347529f Author: Sebastian Hammer Date: Wed Dec 13 15:32:47 1995 +0000 Added sgml-output. commit d296bf4d8d017e615b5030f422b99053c4e382e0 Author: Sebastian Hammer Date: Wed Dec 13 13:44:23 1995 +0000 Modified Data1-system to use nmem commit 5afa1465c452137580fe0c21a928f8bdcd08367b Author: Sebastian Hammer Date: Wed Dec 13 13:38:41 1995 +0000 First kick. commit 9446211daf0869d342b5738d153d810230b7a299 Author: Sebastian Hammer Date: Tue Dec 12 16:37:02 1995 +0000 Added destroy element to data1_node. commit a54eb1c1d02d6f7b7eb8e14db4772ebbc5387315 Author: Sebastian Hammer Date: Tue Dec 12 14:11:31 1995 +0000 More work on the large-record problem. commit 5c073098ad53cab537fd66d89c5b29e730c46a88 Author: Sebastian Hammer Date: Tue Dec 12 14:11:00 1995 +0000 Minimal. commit 378fb34b7013a9f6b15fd632f987a339da80b907 Author: Sebastian Hammer Date: Mon Dec 11 15:22:37 1995 +0000 Added last_child field to the node. Rewrote schema-mapping. commit 8986fb21c4b4a417de1817a73191b4b522c453d9 Author: Sebastian Hammer Date: Mon Dec 11 15:22:12 1995 +0000 Added last_child field to the node. commit bd0180737b693328bc8ced2e294588209a5d858b Author: Sebastian Hammer Date: Mon Dec 11 15:21:56 1995 +0000 Work. commit f850b018fdcafddfb5c0f72cc16c51a6be47cddc Author: Sebastian Hammer Date: Wed Dec 6 16:06:20 1995 +0000 Fixed YAZ library commit 14e430f03a8a98fc4a795cc5544dafcb23fd5031 Author: Sebastian Hammer Date: Wed Dec 6 15:50:42 1995 +0000 1.0pl2 commit 39255c75cf4b692fec73ce3fe52cf56333189bfc Author: Adam Dickmeiss Date: Wed Dec 6 13:00:19 1995 +0000 Minus alone not treated as an option. commit d6fec902f5ecce2849f1ea7a2fff073df3ea8db9 Author: Sebastian Hammer Date: Wed Dec 6 09:51:27 1995 +0000 Fixed the log-prefix buffer - it was too small and the setup code lacked a bounds-check. commit 3daec0c0ae02f6dffeb98fec83913c50de670510 Author: Sebastian Hammer Date: Wed Dec 6 09:50:56 1995 +0000 Bad #define. commit 1b9f6e078470e18513ac273c3e3e089b214c2d81 Author: Sebastian Hammer Date: Wed Dec 6 09:49:13 1995 +0000 Work. commit 16a55fae225f0d7597bf91b3fce7190bc87b9314 Author: Sebastian Hammer Date: Wed Dec 6 09:47:40 1995 +0000 *** empty log message *** commit 1a1ff494c26dcf1dc67530c92745e36725060dfd Author: Sebastian Hammer Date: Tue Dec 5 16:43:04 1995 +0000 Work. commit b6e8efd1bc9032260c1f30418f505f17ed2f4472 Author: Adam Dickmeiss Date: Tue Dec 5 15:08:44 1995 +0000 Fixed verbose of xrealloc. commit 8d84b94601b2be119f2a2d511b268a6123e4aaf9 Author: Sebastian Hammer Date: Tue Dec 5 14:26:40 1995 +0000 Added global lbuf to data1_node. commit 2dda9d9bfe56381a6a9ae1f6f72d69645e552dcb Author: Sebastian Hammer Date: Tue Dec 5 11:17:55 1995 +0000 Removed \r introduced from the Windows port somehow. commit ef856faa1846f53ea533cd4e4ce72291fcfa999e Author: Sebastian Hammer Date: Tue Dec 5 11:17:30 1995 +0000 Moved some paranthesises around. Sigh. commit 22539de88437f4812d17f8ab1d71db52f1da4c0e Author: Sebastian Hammer Date: Tue Dec 5 11:16:10 1995 +0000 Fixed malloc of 0. commit 450302c17fd8b1c07fa1b5400e5b85645118d319 Author: Sebastian Hammer Date: Tue Dec 5 11:15:50 1995 +0000 Work. commit 8265143b935609afba4d76c7f424e138da155ac2 Author: Sebastian Hammer Date: Tue Dec 5 11:15:40 1995 +0000 1.0pl1 commit 4eb98bb29689c555b7c854d7b175b60c153d0691 Author: Adam Dickmeiss Date: Tue Dec 5 11:08:37 1995 +0000 More verbose malloc routines. commit 202ccb243136e1753134aa778c21dac30f901985 Author: Sebastian Hammer Date: Mon Dec 4 23:59:04 1995 +0000 Added abreviated GILS tags. commit 4af141c2f6ca166ed85357c08334b2ed19da217d Author: Sebastian Hammer Date: Tue Nov 28 09:32:27 1995 +0000 v1.0 commit 0f08c4be1e64c5429e0b4c4c33e1acc7dcbc3f40 Author: Sebastian Hammer Date: Tue Nov 28 09:31:22 1995 +0000 Version 1.0 commit d3984fc00ab8ab6d26fbcb162723667e8bae95c1 Author: Sebastian Hammer Date: Tue Nov 28 09:30:41 1995 +0000 Work. commit a14bd4709da825b01f3cc42e5506b23bc3dea411 Author: Sebastian Hammer Date: Mon Nov 27 13:46:38 1995 +0000 Work commit 96b9676c49ab52a28c50dda95cf23bf92cd57507 Author: Sebastian Hammer Date: Tue Nov 21 15:09:43 1995 +0000 Work commit 91921982a89c15eaea23d60b2e01ec7261513c33 Author: Adam Dickmeiss Date: Fri Nov 17 11:09:39 1995 +0000 Added new option '-c' to specify configuration name in control block. commit 521f0f04ca70c76b28ad693f5f9854dc524dbab3 Author: Adam Dickmeiss Date: Fri Nov 17 11:08:57 1995 +0000 Install action added. commit 2927cf8d4c742fee3978ca41b3ade18b3af1fd60 Author: Sebastian Hammer Date: Wed Nov 15 11:51:21 1995 +0000 Smallish commit 0ef2b29604c21f65eaf7182bc992c9ca78bdd2e5 Author: Sebastian Hammer Date: Wed Nov 15 10:52:25 1995 +0000 Added profile documentation. commit a309d6ece06c0ab732d98c59f2718efaebd01ec6 Author: Sebastian Hammer Date: Mon Nov 13 09:27:22 1995 +0000 Fiddling with the variant stuff. commit d1a20e8d865a4ef50a024d5076f8aa2a8667500d Author: Sebastian Hammer Date: Wed Nov 8 17:57:20 1995 +0000 Fixed title ref. commit 20183db4fcbb8161529ee557ead6789ae2097ae0 Author: Sebastian Hammer Date: Wed Nov 8 17:41:11 1995 +0000 Smallish. commit c4b184d02212b522facfd4bb8d86f7c3e933b14c Author: Sebastian Hammer Date: Wed Nov 8 15:11:29 1995 +0000 Log of close transmit. commit b3b306f2e04d5ef2b918fcd377b74eaf1547de42 Author: Sebastian Hammer Date: Tue Nov 7 12:37:44 1995 +0000 Added support for forcing TIMEOUT event. commit 3ffa5dbc563e15bccb012f3d3d00a993f87ace82 Author: Sebastian Hammer Date: Wed Nov 1 16:34:52 1995 +0000 Making data1 look for tables in data1_tabpath commit 6b3cb0bd17248f844cae8744d29816809db1673f Author: Sebastian Hammer Date: Wed Nov 1 14:44:33 1995 +0000 Added tables. commit 2004bbd9b3bbce5eb8ecc49520255b3d0bf578b9 Author: Sebastian Hammer Date: Wed Nov 1 13:54:12 1995 +0000 Minor adjustments commit 1237873423722c1c5cffad7baa61281902c29c53 Author: Sebastian Hammer Date: Wed Nov 1 13:07:18 1995 +0000 Data1 module now lives in YAZ. commit a8b671f524437f17d856b567a5e3b4648c83fe6c Author: Sebastian Hammer Date: Wed Nov 1 12:19:13 1995 +0000 Second attempt to fix same bug. commit 00a64eba41e963e73b71f6b6850f748b5071663a Author: Sebastian Hammer Date: Wed Nov 1 11:56:53 1995 +0000 Added Xmalloc. commit 8ad9b2411f30d2a306bcf9b8a0cb0f03576e2a36 Author: Sebastian Hammer Date: Wed Nov 1 11:56:37 1995 +0000 Fixed bug in elementsetname-handling in piggybacked presents. commit cea212fba995de3fa0d6d6723d828f6fd7ca31df Author: Sebastian Hammer Date: Wed Nov 1 11:56:06 1995 +0000 Added Retrieval (data management) functions en masse. commit b6a465d196c8738156814a9fb3ba9e2450dd1be4 Author: Sebastian Hammer Date: Wed Nov 1 11:55:41 1995 +0000 Added xmalloc.c commit 29818ed78e32998641adcf5f23d3b854355918b5 Author: Sebastian Hammer Date: Mon Oct 30 12:41:06 1995 +0000 Added hostname lookup for server. commit b159db0e380339b4f51ba3871458fcf09bbfdece Author: Sebastian Hammer Date: Wed Oct 25 16:58:32 1995 +0000 Simple. commit d725e25e13a79b4b47d578580bd289b37f85c41c Author: Sebastian Hammer Date: Wed Oct 25 16:58:19 1995 +0000 Stupid bug in odr_malloc commit 3d0077a6eb90bf1cf4d2ecc3acd1afaf7c829bd0 Author: Sebastian Hammer Date: Wed Oct 18 16:12:55 1995 +0000 Better diagnostics. Added special case in NULL to handle WAIS server. commit cd5d6beb85878bfc65a2ebd2b771b86a1872af40 Author: Sebastian Hammer Date: Wed Oct 18 16:12:30 1995 +0000 Better diagnostics. commit 3e0bd65fd12dc5d8afc9c2da0e2465f49757c53d Author: Sebastian Hammer Date: Wed Oct 18 16:12:20 1995 +0000 Added a couple of special cases to handle the WAIS server. commit a3fb25600e5a7366e761b46c419462080fc13f73 Author: Sebastian Hammer Date: Mon Oct 16 13:51:41 1995 +0000 Changes to provide Especs to the backend. commit d5841c7c5616c3259c78e90cbf8e5e96ebd3ab31 Author: Sebastian Hammer Date: Fri Oct 13 16:08:04 1995 +0000 Added OID utility commit 0ba153ff51508cf37d3f5bbc48e3738dacfc6f42 Author: Sebastian Hammer Date: Thu Oct 12 10:34:28 1995 +0000 Added Espec-1. commit 7c3682d1d90e48dadca5e8c9b482044cbd65e939 Author: Sebastian Hammer Date: Wed Oct 11 14:49:12 1995 +0000 Smallish. commit 80c35fec715148c1c4547cf62aa6e2558884611a Author: Sebastian Hammer Date: Tue Oct 10 16:27:06 1995 +0000 *** empty log message *** commit a9a2a0427e8c387265ae6cccd16d97df6585e7ff Author: Sebastian Hammer Date: Fri Oct 6 12:59:06 1995 +0000 Added access macros commit b22117b182e372c6d1adc77c7da6a1de508e8594 Author: Sebastian Hammer Date: Fri Oct 6 08:51:13 1995 +0000 Added Write-buffer. commit 63cafe41a93427118959a74201b3e331169a71d9 Author: Sebastian Hammer Date: Fri Sep 29 17:11:52 1995 +0000 Smallish commit 9c459af695605b44a044ad206562818be10034f1 Author: Sebastian Hammer Date: Fri Sep 29 17:01:34 1995 +0000 More Windows work commit a65e0f7a2d18e29a619b137b8a1ddbc55891d573 Author: Sebastian Hammer Date: Thu Sep 28 10:24:32 1995 +0000 Windows changes commit fce935c96fc52b25533514e03fdd16b0d34f855e Author: Sebastian Hammer Date: Thu Sep 28 10:13:54 1995 +0000 Added central config file. commit aa45b978839c268db6eccafc6a13452d99a7929c Author: Sebastian Hammer Date: Thu Sep 28 10:12:26 1995 +0000 Windows-support changes commit 657fb99115b87a5244e9a33bbe4ca3d9d18849c4 Author: Sebastian Hammer Date: Wed Sep 27 15:02:33 1995 +0000 Modified function heads & prototypes. commit f305305306da9af74ed6c559f2b06353fd5a7c82 Author: Sebastian Hammer Date: Fri Sep 15 14:44:15 1995 +0000 *** empty log message *** commit 39d04935b765d492fdb6f27c0b8fb0eae6acd50f Author: Sebastian Hammer Date: Tue Sep 12 11:32:06 1995 +0000 Added a looker-upper by name. commit 3b54f840517967a8631829b96fdadf1e6abc3404 Author: Sebastian Hammer Date: Tue Sep 12 11:31:46 1995 +0000 Added some oids. commit 71936fd087fe8833926c9978b96c0e405d08aed7 Author: Sebastian Hammer Date: Tue Sep 12 11:31:36 1995 +0000 *** empty log message *** commit 6d73e5de2a3311b596132f879f60d9d43230778e Author: Sebastian Hammer Date: Tue Aug 29 14:44:50 1995 +0000 Reset timeouts. commit 42212b458f327fe54a537eabd80a3e42afcb2ee3 Author: Sebastian Hammer Date: Tue Aug 29 14:44:43 1995 +0000 *** empty log message *** commit 9e1a8a0a598aef894f59fa8abe3ccb144a5294a8 Author: Sebastian Hammer Date: Tue Aug 29 14:24:13 1995 +0000 Added second half of close-handshake commit 42d681412ccbe0b710a78f672bad207ce5b50d60 Author: Sebastian Hammer Date: Tue Aug 29 11:28:52 1995 +0000 *** empty log message *** commit edc031856dc0956a63914b19f20c1d93e48525a2 Author: Sebastian Hammer Date: Tue Aug 29 11:19:31 1995 +0000 Added Diagnostic Format commit d09e17f371431d3397588e6b749219608d37766a Author: Sebastian Hammer Date: Tue Aug 29 11:17:28 1995 +0000 Added code to receive close commit 602ffff9bb22a27dc020630a884c101ad09e1990 Author: Sebastian Hammer Date: Tue Aug 29 11:17:14 1995 +0000 *** empty log message *** commit 45f00f8e00111ba73b19c28568b8e0c88e55fdff Author: Sebastian Hammer Date: Tue Aug 29 11:16:53 1995 +0000 Added code to send close commit 071678ee007f2f0b28dbed63bfd48e65cf393f3c Author: Sebastian Hammer Date: Tue Aug 29 10:41:18 1995 +0000 Small. commit 43003ed479db7320b458611ea09db56f79de7cdb Author: Sebastian Hammer Date: Mon Aug 28 16:29:45 1995 +0000 A commit 32226dbfb020481e8589fad8f5f349eff63e3273 Author: Sebastian Hammer Date: Mon Aug 28 12:21:27 1995 +0000 Client can now ask for simple element set names. commit bad46a884892e5ed522dcbbe06a53b1cef475007 Author: Sebastian Hammer Date: Mon Aug 28 10:58:58 1995 +0000 Added extra choice-entry to data to catch visiblestring. commit 926053a25451c80865544d9c1278b05e5c04a707 Author: Sebastian Hammer Date: Mon Aug 28 10:58:21 1995 +0000 *** empty log message *** commit abaa7e4d8d4d9ad4a5a33e55895055a9975895aa Author: Sebastian Hammer Date: Thu Aug 24 15:13:18 1995 +0000 Beta 3 commit a8f0f1b7224655f2546b71608dbe8520ebc4f254 Author: Sebastian Hammer Date: Thu Aug 24 10:56:22 1995 +0000 Typos. commit 9d5b598c238693453bf2c7688374af1d940ce834 Author: Sebastian Hammer Date: Mon Aug 21 09:16:32 1995 +0000 Added Extended services + Item Order commit 7f4183f05884c781eb395a17e4282485c618ded6 Author: Sebastian Hammer Date: Mon Aug 21 09:10:10 1995 +0000 Smallish fixes to suppport new formats. commit 1c2df7a209b83db0b04700abff3512c0abf5d967 Author: Sebastian Hammer Date: Thu Aug 17 12:47:09 1995 +0000 Added GRS-1. commit 11fc1fa1b5e4b75942018efe466dbfdb41454077 Author: Sebastian Hammer Date: Thu Aug 17 12:44:55 1995 +0000 Fixed minor problems with GRS-1. Added support in c&s. commit e02b5659eaac4f86f7bf97779a5f0dcf9f6bf86a Author: Sebastian Hammer Date: Tue Aug 15 13:37:41 1995 +0000 Improved EXTERNAL commit 72592d242326dea9e05cae90d50348a2da0c0948 Author: Sebastian Hammer Date: Tue Aug 15 11:59:39 1995 +0000 Updated External commit c3900ef26a3b594b58a051116954daf3470e7f03 Author: Sebastian Hammer Date: Tue Aug 15 11:58:33 1995 +0000 Updated External. commit 650245423f092d3f645acee914230227901f2fd5 Author: Sebastian Hammer Date: Tue Aug 15 11:58:23 1995 +0000 *** empty log message *** commit d1c4d0f9dc12fadca9004dba185f78deeed46415 Author: Sebastian Hammer Date: Tue Aug 15 11:16:50 1995 +0000 CV:e ---------------------------------------------------------------------- CV:e ---------------------------------------------------------------------- commit 76231afd95f258db5024620636824dc905cf1de4 Author: Sebastian Hammer Date: Tue Aug 15 11:16:39 1995 +0000 Fixed pretty-printers. CV:e ---------------------------------------------------------------------- CV:e ---------------------------------------------------------------------- commit 8022d3fea9d2c3dfaa1ad1fbc2491cbd0cfa1d43 Author: Sebastian Hammer Date: Tue Aug 15 11:16:05 1995 +0000 *** empty log message *** commit 16b46be517decccb81f089c56ed798e202a4b86b Author: Sebastian Hammer Date: Thu Aug 10 08:54:33 1995 +0000 Added Explain. commit 6123c0dac006084449fb80900c5764417a6bd706 Author: Sebastian Hammer Date: Thu Aug 10 08:53:52 1995 +0000 Added Explain commit 718bedef3c688e26b434b25e2e77852ddda6181c Author: Sebastian Hammer Date: Wed Aug 2 10:23:06 1995 +0000 Smallish commit a54b78d4dfd37879e595070471ee69ab9dba64f1 Author: Sebastian Hammer Date: Mon Jul 31 14:34:26 1995 +0000 Fixed bug in process_searchResponse (numberOfRecordsReturned). commit 6dc5380b5f90907fb32efe356ff1659fc9c5531e Author: Sebastian Hammer Date: Mon Jul 31 14:33:39 1995 +0000 Smallish change. commit c7faf05cbdcd2718c695c36b2d4b3793a61c70a7 Author: Sebastian Hammer Date: Tue Jun 27 13:22:25 1995 +0000 *** empty log message *** commit 4c139281f38687ac9e5cf120bd8421d476d51bd6 Author: Sebastian Hammer Date: Tue Jun 27 13:20:59 1995 +0000 SUTRS support commit 9f397feecfd366f335e8a7e30b13431790c00f84 Author: Sebastian Hammer Date: Tue Jun 27 13:20:51 1995 +0000 Fixed sign-clash. Non-fatal warning commit 6d7038a051e53896c8447bec79279353a3ab57ef Author: Sebastian Hammer Date: Tue Jun 27 13:20:32 1995 +0000 Added SUTRS support commit 016a7b8249c7914dc028829009a7ea7574e29e51 Author: Sebastian Hammer Date: Tue Jun 27 13:20:06 1995 +0000 Can now inherit external libs from top-level makefile commit 44c069f9cae451dae880e8d576387f6a46ce588d Author: Sebastian Hammer Date: Tue Jun 27 13:19:28 1995 +0000 V1.0b2 commit 86316b9e9d3256c07468c85dd301e69e3865794d Author: Sebastian Hammer Date: Tue Jun 27 13:12:07 1995 +0000 v1.0b2 See CHANGELOG for update info now. commit c69f4f05fce93bee043f0edd6c428dc49d75620d Author: Adam Dickmeiss Date: Tue Jun 27 12:44:42 1995 +0000 Fixed bug. commit 502061d0cd291d3858c9b70eccd09dc35f400080 Author: Sebastian Hammer Date: Sun Jun 25 10:53:35 1995 +0000 Smallish adjustments. commit be8acf3280618446f31bb2beac8b1116f748467b Author: Sebastian Hammer Date: Thu Jun 22 12:25:13 1995 +0000 Added changelog commit fca985d5c2944fa01270d363190264e4ee36ec93 Author: Sebastian Hammer Date: Thu Jun 22 09:28:03 1995 +0000 Fixed bug in SUTRS processing. commit a200fc19301615242b43e18b9c03027d495302bb Author: Sebastian Hammer Date: Mon Jun 19 17:01:48 1995 +0000 This should bring us in sync with the version distributed as 1.0b commit 0a75f22446e3298f82acff44810eae3e9592bbdd Author: Sebastian Hammer Date: Mon Jun 19 13:48:49 1995 +0000 Initial revision commit 208b345b9128f274f3c349bc1616fe2d2bb21bde Author: Sebastian Hammer Date: Mon Jun 19 13:39:56 1995 +0000 *** empty log message *** commit 1a4ed05d639cfb9931783be01a93d1b91d28d313 Author: Sebastian Hammer Date: Mon Jun 19 13:39:16 1995 +0000 1.0 beta All of basic 1995 should be in place at this point. Some little features added to make the server more useful. BER dumper for bad protocol debugging. Etc. First major release. All following releases should come with a changelog. commit e31a14058cffd70c2d65a6f599e216e0bcddf7b7 Author: Sebastian Hammer Date: Mon Jun 19 13:06:50 1995 +0000 Fixed simple bug in the code to handle untagged choice elements. commit 76cc232b7a7313f292e2fa28a2ea12eaab865353 Author: Sebastian Hammer Date: Mon Jun 19 12:40:18 1995 +0000 Added log_file() commit d6a0e5ff2f35326b9cd2e1260c56fd5dabafd3eb Author: Sebastian Hammer Date: Mon Jun 19 12:39:09 1995 +0000 Fixed bug in timeout code. Added BER dumper. commit c70f63352bac2f0bfdcc3078d69f43adbcc7ad2d Author: Sebastian Hammer Date: Mon Jun 19 12:38:23 1995 +0000 Reorganized include-files. Added small features. commit 42d3d8a6486c495357574e5db0fc736834d8ba40 Author: Sebastian Hammer Date: Mon Jun 19 12:37:41 1995 +0000 Added BER dumper. commit 38f28b040157ff5bffcd41e557205224f6bb0e9c Author: Sebastian Hammer Date: Mon Jun 19 12:37:28 1995 +0000 Fixed a bug in the compspec. commit 77fe8ea4a114c45e899a63ccfe767ce0dff722a0 Author: Sebastian Hammer Date: Mon Jun 19 12:37:12 1995 +0000 *** empty log message *** commit 1110373102ed65ffcaa5384aa0514516b162c543 Author: Sebastian Hammer Date: Fri Jun 16 13:15:56 1995 +0000 Fixed Defaultdiagformat. commit 0d7bd5b0e03b77779702a35738e5c7bcc5d3849d Author: Sebastian Hammer Date: Fri Jun 16 10:46:48 1995 +0000 *** empty log message *** commit ccdaf5d5cd52555eefe9b22ea4bee98203e33626 Author: Sebastian Hammer Date: Fri Jun 16 10:31:33 1995 +0000 Added session timeout. commit 99197c4bc292188d25b7ccda5328546dc899648e Author: Sebastian Hammer Date: Fri Jun 16 10:30:38 1995 +0000 Added REUSEADDR. commit bee632cc3a4d22b61dd7dc1a196253be5782cf0c Author: Sebastian Hammer Date: Fri Jun 16 10:29:03 1995 +0000 *** empty log message *** commit 7b3772b8fcf2cc486e079b3687b183f997374271 Author: Sebastian Hammer Date: Thu Jun 15 15:45:03 1995 +0000 Added date info. commit 78f86cdd3cc8d44fb8c4329e408a3aa679bd8b9e Author: Sebastian Hammer Date: Thu Jun 15 15:42:01 1995 +0000 Fixed some v3 bugs commit a7b235097c10590dde6dfa1859590d4c4e930366 Author: Sebastian Hammer Date: Thu Jun 15 12:30:48 1995 +0000 Setuid-facility. commit 832b2543074a15413097abfc0d9b7aca2c301b68 Author: Sebastian Hammer Date: Thu Jun 15 12:30:06 1995 +0000 Added @ as hostname alias for INADDR ANY. commit 58eaa160fef1b2eae412e9be77833818a95dae92 Author: Sebastian Hammer Date: Thu Jun 15 12:29:45 1995 +0000 *** empty log message *** commit 1db60f5a7396b9b37560f6b6962be0b68240486c Author: Sebastian Hammer Date: Thu Jun 15 07:44:49 1995 +0000 Moving to v3. commit be3b6e0eee631d7611e6e5f96cce246d090b9848 Author: Sebastian Hammer Date: Thu Jun 15 07:44:39 1995 +0000 MOving to v3. commit 189fa86838b242b5f37e5ea2db92a84935050a81 Author: Sebastian Hammer Date: Wed Jun 14 15:26:30 1995 +0000 *** empty log message *** commit 9edede4a23ba78a2c4a463eabbe7623e7f8d8fbd Author: Sebastian Hammer Date: Wed Jun 14 12:34:55 1995 +0000 Moved version.h to include/ commit fd5d2db3eb371d4af60e2d50d1c7e6fb2d4e64c3 Author: Adam Dickmeiss Date: Wed Jun 14 11:06:35 1995 +0000 Bug fix: Attributes wasn't interpreted correctly! commit d9d409a0b09cff42f6937df2e78fb3eb2f81d319 Author: Sebastian Hammer Date: Wed Jun 14 10:06:25 1995 +0000 Moved yazlib to comstack commit 8a425ff5328260fff0dcc28f08b5bdf6bfac84ab Author: Sebastian Hammer Date: Wed Jun 14 09:58:19 1995 +0000 Renamed yazlib to comstack. commit c2af22077779cd65b746b2822b2b1478ea0619fe Author: Sebastian Hammer Date: Wed Jun 7 14:42:30 1995 +0000 Fixed CLOSE commit 6295998029aa62f64729e15d4a7ffb0038045d78 Author: Sebastian Hammer Date: Wed Jun 7 14:36:22 1995 +0000 Added CLOSE commit 98a0e019041e9911d573861dd440764cdd08b050 Author: Sebastian Hammer Date: Tue Jun 6 14:56:58 1995 +0000 Better diagnostics. commit c4c36570d87ff977f214af637a2f7cb658888dd0 Author: Sebastian Hammer Date: Tue Jun 6 08:41:44 1995 +0000 Better diagnostics. commit 5f2823e584b4b138886c985bc1490b35aa6cdd4c Author: Sebastian Hammer Date: Tue Jun 6 08:15:19 1995 +0000 Cosmetic. commit 6bd2c88268605657b4174f39af96a71b87931baf Author: Sebastian Hammer Date: Mon Jun 5 10:53:31 1995 +0000 Added a better SCAN. commit e0c187d10957ba9aa5c459c4f01afbedb38b33a0 Author: Sebastian Hammer Date: Mon Jun 5 10:53:13 1995 +0000 Smallish. commit e0bff0e5d91422453fa9779565beeef33c4f2740 Author: Sebastian Hammer Date: Mon Jun 5 10:52:22 1995 +0000 Added SCAN. commit c546a1218ae6a2ccda5dcf30809b18a0e335918c Author: Sebastian Hammer Date: Mon Jun 5 10:52:05 1995 +0000 Fixed some negligences. commit 10308339de640b9ff73ed096a6ed2f5faf5646de Author: Sebastian Hammer Date: Fri Jun 2 09:50:09 1995 +0000 Smallish. commit 101d89d1a26a27c93115a68af84e9c72beb1abd6 Author: Sebastian Hammer Date: Fri Jun 2 09:49:47 1995 +0000 Add access control commit 6edc916a5a8d44e1d7708f5018828e0d2020690b Author: Sebastian Hammer Date: Fri Jun 2 09:49:11 1995 +0000 Adding access control commit f45eb9a4844db2509e24e38a043625310c1e32a1 Author: Sebastian Hammer Date: Thu Jun 1 14:34:53 1995 +0000 Work commit ee91cff35d9150fe522c72b903680ccc49bd75ba Author: Sebastian Hammer Date: Thu Jun 1 11:25:03 1995 +0000 Smallish. commit 9760c02cdacaca31695e2adaf1747c82811f3b8a Author: Sebastian Hammer Date: Thu Jun 1 11:24:52 1995 +0000 Resource Control commit 4b449e2e477bc6feca0b83ce8e8e0bbc205c7e4a Author: Sebastian Hammer Date: Thu Jun 1 11:22:17 1995 +0000 Resource control commit 8cfe6e1e33b0d50d2f31c825c6db5fe2eef33663 Author: Sebastian Hammer Date: Thu Jun 1 11:21:01 1995 +0000 Attempting to fix a bug in pack-records. replaced break with continue for large records, according to standard. commit 51c420cc7f3b1c3a362822b353683653791cd8bb Author: Sebastian Hammer Date: Wed May 31 08:29:21 1995 +0000 Nothing significant. commit 0b2e335809568732b2bbae6bc0b585524570b7a7 Author: Sebastian Hammer Date: Tue May 30 10:54:51 1995 +0000 Added some backwards compatibility to the comstack (CS_SR->PROTO_SR) commit ddd998ca83ffe16e7548f0717d218d32a2b57a33 Author: Sebastian Hammer Date: Tue May 30 10:25:40 1995 +0000 Fixed dependency control commit 1b2f4362552dcb365b6e4722d5eac7bb704c6c01 Author: Sebastian Hammer Date: Tue May 30 10:16:03 1995 +0000 Makefile fix commit 4443923c16260ab0c3180fc98a6969a3bf3e1af3 Author: Sebastian Hammer Date: Tue May 30 10:15:49 1995 +0000 Added our implementor's ID commit 8f3107265c90e9e90f272eb4d77394b0ca13ff38 Author: Sebastian Hammer Date: Mon May 29 08:50:50 1995 +0000 *** empty log message *** commit b97c5f66c697c58dc6ee56c402da4237236d70ce Author: Sebastian Hammer Date: Mon May 29 08:17:13 1995 +0000 iMoved oid to util to support comstack. commit dd5f78cc0a977733507aaeb5c76b00ba2debe392 Author: Sebastian Hammer Date: Mon May 29 08:12:06 1995 +0000 Moved oid to util commit 0abf92a5ba3132c9727bec630ed1f04bc51b4f04 Author: Sebastian Hammer Date: Mon May 29 08:11:54 1995 +0000 *** empty log message *** commit d4081206ab9bd0ed0c97c032d264ad1e1d4a051e Author: Sebastian Hammer Date: Mon May 29 08:11:30 1995 +0000 Moved oid from odr/asn to util. commit 17428c7afa7e84d91e4529ba440a953317dc2b82 Author: Sebastian Hammer Date: Mon May 29 08:10:38 1995 +0000 Moved oid.c to util. commit 047c06fdbb9f4f188582b2a6c1f3f22c21333ac2 Author: Sebastian Hammer Date: Mon May 29 08:10:18 1995 +0000 Smallish doc updates. commit 3050c29a2d88f6af325f1fb9ae6d0927babf9193 Author: Adam Dickmeiss Date: Fri May 26 08:56:05 1995 +0000 New function: p_query_scan. commit 583beebdfacea28d31a43a42cbdf3b683fd3a3f1 Author: Sebastian Hammer Date: Thu May 25 11:00:08 1995 +0000 *** empty log message *** commit feeec79483b93bb8bc3f0b25b90377114d271db6 Author: Adam Dickmeiss Date: Mon May 22 15:31:26 1995 +0000 Removed ../../alex/include from -I. commit 8bc8803d672b7ecf182a0bb691885d37cf2a8160 Author: Adam Dickmeiss Date: Mon May 22 15:31:05 1995 +0000 New function, p_query_rpn, to convert from prefix (ascii) to rpn (asn). commit fe03e3dc1bf9c45d942064b92e0910c17220bcb1 Author: Adam Dickmeiss Date: Mon May 22 15:30:13 1995 +0000 Client uses prefix query notation. commit f65413048bdfaaa34f61c9930cc530c31ad2d97a Author: Sebastian Hammer Date: Mon May 22 15:06:53 1995 +0000 *** empty log message *** commit 426dee508ccda399a2ec5a43d26e97493184db2a Author: Sebastian Hammer Date: Mon May 22 14:56:57 1995 +0000 Fixed problem in decoding empty sequence. commit d96b5f6d7f2d2775e7532066d2c75e678cdc8a4c Author: Sebastian Hammer Date: Mon May 22 14:56:40 1995 +0000 *** empty log message *** commit cae330549b4c3cdd6e186815932cee9e7018d752 Author: Sebastian Hammer Date: Mon May 22 14:47:00 1995 +0000 ODR_NULLVAL --> void commit d4c07f5246e1fe90fb79aaf44a5baccf00140221 Author: Sebastian Hammer Date: Mon May 22 14:44:53 1995 +0000 *** empty log message *** commit 3a5079aa34321c59d355e40f684094b99da3a197 Author: Sebastian Hammer Date: Mon May 22 14:42:19 1995 +0000 Replaced empty attrlist with ODR_NULLVAL commit 2d093b88ca5c238b6394c1254078841b19f724ff Author: Sebastian Hammer Date: Mon May 22 14:02:23 1995 +0000 Added cleanup of lib/ commit a1099d28cc3966419e7e90989510fdc2ba53643b Author: Sebastian Hammer Date: Mon May 22 14:00:02 1995 +0000 removed silly ref to libserver. commit 15a2da6d1e7795f107bf056d0efce8e4cccf03b1 Author: Sebastian Hammer Date: Mon May 22 13:58:18 1995 +0000 Fixed an ODR_NULLVAL. commit d4c12ec7c451e74a949cc7c8d5fef226c995ddc6 Author: Sebastian Hammer Date: Mon May 22 11:32:15 1995 +0000 Moved yaz-ccl to util. commit 327f8d22cfd0b717efd69bb105ffee1d05f08e4e Author: Sebastian Hammer Date: Mon May 22 11:32:01 1995 +0000 Fixing Interface to odr_null. commit 54605527769927a70af506babc5d663a6caf7e64 Author: Sebastian Hammer Date: Mon May 22 11:31:24 1995 +0000 Added PDUs commit b3be6bf5b31785568d39c3c1d631759df84d90ca Author: Sebastian Hammer Date: Mon May 22 11:30:30 1995 +0000 Added prettier client. commit a8cbf4e58821b5a7e64063f6a1b50c453494167f Author: Sebastian Hammer Date: Mon May 22 11:30:15 1995 +0000 Adding Z39.50-1992 stuff to proto.c. Adding zget.c commit 1479cd42ce8537af61e2883d9567b0e13bd37197 Author: Sebastian Hammer Date: Mon May 22 11:29:19 1995 +0000 *** empty log message *** commit 28df1d8cbdbee7b3e9b5a23e340e63c7b852841c Author: Sebastian Hammer Date: Thu May 18 13:06:15 1995 +0000 Doc. update commit 86927dcf1fb5dbd4d30f2d906ff5ceba7319f142 Author: Sebastian Hammer Date: Thu May 18 13:02:07 1995 +0000 Smallish. commit dd509bd7c24e5c9f93f0c0072bfb91227142705b Author: Sebastian Hammer Date: Wed May 17 08:42:26 1995 +0000 Transfer auth info to backend. Allow backend to reject init gracefully. commit 18b7618dac0dc32da1f77134d15b60af0ffd84fe Author: Sebastian Hammer Date: Wed May 17 08:41:54 1995 +0000 Small, hopefully insignificant change. commit bceb14af6e76b53d2dcb49af2c981d4bbfc20e3a Author: Sebastian Hammer Date: Wed May 17 08:41:34 1995 +0000 Added delete to proto & other little things. Relaying auth info to backend. commit 37a5a5d8d849029f134e4fcef8f6b360a6420c38 Author: Sebastian Hammer Date: Wed May 17 08:40:56 1995 +0000 Added delete. Fixed some sequence_begins. Smallish. commit 7d3aff023a795b533064879e58946993a01ef729 Author: Sebastian Hammer Date: Wed May 17 08:37:31 1995 +0000 Removed dmalloc commit f09f5c509aa742243939b0b0b6a289beadc75dce Author: Adam Dickmeiss Date: Wed May 17 08:19:08 1995 +0000 Executable marcdump removed on make clean. commit 225a451c3b6a46e0034060affad7df94b18ba3aa Author: Sebastian Hammer Date: Tue May 16 09:37:18 1995 +0000 Fixed bug commit 99268f722648e84bf5c54eb685a1434e100f38a1 Author: Sebastian Hammer Date: Tue May 16 08:50:15 1995 +0000 License, documentation, and memory fixes commit 9e4d074b5d72a383addc86a2c7e76ed60d3c4883 Author: Sebastian Hammer Date: Mon May 15 13:25:10 1995 +0000 Fixed memory bug. commit b7cfb26ec2c224a900931d09d316efe78dd4d6c5 Author: Sebastian Hammer Date: Mon May 15 13:20:38 1995 +0000 ZZ commit eba5a38ad752c24f77110eb02e96e3895bd0fb3b Author: Sebastian Hammer Date: Mon May 15 12:12:22 1995 +0000 Request queue. commit dffa37262abe124e347fc19d7cc8a4cfa3a613bf Author: Sebastian Hammer Date: Mon May 15 11:58:32 1995 +0000 Added license document. commit 8c0d9ab51d716e170e6185dbfeb9462d91fb1a06 Author: Sebastian Hammer Date: Mon May 15 11:56:55 1995 +0000 Debuggng & adjustments. commit fe5f2da0c0c4ae00864cc72a36714e90405456e4 Author: Sebastian Hammer Date: Mon May 15 11:56:36 1995 +0000 Asynchronous facilities. Restructuring of seshigh code. commit 84fdcc95fbd65091100b861671f410313e78eb0e Author: Sebastian Hammer Date: Mon May 15 11:56:08 1995 +0000 More work on memory management. commit fed6a7e0b9f6c90dc49f0000de429b2aec7e43cb Author: Sebastian Hammer Date: Mon May 15 11:55:54 1995 +0000 Work on asynchronous activity. commit b6851a557131564beda1f460caa1197fd272d310 Author: Sebastian Hammer Date: Mon May 15 11:55:25 1995 +0000 Smallish. commit 57a0976b6e7d84f77a08dcd4cf03d6656dae60d4 Author: Sebastian Hammer Date: Mon May 15 11:55:13 1995 +0000 Documentation & other details. commit 944822bc44705a21ec8b9ce44e0765e0fe37f635 Author: Adam Dickmeiss Date: Thu May 11 15:31:43 1995 +0000 New function ccl_scan_query. commit 7148f4238bd2ea22c60008fc3062626b42456ae4 Author: Sebastian Hammer Date: Tue May 2 08:53:07 1995 +0000 Trying in vain to fix comm with ISODE commit 8ce78c7b1b91c6298c913349c46a61bd26244734 Author: Sebastian Hammer Date: Tue May 2 08:52:28 1995 +0000 Doc work commit 4c93ea2a3df5c172408103163ca10499d2c499ed Author: Sebastian Hammer Date: Fri Apr 28 14:15:36 1995 +0000 *** empty log message *** commit eb9336c6ecfd078b265ee69cef96a3a2dfa04ace Author: Sebastian Hammer Date: Fri Apr 21 16:31:56 1995 +0000 *** empty log message *** commit b200b3ce30a8db1d68b2ddfe9994acff1a5d2789 Author: Sebastian Hammer Date: Thu Apr 20 15:12:44 1995 +0000 Cosmetic commit 881c919d54a8d7da72375592033913fcf161e56e Author: Sebastian Hammer Date: Wed Apr 19 10:08:39 1995 +0000 Smallish commit 63cfdc4bcf039bad895e9d1bbbaa72e7714b59bc Author: Sebastian Hammer Date: Tue Apr 18 15:23:58 1995 +0000 *** empty log message *** commit aa82967af8f06004b567ad1ed40c67b056c44e7b Author: Sebastian Hammer Date: Tue Apr 18 08:15:11 1995 +0000 Added dynamic memory allocation on encoding (whew). Code is now somewhat neater. We'll make the same change for decoding one day. commit f2944c80ada3871faf8ec49bcad1470e6add4bac Author: Sebastian Hammer Date: Tue Apr 18 08:14:37 1995 +0000 Added dynamic memory allocation on encoding commit 923802efbd1b95c2349dbef298d0c650f21f95a2 Author: Sebastian Hammer Date: Mon Apr 17 11:28:17 1995 +0000 Smallish commit 549074d1394b37eb04b612c0f2f16fe1361d6243 Author: Sebastian Hammer Date: Mon Apr 17 09:37:31 1995 +0000 *** empty log message *** commit dabd8c212617030ef132e9b9a2ae3e1ed2817467 Author: Sebastian Hammer Date: Tue Apr 11 11:58:35 1995 +0000 Fixed bug. commit d32b1dbdc1f0392883547cc9e56c26f384a4c57f Author: Sebastian Hammer Date: Tue Apr 11 11:52:01 1995 +0000 Fixed possible buf in proto.c commit 7d093cf64e6045cf14dbf199f8cdf6b808dd3b65 Author: Sebastian Hammer Date: Mon Apr 10 10:28:46 1995 +0000 Added copy of CCL and MARC display commit 330271187bc05322c13e6e22483120ca8e5a20a1 Author: Sebastian Hammer Date: Mon Apr 10 10:28:16 1995 +0000 Added copy of CCL. commit f3dd50f81c9aed6768a88b253615d6667cd92a35 Author: Sebastian Hammer Date: Mon Apr 10 10:23:49 1995 +0000 Fixes. commit 79b35f162af8212091fab0ca10b458c262685eaa Author: Sebastian Hammer Date: Mon Apr 10 10:23:34 1995 +0000 Some work to add scan and other things. commit 7b336b394526b31a4c76063e5f63ae3b11d39dda Author: Sebastian Hammer Date: Mon Apr 10 10:23:10 1995 +0000 Smallish changes. commit b4bc42219f953362453be1b22bd323416e41cf98 Author: Sebastian Hammer Date: Mon Apr 10 10:22:57 1995 +0000 Tinkering. commit f16b3e60529eece2026d584d1f420555690488a6 Author: Sebastian Hammer Date: Mon Apr 10 10:22:46 1995 +0000 Added SCAN commit 205c8de99c5cfe2eb4a0cfbeed34603ebf49b318 Author: Sebastian Hammer Date: Mon Apr 10 10:22:21 1995 +0000 Added SCAN. commit 61c0c42465b6886f6aff3c5cf6a94404b03a1fbd Author: Sebastian Hammer Date: Mon Apr 10 10:22:06 1995 +0000 Added README. Mods to top-level mkf. commit 87a9bdcb0fda85461f9992519f4239645c8b2826 Author: Sebastian Hammer Date: Fri Mar 31 10:16:51 1995 +0000 Fixed logging. commit c7fa0e1f18e00b58b65b39b3c36cb68930e3838c Author: Sebastian Hammer Date: Fri Mar 31 09:18:55 1995 +0000 Added logging. commit bcd497eb945e135d9693ca7f1c0285930a0622fa Author: Sebastian Hammer Date: Thu Mar 30 16:08:39 1995 +0000 Little mods. commit 031f86a3dea0a26278eb9efcce46c1b4d3835a79 Author: Sebastian Hammer Date: Thu Mar 30 14:03:17 1995 +0000 Added RFC1006 as separate library commit e5e0b0c0af410a18ee3f57bdcfdc5e68265f0343 Author: Sebastian Hammer Date: Thu Mar 30 14:02:50 1995 +0000 *** empty log message *** commit a140c9feb12ed5e2b98fc0e94501774c926ff831 Author: Sebastian Hammer Date: Thu Mar 30 14:02:36 1995 +0000 Added rfc1006 commit 3cb5bc246b8640b6aca6339080315591881a24e1 Author: Sebastian Hammer Date: Thu Mar 30 13:29:02 1995 +0000 Smallish commit 26f25a4dd83618b5230956c6fb37bdda473ce501 Author: Sebastian Hammer Date: Thu Mar 30 12:18:17 1995 +0000 Fixed bug. commit fe47f8f7fe8dc10cfe508d5cd052dec12683cb50 Author: Sebastian Hammer Date: Thu Mar 30 12:18:09 1995 +0000 Added info. commit 6a0c308ce3cb682cb908d7c4acf634ed7ff1b90f Author: Sebastian Hammer Date: Thu Mar 30 11:10:56 1995 +0000 Added log.o commit 945f86bd3958b5d36aaaeb4be945b0a8632f3b40 Author: Sebastian Hammer Date: Thu Mar 30 10:26:53 1995 +0000 Logging system commit 5317b91368cca60e5a368b0ea2d7665704e2d57b Author: Sebastian Hammer Date: Thu Mar 30 10:26:43 1995 +0000 Added Term structure commit 372a500da226336c7bb4036e980be2587ad5fdeb Author: Sebastian Hammer Date: Thu Mar 30 09:39:31 1995 +0000 Moved .h files to include directory commit c3a132ce4aea3bb358b185ef58781b4bef8745fc Author: Sebastian Hammer Date: Thu Mar 30 09:09:24 1995 +0000 Added state-handle and some support for asynchronous activities. commit 1c026b4c8a1a509729b326328e55227604d9ca38 Author: Sebastian Hammer Date: Thu Mar 30 09:08:39 1995 +0000 Added Resource control protocol commit 2f5c9e5bc97a81a1e83f825146453a4a89696274 Author: Sebastian Hammer Date: Wed Mar 29 15:40:16 1995 +0000 Ongoing work. Statserv is now dynamic by default commit e8464a391ad260860795a69bcd1bcf6940cc17de Author: Sebastian Hammer Date: Wed Mar 29 15:39:57 1995 +0000 Fixed bugs in the bitmask operations commit c87d26ad68b76e89a5d1fd76b5074542860d8ba6 Author: Sebastian Hammer Date: Wed Mar 29 08:06:35 1995 +0000 *** empty log message *** commit 7e84d8b777a1f70e3a8c322360e0945704a48908 Author: Sebastian Hammer Date: Wed Mar 29 08:06:13 1995 +0000 Added a few v3 elements commit ab6840e96ece6494bbcc06e1c52f0deb371bcf53 Author: Sebastian Hammer Date: Tue Mar 28 09:16:21 1995 +0000 Added record packing to the search request commit f90ac049be17bf84f79ee8e541edab72f2b259e6 Author: Sebastian Hammer Date: Tue Mar 28 09:15:45 1995 +0000 Fixed bug in the printing mode commit 4972d81f72edfe9d44573e863cc2d4c6305e2a64 Author: Sebastian Hammer Date: Mon Mar 27 15:02:00 1995 +0000 Added some includes for better portability commit 441b13f600a164f373f19bba4b574527d13689a1 Author: Sebastian Hammer Date: Mon Mar 27 15:01:44 1995 +0000 Added include of sys/types to further portability commit f26c147b7e348a8e0b91364f4a4d100dc1832467 Author: Sebastian Hammer Date: Mon Mar 27 08:35:16 1995 +0000 Created util library Added memory debugging module. Imported options-manager commit afff2d64ae8758642c8e88bfebff9c00a982daa4 Author: Sebastian Hammer Date: Mon Mar 27 08:34:20 1995 +0000 Added dynamic server functionality. Released bindings to session.c (is now redundant) commit 5f4456fa00e080d850f7e25aba2f1e12cab8adcf Author: Sebastian Hammer Date: Mon Mar 27 08:33:13 1995 +0000 Added more OID utilities. commit 6ea099611ad6b5eacd8abdc2d798f86d4adfbd12 Author: Sebastian Hammer Date: Mon Mar 27 08:32:50 1995 +0000 Simple commit 6707f9687d531abc58665df48168d8c800300a54 Author: Sebastian Hammer Date: Mon Mar 27 08:32:09 1995 +0000 Added OID database commit 7a1249a8dee58e36565e610bb44a8175e0b64d33 Author: Sebastian Hammer Date: Mon Mar 27 08:29:30 1995 +0000 Added util commit 4cd00529895588ac3f40224b8e2bbb57ba28ddc1 Author: Sebastian Hammer Date: Wed Mar 22 15:01:26 1995 +0000 Adjusting record packing. commit 813f1a77544956dd0e0f8b9cbdf491a6b01927cb Author: Sebastian Hammer Date: Wed Mar 22 10:13:21 1995 +0000 Working on record packer commit b89858d4c181a814bd2a00eacdfee85120cee009 Author: Sebastian Hammer Date: Wed Mar 22 10:13:04 1995 +0000 Added echo in loop. commit 512bca4cb3acca0a9dd9386fb3fdd289804a4291 Author: Sebastian Hammer Date: Tue Mar 21 15:53:31 1995 +0000 Little changes. commit dbf6bee5181285baf2fd8f36511846d138655404 Author: Sebastian Hammer Date: Tue Mar 21 12:30:09 1995 +0000 Beginning to add support for record packing. commit 10eb94e29af1a3899279354253ecc01e8298659f Author: Sebastian Hammer Date: Tue Mar 21 10:17:27 1995 +0000 Fixed little bug in decoder. commit 396d0ccd2549e6f31cf1f9adc1c19a97d3a7b0de Author: Sebastian Hammer Date: Mon Mar 20 12:18:22 1995 +0000 Fixed bug in ber_oid commit bfd2f4429361a876789ef5329dc953ab6aa2ced0 Author: Sebastian Hammer Date: Mon Mar 20 11:26:52 1995 +0000 *** empty log message *** commit 74c93e64254dddb35f08ec54ee401fc85d3f8cb7 Author: Sebastian Hammer Date: Mon Mar 20 09:46:24 1995 +0000 Added osi support. commit 2f53a8463ada69f68e58a8c5dc4704acedab27b4 Author: Sebastian Hammer Date: Mon Mar 20 09:45:59 1995 +0000 Added odr_mem to library commit f12dd973a9e92e4d676696712ed5efbb6bf14aed Author: Sebastian Hammer Date: Mon Mar 20 09:45:34 1995 +0000 Added depend NOP commit 4b2fd659ae0a0d33827f8ad600fd6bbc87e54c89 Author: Sebastian Hammer Date: Mon Mar 20 09:45:09 1995 +0000 Working towards v3 commit 68dc3fc2e6ea601cd36a5bf578ab8adb04ed23f3 Author: Sebastian Hammer Date: Sat Mar 18 12:16:31 1995 +0000 Minor changes. commit 9799777340f74ef645acbf171636924a9369d052 Author: Sebastian Hammer Date: Fri Mar 17 10:44:13 1995 +0000 Added catch of null-string in makediagrec commit 892f7f56860a1ee8e8d816eeaec0387c54c1a0a7 Author: Sebastian Hammer Date: Fri Mar 17 10:17:25 1995 +0000 Added memory management. commit 08d286ddede794e73ba8b3c85497de3e0c80312b Author: Sebastian Hammer Date: Thu Mar 16 17:42:39 1995 +0000 Little changes commit ba37668dbdedb1fdc4a69a9d2363222c5e6f6fd7 Author: Sebastian Hammer Date: Thu Mar 16 17:42:29 1995 +0000 Added clean commit 25b7a1f19e0a16578e5918dd7ce70320d915dd23 Author: Sebastian Hammer Date: Thu Mar 16 13:28:59 1995 +0000 Partitioned server. commit 11a58ec3e43c76b092d85510825f7317d7efc3ad Author: Sebastian Hammer Date: Thu Mar 16 13:28:13 1995 +0000 Added makelib commit 5227c7d54c015a1fda5d5b848445fb0343554b61 Author: Sebastian Hammer Date: Wed Mar 15 16:02:10 1995 +0000 Modded session.c seshigh.c commit 81545d983681a20339cc3e391cc448a3e4ebaa32 Author: Sebastian Hammer Date: Wed Mar 15 15:36:12 1995 +0000 Removed pwrite commit 9e7c99310963a811885820ccccf9e96fae6ecf8b Author: Sebastian Hammer Date: Wed Mar 15 15:18:51 1995 +0000 Little changes to better support nonblocking I/O Added backend.h commit 281bd093d547534ce4e667214a1881a84a9f3227 Author: Adam Dickmeiss Date: Wed Mar 15 13:46:09 1995 +0000 New function diagbib1_str. commit cfd912f04c301c2db4cebd7f8ec8c4de6c51f314 Author: Sebastian Hammer Date: Wed Mar 15 11:18:17 1995 +0000 Smallish changes. commit 70efa832d93f63e4fe7de44b666f3b66ae87c23f Author: Sebastian Hammer Date: Wed Mar 15 11:18:04 1995 +0000 Fixed serious bug in odr_cons commit 33821b1729f0afa0cadcecf57fc67fea7138bdab Author: Sebastian Hammer Date: Wed Mar 15 11:17:40 1995 +0000 Fixed some return-checks from choice.. need better ay to handle those.. commit 970d03b19751c5b21c8c157aa95162dd2dad80b0 Author: Adam Dickmeiss Date: Wed Mar 15 09:08:29 1995 +0000 Take care of preferredMessageSize. commit 7f22a88d407609fc8a4f8554ef754dd649145447 Author: Sebastian Hammer Date: Wed Mar 15 08:37:40 1995 +0000 Now we're pretty much set for nonblocking I/O. commit adc5e45a46d9ce4f73370332f6e4c2f81c1d36fe Author: Sebastian Hammer Date: Wed Mar 15 08:37:06 1995 +0000 Fixed protocol bugs. commit 142dc0b64447a929fbd4dd7f9c8ba4c83c107d70 Author: Adam Dickmeiss Date: Wed Mar 15 08:27:15 1995 +0000 PresentRequest changed to return MARC records from file 'dummy-records'. commit a4d2b1d22b135d53d88c96a452a62d3009197d29 Author: Sebastian Hammer Date: Tue Mar 14 16:59:48 1995 +0000 Bug-fixes commit cb589c1cd95b040182aac4fb50d37bbf7107cde2 Author: Sebastian Hammer Date: Tue Mar 14 16:59:38 1995 +0000 Added odr_constructed_more check commit d4a0d41731122cc17df31b8e1957be28188df898 Author: Sebastian Hammer Date: Tue Mar 14 16:59:24 1995 +0000 Fixed OPTIONAL flag in attributeelement commit 231d73232fc9420212ae6889a9e8002d7a124b95 Author: Sebastian Hammer Date: Tue Mar 14 16:59:05 1995 +0000 *** empty log message *** commit 1ff3deef138c1f1af5f435c4931f61e5b1595372 Author: Sebastian Hammer Date: Tue Mar 14 11:30:14 1995 +0000 Works better now. commit 0a3a8b6400167c2dfd6e6b5f135f6ad4783e554c Author: Sebastian Hammer Date: Tue Mar 14 10:27:57 1995 +0000 More work on demo server. commit b3500b4a0d2b4bb25bb6d4e9ab72e0e488655da6 Author: Sebastian Hammer Date: Tue Mar 14 10:27:34 1995 +0000 Modified makefile to use common lib Beginning to add memory management to odr commit b44b4c3587d6a479d12f91c1ce38eaf533fb4980 Author: Sebastian Hammer Date: Tue Mar 14 10:27:12 1995 +0000 Modified makefile to use common lib commit 7e158942eb374e7211dd3dbd834e664c70a2d143 Author: Sebastian Hammer Date: Fri Mar 10 18:22:44 1995 +0000 The rudiments of an asynchronous server. commit e699f6c0dc97950dce23a228eeabc80f17edd6d3 Author: Sebastian Hammer Date: Fri Mar 10 18:22:18 1995 +0000 Just the usual copyright-header. commit eb2d32be86dd9b1db4303f37dcd4bc3b8927e5ad Author: Sebastian Hammer Date: Fri Mar 10 11:44:40 1995 +0000 Fixed serious stack-bug in odr_cons_begin commit 41f4b2c49b60cf5f9ae896b537211ae830c39a55 Author: Sebastian Hammer Date: Wed Mar 8 12:11:59 1995 +0000 Added better error checking. commit a783811c74b0c6c8c8b8d5e77144514af80892d0 Author: Sebastian Hammer Date: Tue Mar 7 16:29:33 1995 +0000 Added authentication stuff. commit 052d8d3106e25de403341929ca7f4241dad875a0 Author: Sebastian Hammer Date: Tue Mar 7 13:28:57 1995 +0000 *** empty log message *** commit 75b13633ae87b4e716c26d2d71a2342fa0be70c7 Author: Sebastian Hammer Date: Tue Mar 7 13:16:13 1995 +0000 Fixed bug in odr_reset commit a372d45e267573f7c0f53759de3db81ec1237383 Author: Sebastian Hammer Date: Tue Mar 7 10:21:31 1995 +0000 odr_errno-->odr_error commit bf3c907b04a3a1dd708f90ce08328014775758af Author: Sebastian Hammer Date: Tue Mar 7 10:19:05 1995 +0000 Addded some method functions to the ODR type. commit 398d5857516b707c1697721ec92bb0ec15619252 Author: Sebastian Hammer Date: Tue Mar 7 09:23:12 1995 +0000 Installing top-level API and documentation. commit c6cd059f7b70a2b12f2239c51bfdf0e30107dead Author: Sebastian Hammer Date: Wed Mar 1 14:46:03 1995 +0000 Fixed protocol bug in 8777query. commit 04cde6d037338d3128c77698d4c8a7f03010db1e Author: Sebastian Hammer Date: Wed Mar 1 08:40:56 1995 +0000 Smallish changes. commit 6c126e94642b41867fb323ff39fded733757a11e Author: Sebastian Hammer Date: Tue Feb 14 20:39:54 1995 +0000 Fixed bugs in completeBER and (serious one in) ber_oid. commit fb2db0abc51ed82583dc4600fd4ff035c96f7d79 Author: Sebastian Hammer Date: Tue Feb 14 11:54:33 1995 +0000 Adjustments. commit 4e87dd57ceafb4c027d9ad6601e187e6e28b5476 Author: Sebastian Hammer Date: Tue Feb 14 11:54:22 1995 +0000 Fixing include. commit 6d0cb38e2fd32c722b0af63ce050ac5c458d849f Author: Sebastian Hammer Date: Fri Feb 10 18:57:24 1995 +0000 More in the way of error-checking. commit 1b06a5c10770ef964044f824a33d4cc8652d8e7a Author: Sebastian Hammer Date: Fri Feb 10 15:55:28 1995 +0000 Bug fixes, mostly. commit 4e215eddb8432b3b39b70a106e2d7f45f3c68211 Author: Sebastian Hammer Date: Fri Feb 10 15:54:30 1995 +0000 Small adjustments. commit 88ad85bd973c764146777e7cfe2e4a56c71994b9 Author: Sebastian Hammer Date: Thu Feb 9 16:02:32 1995 +0000 *** empty log message *** commit d21336d699898344c0af816edf1064474af32b44 Author: Sebastian Hammer Date: Thu Feb 9 15:52:34 1995 +0000 Initial revision commit 10981b2f116449523a9f628c20a78212ce91553e Author: Sebastian Hammer Date: Thu Feb 9 15:51:39 1995 +0000 Works better now. commit aad9a6e6dbceb78f4a125c24c9b93d19f75af361 Author: Sebastian Hammer Date: Tue Feb 7 17:53:43 1995 +0000 Initial revision commit 0dcf720d5b83783f6dba31f44b12513cefdd2f75 Author: Sebastian Hammer Date: Tue Feb 7 17:52:58 1995 +0000 A damn mess, but now things work, I think. commit b40d7c8dfa49bf5e6800688e1dfb1373856796a8 Author: Sebastian Hammer Date: Tue Feb 7 14:13:45 1995 +0000 Bug fixes. commit 779afe2804f2dccc96d311862afceb22f5f3ac70 Author: Sebastian Hammer Date: Mon Feb 6 21:26:07 1995 +0000 Repaired this evening's damages.. commit b0df126f997b4d9f51be961a2fdbd4ebea001b84 Author: Sebastian Hammer Date: Mon Feb 6 16:45:03 1995 +0000 Small mods. commit d092115aeed58ef669c42c9b6d013c424b26684c Author: Sebastian Hammer Date: Mon Feb 6 16:44:47 1995 +0000 First hack at Z/SR protocol commit 82c1521f196b83c0ede4200b21eb25ed86bbf48e Author: Sebastian Hammer Date: Fri Feb 3 17:04:36 1995 +0000 Initial revision commit 32226b4f15d634d5e48b1306aeeb26a370c8f5c5 Author: Sebastian Hammer Date: Fri Feb 3 17:04:31 1995 +0000 *** empty log message *** commit 173d9f50b7a6c63dff6c74dc5c3efe985f75ef39 Author: Sebastian Hammer Date: Thu Feb 2 20:38:49 1995 +0000 Updates. commit a7d28a25277a208edb9c44d124f179cc2be6db70 Author: Sebastian Hammer Date: Thu Feb 2 16:21:51 1995 +0000 First kick. yaz-4.2.30/IDMETA0000755000175000017500000000013511741237671010225 00000000000000DEBIAN_DIST="wheezy squeeze lenny" UBUNTU_DIST="oneiric natty maverick lucid" VERSION=4.2.30 yaz-4.2.30/NEWS0000644000175000017500000034075311741237572010050 00000000000000--- 4.2.30 2012/04/11 Add two new SRU diagnostics: 236: Access to specified database denied 1015: Init/AC: Maximum number of simultaneous sessions for Userid Document the very useful ZOOM-C option "apdulog". CQL to RPN: term may be passed through verbatim. This is enabled with truncation.cql . The assumption being that the term is already CQL. --- 4.2.29 2012/03/20 record_conv: leader spec may be given for marc element. The leader spec is given as attribute leaderspec for element marc. For example to convert a MARC21 record from MARC-8 to UTF-8: record_conv: allow user-XSLT params. For example: record_conv: fix error handling for missing marc charsets. CQL: fix extra terms in wrong order. --- 4.2.28 2012/03/06 record_conv: modify new API for conversion types. The conversion types may be passed in new functions yaz_record_conv_configure_t and yaz_retrieval_configure_t. Removing yaz_record_conv_add_type . Avoid mixed statement/variable declare; fixes compilation with Visual Studio. --- 4.2.27 2012/02/28 Add non-standard SRU diagnostic: 235: "Database does not exist". Couldn't live without it. HTTP 404: "Not found" is just so anonymous. Update SRU to Bib-1 diagnostic maps accordingly. CCL: add two new diagnostics for unsupported masking. The new diagnostics are: "Embedded truncation not supported" and "Single charcacter mask not supported". --- 4.2.26 2012/02/23 CCL: fix use of "term" field in sub queries. Bug introduced in YAZ 4.2.25. --- 4.2.25 2012/01/11 Build YAZ for Ubuntu Oneiric. CCL: allow parantheses for proximity operands. For example CCL query (a) % (b) is now allowed. GFS: fix bend_assoc_is_alive. When cs_get returns 0 the association is marked dead, rather then being destroyed. If not, the session memory is being free'd before the search/scan handler is finished. Also destroy 'request' memory in request_release rather than in various places, which resulted in leaks from time to time. --- 4.2.24 2011/12/21 cql_sortby_to_sortkeys: honor sort prefix. RPN to CQL: always quote resulting terms. For bizarre reasons, JSTOR's SRU server returns 0 hits on ISSN searches unless a CQL term is quoted. The rpn2cql family of functions now always returns quoted CQL terms. Fix CQL to CCL conversion for multiple terms. Add two test cases as well. --- 4.2.23 2011/12/15 Allow =val to be omitted for yaz_uri_to_array. Also, multiple &'s in sequence is treated as one. For example, &&a=b&&&c& is identical to a=b&c= . --- 4.2.22 2011/12/05 Add ZOOM_connection_save_apdu_wrbuf. This function may be used to save APDUs for a connection to a WRBUF. --- 4.2.21 2011/11/23 Fix cql_sortby_to_sortkeys. Completely broken before. Make CCL's @truncation work again. --- 4.2.20 2011/11/09 New ZOOM connection setting: tproxy. It's like proxy, but does not set Z39.50 proxy OID or change HTTP for proxy behavior. Can be used to set resolved address + port for a connection outside ZOOM itself. Fix atoi_n_check digit test. Thanks to Giannis Kosmas for spotting it. --- 4.2.19 2011/11/07 Fix uninitialized variable in Solr spell support (could cause SEGV for SRU response decoding). Error handling for Z_APDU_close uses ZOOM_set_dset_error() to pass back-end's addinfo through into the ZOOM response addinfo. When ZOOM_set_dset_error() is passed an addinfo2 as well as addinfo, they are separated by a colon and a space rather than simply concatenated. --- 4.2.18 2011/10/28 Add support for Solr spell-checking/suggestions through ZOOM. If a Solr target has been configured correctly for spelling-checking and suggestions, these will now be returned on the ResultSet option "suggestions". zoomsh has been extended to show this with the cmd suggestions. --- 4.2.17 2011/09/28 Fix function nmem_strsplit_escape2 which extends nmem_strsplit_escape with a flag whether to substitute escape sequences or not. --- 4.2.16 2011/09/22 Fix nmem_strsplit_escape to substitute escape char properly. New option for zoomsh -e , which makes it abort on first error and return process exit code to indicate success/failure. YAZ options utility supports special option -- which makes all it treat all following arguments as non-options. --- 4.2.15 2011/09/16 Fix yaz_file_path_resolve/yaz_path_fopen/yaz_fopen so that path is not searched if absolute filename is given. Fix conv_xslt() error-reporting when stylesheet is not found. (The value of fullpath is meaningless in this situation.) --- 4.2.14 2011/09/07 Fix problem in CQL sort node creation: un-initialized memory. New ZOOM utility ZOOM_query_sortby2. That takes a strategy parameter: one of "z3950", "type7", "cql", "sru11" or "embed". The "embed" chooses type-7 or CQL sortby depending on whether Type-1 or CQL is actually sent to the target. New sortspec utilities: yaz_srw_sortkeys_to_sort_spec, yaz_sort_spec_to_srw_sortkeys, yaz_sort_spec_to_type and 7yaz_sort_spec_to_cql. rpn2solr supports Z39.58 truncation (104). Thus, CCL truncation mode t=z will make it possible to use both single-character mask (#) and wildcard (?) in CCL . Throw diagnostic for left truncation because that is not supported by SOLR. --- 4.2.13 2011/09/01 Fixes for cql2rpn, cql2ccl and ccl2rpn; mostly in the area of special cases using escapes (\-sequences) and masking. PQF parse fix: A trailing backslash followed by end-of-string (\0) would result in a read one byte beyond string. rpn2ccl may use Z39.50 masking for terms (t=z). ICU check fix. Don't include library -lCrun on Solaris, unless present. ICU check fix: Use --cppflags-searchpath to determine ICU include files; not --cppflags (which seeems like an error in icu-config). --- 4.2.12 2011/08/27 RPM package only cql2ccl: fix conversion of terms: operator characters were not quoted/escaped. --- 4.2.11 2011/08/25 RPM package only ccl2rpn: Conversion to regexp-1 terms (trunc=102). For mode t=x, the CCL parser will map both # and ? to their regular expression quivalents (. and .*). rpn2cql: deal with truncation=102 (regexp-1). And ensure proper quoting of reserved CQL characters. cql2ccl: deal with both * and ? in conversion. Also leave escaped ones as is, so that they are passed through. --- 4.2.10 2011/08/24 ZOOM SRU mode: more aggressive re-connect. Private function prox_unit_name() renamed to yaz_prox_unit_name() and made available as a utility function, declared in rpn2cql_structure() supports proximity nodes (except that the Type-1 proximity node's "exclusion" binary is ignored, as there is no way to express that in CQL). Fixes bug #4564. --- 4.2.9 2011/08/18 Fix SEGV that could occur if set command of zoomsh was given without value (2nd argument). Fix SEGV that could occur if unsupported transport was given for COMSTACK - say https (when SSL was unavailable). Build yaz-url on Windows too. --- 4.2.8 2011/08/11 New utility to get web content. Header is url.h. A command line tool yaz-url is part of the distribution and packages. Fixes for SSL COMSTACK (when gnutls is in use). New functions yaz_base64{encode,decode}. Header is base64.h. --- 4.2.7 2011/08/03 ZOOM C includes HTTP response buffer as additional info if it fails to decode the SRU response. Make wrbuf_json_puts available. --- 4.2.6 2011/07/28 zoom: throw diagnostic for invalid value for option "sru". Before a bad SRU request was sent. Adding new utility wrbuf_vp_puts. Add cclxmlconfig.obj to win/makefile. It was missing completely. --- 4.2.5 2011/07/21 ZOOM HTTP: use absoluteURI's in proxy mode as required by RFC 2616 (HTTP). Fix a bug in handling of cookies. Fix a bug that would occur if proxy + redirect was used at the same time. MARC line mode decoding: be less picky about length given - first 5 digits of header that is. CQL to CCL conversion: deal with CQL proximity (cql_to_ccl function). Changes to decoding of SRU records: a record with recordPacking=xml is modified with a new root element if the recordData contains multiple children elements. This is to make the record XML parseable afterwards. RPN to SOLR conversion: encode special characters. Generic Frontend Server: fix uinitialized member, stepSize. --- 4.2.4 2011/06/21 Fix a bug in SRU decoding of records.. The database records stored had un-initialized memory, but it would only be seen with yaz_record_render and type_spec="ext" . Fix a bug in ccl_qual_dup introduced in 4.2.3. --- 4.2.3 2011/06/17 Add new CCL utility, ccl_qual_dup, which makes a copy of a CCL bibset. --- 4.2.2 2011/06/10 Add new utilities to convert from CQL to CCL . These utilities have prefix cql_to_ccl defined in cql.h. Defensive coding for an off-by-one bug in ucol_getSortKey. This could lead to memory heap corruptions when ICU utilities were in use. --- 4.2.1 2011/06/07 Make compilation work without Libxml2. yaz-client: remove redundant blanks in display of searchResult-1 term hit counts. --- 4.2.0 2011/05/18 CQL: parse CQL sortby spec. The resulting sort spec is stored in the resulting CQL node (tree) in a new node CQL_NODE_SORT. CQL and GFS: add utility cql_sortby_to_sortkeys which converts CQL sortby 1.2 node tree to CQL 1.1 spec. This in turn allows the generic frontend server to only consider srw_sortkeys and support both SRU 1.1 and 1.2. Note that the CQL sortby spec is only converted when the GFS is already converting from CQL to RPN (cql2rpn element). New function nmem_strsplitx. This is like nmem_strsplit but allows us to specify whether to collapse delimitors or not. The existing nmem_strsplit do collapse (collapse parameter = 1). Windows installer: For NSIS, set InstallDir depending on x86/x64. Rename internal func yaz_use_attribute_create. While non-static, this function is not declared in a public header. --- 4.1.7 2011/03/15 Add -lCrun when linking with ICU on Solaris. More quicks character set conversions for OPAC records. --- 4.1.6 2011/03/10 fix problem with record_render: records were converted (character set wise) even if no charset was given. Problem introduced in YAZ 4.1.5. --- 4.1.5 2011/03/08 SRU: add methods for handling DADS SRU-proxy facets. Separate OPAC record character set for ZOOM_record. yaz_record_render allows a character set given as charset=from/opacfrom,to where 'from' is the character set of a bibliographic record, 'opacfrom' is character set of OPAC record and 'to' is the target character set. --- 4.1.4 2011/02/21 yaz-client: show may XML format records. Command show followed by 'format' will format XML records retrieved using Libxml2's xmlDocDumpFormatMemory function. src/stemmer.c: Avoid using unnamed union. It is not supported by some older C compilers. For PHPYAZ: set YAZVERSION, not YAZ_VERSION. --- 4.1.3 2011/01/27 Update yaz.spec to operate on both SLES11 / Centos 5.5. RPM: Release includes 'indexdata' name. Use indexdata in release name so this package can be distinguished from other vendors. yaz-config: Use exec_prefix, libdir, includedir . Use these variables as determined by configure yaz-config: set YAZ_VERSION env. php_yaz relies on it. GFS: Z_PresentStatus_partial_4 for missing record. If bend_fetch handler returns no error and no record, the present request is considered partial (only a subset of the records could be returned by backend), and so it is appropriate to set Present Status to partial-4. --- 4.1.2 2010/11/02 Move yaz-config man pages to section 1. More documentation about SOLR. tcp comstack: change behavior for @-specs (anyaddr). @ listens on AF_INET (IPV4) peers, and @6 listens to AF_INET6 (ipv6) peers. Previously @ listened on AF_INET6 which accepted both IPV4 and IPV6 peers on some Linux systems. However, in general that does not work so YAZ can not rely on that to work. Debian changed behavior in this respect from Debian lenny to Debian squeeze (still testing as of Oct 2010). Refer to: http://www.mail-archive.com/debian-devel@lists.debian.org/msg277726.html zoomsh: remove "debugging" output. Was added by mistake in 4.1.0. --- 4.1.1 2010/10/05 Fix yaz-config output: echo_source not set correctly by configure. --- 4.1.0 2010/10/05 SOLR WebService support for yaz-client and ZOOM. Define record syntax JSON. OID: 1.2.840.10003.5.1000.81.3 . --- 4.0.12 2010/08/17 Z39.50 facet support. Facet specifications are passed for search in other-information with ASN.1 as defined in facet.asn and OID .10.1000.81.5 . Facets are expressed as an Attribute list as known from Type-1/RPN queries. Type 1 is field. Type 2 is sort order. Type 3 is limit (number of entries to get in response). yaz-ztest returns dummy facets if a client asks for them. --- 4.0.11 2010/07/09 CCL fixes: bug 2895 and bug 3539. GR1-display: add comma in display - was removed by mistake in version 4.0.0. Windows installer: bundle MSVCP90.dll - used by icuuc42.dll. SRU: Merge cookies on HTTP redirects (Giannis Kosmas ). --- 4.0.10 2010/06/18 ZOOM C: Add ZOOM_resultset_release. ZOOM_resultset_release releases a result set from a connection. The result set will be on its own thereafter; no operations on it will perform retrievals from a target. Only cached copies are returned. ZOOM C:fix case for HTTP servers responding with Connection:close. Ensure that if there is a current task it is resumed (like fetching more records in a result set) . Bug #3484. PQF parser: use odr_atoi for Odr_int (not atoi) Minor PQF encoding and decoding changes; reformat. PQF decoding: attribute values that contain any non-digits are treated as string attributes (previously decoding only checked for leading character ([0-9]). PQF encoding: attribute string values are not surrounded by double-quotes. --- 4.0.9 2010/05/21 New utility for managing threads - thread_create.h. Add socket pipe utility - spipe.h. The socket pipe has same purpose as Unix pipe . Unfortunately Windows pipes do not work on select/poll - but YAZ' implementation do. Fixes for yaz_cond-functions on Windows 7. DLL export more symbols. zoomsh: show record do NOT render opac. Remove *.la files from Debian and RPM packages. --- 4.0.8 2010/05/11 Debian package libyaz-dev depends on libgnutls-dev again (was removed in YAZ 4.0.6, but due to Libtool it is still needed even though yaz-config do not list libgnutls libs). ZOOM: Use only one WRBUF for returning string results for ZOOM_resultset. Reduces memory usage for ZOOM in general. ZOOM: ZOOM_connection do not use a shared pointer to ZOOM_resultset after ZOOM_resultset is destructed by user. Reverts to YAZ 4.0.4 behavior. --- 4.0.7 2010/05/04 record-conv: fix problem with at least one XSL conversion - due to probably incorrect usage of XML XSL documents. --- 4.0.6 2010/04/29 Fix yaz-config for static mode and the use of SSL (gnutls). --- 4.0.5 2010/04/29 Forward decl timeval struct in mutex.h and gettimeofday.h. yaz-config: fix 'static' mode linking. --- 4.0.4 2010/04/28 Add functions yaz_cond_{create,destroy,wait,signal,broadcast}. These are wrappers for pthreads or Windows. For Windows these are put in a separate DLL: yaz_cond4. libyaz.la (whole source) is compiled with thread. If thread support is enabled enabled, all source of YAZ is compiled with treading support. This allows core utilities such as yaz_log to use thread facilities. Previously (YAZ 3 and YAZ 4 releases), only libyaz_server.la was using thread utilities. This commit moves mutex utilities (mutex.c) from libyaz_server.la to libyaz.la. yaz-json-parse displays leading text until error. --- 4.0.3 2010/04/09 Handle HTTP redirect for SRU GET in yaz-client and ZOOM C. Based on patch from Giannis Kosmas. SRU: no longer URL encode SRU database. The URL for an SRU server is a URL and such is alreeady encoded - at least when given with leading http:// or https://. This reverts behavior to YAZ 3.0.50. Support for new MARC XML notation TurboMARC which like MARCXML is a complete representation of MARC/ISO2709.. This one, however, is more compact and allows for faster processing with XSLT. TurboMARC can be used in the marcdisp.h API, from the yaz-marcdump utility and from the API of ZOOM C. yaz-ztest can be configured - via the database - to perform certain delays when it performs operations search, present and single record fetch. This allows testers to make yaz-ztest act as a real or even slow Z39.50 server. Refer to the yaz-ztest man pages for details. --- 4.0.2 2010/03/09 wrbuf_destroy allows NULL WRBUF passed to it. Fix CCL qualifier aliases (did not work since YAZ 2.1.56). Add ZOOM_connection_close. No fixed size buffers for ZOOM shell - bug #3257. tstodr: make it work on s390 platform. New icu iterator-functions. The new icu_iter-functions makes it possible to use ICU chains from many threads. yaz-client: better syntax check for show command. --- 4.0.1 2010/01/26 New glob file pattern utility. Like POSIX glob. For Windows too. Refer to yaz/file_glob.h. New simple local-file XML include facility which allows file glob-patterns. Refer to yaz/xml_include.h. Utility yaz-json-parse which parses JSON and demonstrates the JSON parser API. ZOOM_record_get supports new parameter "format" which makes it format XML record content. Fix JSON parser WRT start symbol. The start grammar symbol (referred to as JSONText in ECMA-262) is JSONValue, not JSONObject. --- 4.0.0 2010/01/20 Windows binaries for YAZ now compiled with Visual Studio 2008 (VC9). Older versions of YAZ was compiled with Visual Studio 6.0 (1998). Update so/DLL to version 4. Windows version builds YAZ4.DLL. POSIX/Unix builds .so with major version 4. Remove old LOG_-defines from log.h. They have been obsolete and undefined by default for the last 5 years. Odr_int is now of type 'long long'. Used to be 'int' in YAZ 3 series. GFS: Remove socket (int *fd) from search_rr handler. The socket descriptor ptr is a facility that allowed a search handler to supply a socket which would serve as a callback - when search was complete. This facility has now been in use for years. COMSTACK API changes: cs_stackerr, cs_addrstr. COMSTACK method cs_stackerr removed. It is not implemented by tcpip or unix COMSTACK, perhaps for ISO SR which was removed 7 years ago. COMSTACK macro / method cs_addrstr now returns 'const char *' rather than 'char *. The returned string is read-only and should not be modified by applications. COMSTACK cs_close is now a void function - it no longer returns int. No applications check for the value and the implementations has always returned 0. ZOOM: use size_t for scan hit counts and str size. Functions ZOOM_scanset_term and ZOOM_scanset_display_term have changed, so that occ (hit count) and len (string length) are now of type size_t pointer rather than int pointer. This is to be able to represent large hit counts and to also just to use the proper type for string length (strlen result). New JSON parser. Refer to include/yaz/json.h . WRBUF API changes.. For size parameters for WRBUF size_t is now used .. Used to be int in some cases. Many wrbuf_-functions used to return an int indicating some length.. These return values were never used. And so they are now void. ODR: odr_malloc, odr_total now takes size_t for size. clone_z_type: fix leak; occurred for encoding failures. --- 3.0.52 2009/12/03 tcpip comstack: fix use of uinitialized variable in cs_straddr. This bug was introduced in 3.0.51. --- 3.0.51 2009/12/02 tcpip comstack: Remove TCP receiver buffer optimizations for Solaris. tcpip comstack: fix leak for getaddrinfo. Encoding of SRU database is performed by yaz_encode_sru_dbpath_odr or yaz_encode_sru_dbpath_buf. Now used by yaz-client and the ZOOM API. Decoding of SRU "path" database is performed by private function yaz_decode_sru_dbpath_odr . This in turn is used by yaz_srw_decode and yaz_sru_decode in server applications, GFS, yazproxy, metaproxy. yaz-client: honor base command for SRU. Change when database setting is applied for SRU and ensure it is kept when a connection is reset. Change also the way errors are displayed or SRU (decoding of packages). --- 3.0.50 2009/11/02 Add support for extra request / response data for SRU codecs and GFS. The Z_SRW_PDU structure has two new members extraResponseData_{buf,len} for extra data response buffer and length. For the GFS, both request and response data (XML) is carried in extra_args and extra_response_data for the search handler. Patch by Ko van der Sloot. ZOOM: For queries that cannot be converted to the specified rpnCharset, ZOOM now returns a diagnostic on the client-side ('invalid query' / 10010). This fixes bug #2113. yaz-client fix: If cmdfile is passed to yaz-client (option -f) and that cmdfile included a 'quit' command that would result in a memory violation. --- 3.0.49 2009/10/01 Make a number of functions defined in xmlquery.c static. These have never been declared in a public header file (yaz/xmlquery.h) and was made public by mistake. Improve speed of character conversions (iconv utilities). This makes conversions from MARC-8 faster. ZOOM_record_get returns 0 pointer if a MARC record can not be decoded - unless type desired is "raw". This will prevent type "xml" from returning ISO2709 .. Which obviously can not be XML parsed. Fix memory leak in ZOOM that would occur if option apdulog was used on a re-used connection. Frontend server logs HTTP requests. Frontend server now sends Z39.50 close when it times out (sesssion has been idle for too long). Versions 2.0.30 and earlier also sent close. But due to a mistake this was disabled in all versions after that, i.e. the server would just close the socket immediately. yaz-client emits a better message when receiving an unrecognised userInformationField. Skip zero-length subfields when decoding ISO2709. This rare case happens if a record has two FS characters in a sequence. Without this patch there would be a reference beyond char array in using_code_len fragments in marcdisp.c. Fix yaz-marcdump error that would occur if option -n was used (bug #3028). --- 3.0.48 2009/08/28 The show command offered by the zoomsh command now takes a 3d optional parameter type which is what is passed to ZOOM_record. If the type argument is omitted, "render" is used. RPN to CQL conv may use USE string attributes (bug #2978). MarcXchange NS is now info:lc/xmlns/marcxchange-v1 . --- 3.0.47 2009/07/08 Function yaz_xml2query allows a diagnostic element in the PQF XML representation .. diagnostic@code and diagnostic@addinfo is diagnostic code and additional info respectively. The BER BOOLEAN is now the integral type Odr_bool which still happens to be an 'int'. The BER INTEGER which used to be a plain 'int' is now typedef'd to Odr_int. This is still an integral 'int', but it may be changed to 64-bit via a one-liner in nmem.h (NMEM_64=1). The documentation, ASN-1 compiler as well as programs has been updated to use the new types. --- 3.0.46 2009/06/08 zoom: ZOOM_record_get now renders OPAC records when type=xml. Previously only the bibliographic record was rendered. For type=opac, an OPAC record is only returned if it is present. iconv: small fix for encoding of advancegreek. yaz-client: avoid double display of SRU/SRW records (bug #2798). yaz-client: option auto_reconnect=on really reconnects. yaz-client: fix bug #2770 - avoid length limit for auth parameters. server: avoid null ptr ref for for yaz_poll errors. build: fix RPM build for RHEL 5.3. comstack: prefer IPV6 addresses over IPV4 - should refix bug #2350 --- 3.0.45 2009/03/31 Fixed bug #2709: TCP connect returns Invalid argument. Fixed compilation for mingw. Honor charset for raw records (ZOOM_record_get). Fixed use of errno for threaded mode that was seen on Solaris 10. Fixed argument passing with blanks in value for Windows Service. Disable YAZ' own log rotate by default (no 1 GB limit). The variable l_max_size which specifies the log file limit is set to 0 (DISABLED): This is due to the fact that YAZ is most often deployed using logrotate. Also YAZ can not perform log rotate because of unsufficient permissions (setuid). --- 3.0.44 2009/02/17 List supported encodings in man page for yaz-iconv. Fixed missing SSL libs for --libs output Re-established OID record syntax application-xml. Nobody should use it but we don't want to change soname because of this symbol being absent. --- 3.0.42 2009/02/02 YAZ' RPM spec works for both SUSE Linux Enterprise and RedHat Fedora. Added member named_result_sets for init handler struct for the GFS. This allows a server to disable named result sets. Removed OID record syntax application-xml. Added support for rule-based transliterator for ICU wrapper of YAZ. Fixed bug #1902: yaz-icu XML output. Make YAZ checks Emacs friendly. BITSTRING value shows value. Bug #2346. ISO2709 decoding: skip control characters from indicator data. Omit sort key by default in yaz-icu's output. Allow combined single char options (again) for YAZ' options function. Utility yaz-marcdump got option to display YAZ version (-V). Allow YAZ to use ICU 3.4. Added new ICU test case which illustrates removal of diacritics. --- 3.0.41 2008/12/29 Fixed Fixed test that makes VERSION_SHA1 appear on dist versions too. --- 3.0.40 2008/12/29 For configure, using option --without-xml2 also disables Libxslt/Libexslt support. Fixed bug #2352: yaz-marcdump crashes for certain record. Added man page 'bib1-attr' which includes list of common Bib-1 attributes. Added support for Danmarc2 to UTF-8 conversion. Added support for ISO5426 to UTF-8 conversion. zget_InitRequest/zget_InitResponse returns GIT SHA1 hash as part of implementation version. Function yaz_version returns GIT SHA1 hash for parameter sha1_str. --- 3.0.38 2008/11/10 ZOOM C now only fires one ZOOM_EVENT_SEARCH per search-task. Previously, ZOOM_EVENT_SEARCH was fired for each searchRetrieve Response received. ZOOM C now interprets databaseName option for ZOOM connection as path (SRU "database"). Windows version bundled with Libxml2 2.7.1 / Libxslt 1.1.24 / ICU 4.0. Fixed CCL to RPN/PQF conversion which could result in invalid PQF. Dummy Libxml2 types no longer defined in headers of YAZ'. Fixed memory violation for ZOOM C - could occur when SRU diagnostics was received. --- 3.0.36 2008/09/26 Various ODR chapter fixes. Windows version uses libxml2 2.6.32+, libxslt 1.1.23+ and ICU 4.0. Added missing source for Windows compilation, mutex.c. Fixed compilation of YAZ for Visual Studio 2008. Bug #2256. For SRU connections in ZOOM all records up to "count" are now fetched. Fixed crash in generic frontend server (and yaz-ztest) which occurred in Windows due to bad error handling for Libxml2. Added facility for sending arbitrary records (ASN.1 any) using ZOOM C's Extended service update. Patch by Sam Reynolds. New options for ZOOM C's connection, logapdu which makes ZOOM log APDUs. --- 3.0.34 2008/06/18 YAZ uses GNU TLS without the OpenSSL compatibility wrapper. --- 3.0.32 2008/06/12 Fixed memory violation that could occur when decoding UTF-8. This bug was only present in 3.0.30 of YAZ. --- 3.0.30 2008/06/06 Implemented SSL sockets using GNU TLS. OpenSSL is still supported, but GNU TLS is used by default (if found). yaz-ztest returns OPAC records if a client asks for OPAC. Improved speed of MARC-8 encoding. Added support for lossy and loss-less MARC-8 encoding. Changed yaz_record_conv_record to be reentrant for XSLT conversions. Added new Windows Service wrapper (sc). yaz-client's itemorder command may now send a file. Fixed yaz-marcdump to allow the use of NS prefix for record element. Added new function yaz_log_xml_errors. Allow (but warn) unknown XML attributes in MARCXML parsing. Handle G1 sequneces in MARC-8 decoding. Bug #2115. The UTF-8 to MARC-8 conversion now uses a different set of characters for Greek symbols. Bug #2120. --- 3.0.26 2008/02/21 Added yaz_daemon (daemon.h). Fixed bug #2068: pkg-config trouble Fixed bug #395: ZOOM_record / OPAC record encoding problems. --- 3.0.24 2008/01/28 Document --with-xml2 option. Added OPAC XML XSD (etc/opacxml.xsd). Allow glob mask for name attribute in retrieval element for the generic frontend server's retrieval facility. Changed yaz_poll_poll to return yaz_poll_except for all returned events except POLLIN/POLLOUT. Fixed error handling in cs_listen. Bug #2037. --- 3.0.22 2008/01/20 Fixed version in yaz/yaz-version.h. Fixed bug #2027: Crash when closing connection. Changed configure so that ICU support is only enabled if only ICU and Libxml2 is available (because the ICU chain is XML based). --- 3.0.20 2008/01/15 YAZ now makes ICU utilities for Windows. A separate DLL, yaz_icu3.dll, is built. Only this DLL depends on the ICU runtime. yaz-ziffy is no longer part of YAZ. It is distributed separately by Index Data because ziffy's license is GPL2 rather then 'Revised BSD'. Changed license of CCL module to 'Revised BSD'. After consultation with remaining members of the original EUROPAGATE consortium, we are re-issuing the CCL module without a separate license. The software was developed by Index Data as part of a research project. The special license was included to help feed usage information back to the project consortium to support project evaluation. At this time, the project consortium has long-since disbanded, and the majority of the original principals have retired. At the same time, we have significantly modified the software during the following years, to the point where very practically no original code remains. To simplify re-use of the software, we have contacted those members of the consortium who could be reached, and agreed to re-issue the module as a proper part of the YAZ package. Tcl scripts uses /usr/bin/tclsh as preferred shell. CQL closer to being version 1.2 compliant. CQL also allows free-form terms, such as 'title=a b', and thus, make the CQL parser more CCL-like and user-frendly. Fixed bug in ZOOM_options_getl WRT setting of parameter lenp. This bug could make Extended services handling crash in the ZOOM layer. This bug was only present in YAZ 3.0.18. --- 3.0.18 2007/12/19 ziffy uses YAZ' options rather than getopt; getopt is unavailable on some systems. yaz-marcdump reads and writes collection wrapped records. Handle OPAC for record conversion module. Fixes for ICU wrapper. Allow ICU libs to be controlled with --with-icu . --- 3.0.16 2007/11/12 Added yaz_poll which is a wrapper for select/poll. When poll is available and non-buggy, it is used, by yaz_poll . This allows more than 1024 sockets to be in use. Added ICU wrapper library which exposes ICU http://www.icu-project.org/ functionality through an XML based configuration (ICU chain). This system is useful for search facilities such as Pazpar2 and Zebra that needs to perform tokenization of indexed material. The ICU code in a separate library libyaz3_icu.a. Added HTTP tunnel facility for COMSTACK, bug #1752. This is a facility that allows a Web proxy, such as squid, to tunnel Z39.50 traffic. This facility is "transparent" to must applications using YAZ. It's enabled by using pseudo transport connect: followed by the proxy address, followed by command, then follwed by he regular "virtual" addresss. For example, connect:webproxy.com:3128,tcp:z3950.loc.gov:7090/voyager . More MARC-8/UTF-8 conversion fixes. Bugs #1666, #1667, #1778. --- 3.0.14 2007/09/21 Fixed bad memory reference in ZOOM_record - cuased by member not being initialized. This was a problem only in YAZ 3.0.12. Fixed bug in conversion from MARC to XML: Non-XML characters in control fields were not removed. Changed the way C code is generated from codetables.xml. Made a MARC-8 conversion trie for each characterSet section rather than codeTable. This is ensure the code can deal with G0/G1 sequences. Use of a newer version of codetables.xml from Larry Dixson, LOC. Bug #1464. --- 3.0.12 2007/09/12 ZOOM C now handles SRU surrogate diagnostics (i.e. errors returned from ZOOM_record_error). ZOOM C function ZOOM_record_get returns record schema for type="schema". Implemented HTTP Basic authentication to SRU/GET, SRU/POST and SRW requests. Added new ZOOM C connection option 'sru_option' which specifies SRU version. Better SRW-to-Bib-1 diagnostic mapping. ZOOM C and yaz-client announces SRU version 1.2 by default. yaz-client 'sru' command may specifiy both SRU version and transport (SOAP, GET or POST). Fixed in yaz_sru_decode to allow other version than 1.1. --- 3.0.10 2007/08/22 Added support for SRU scan for ZOOM. Added support for the use of the older versions or Extended Service Update in ZOOM. To faciliate this, an option "updateVersion" may be set to the version , 1=first, 2=second, 3=third. The third version is what ZOOM C has used so far. And that, obviously, is the default. Added support for CCL queries in Z39.50 queries sent to the GFS (and therefore in Zebra and in SimpleServer-based applications). The new element in a GFS configuration file, if present, names a CCL qualifier file used to transform incoming CCL queries into Type-1 RPN, which is passed into the back-end search callback function. Added support for HTTP Basic authentication in clients: the SRU/W codec encodes the username/password elements of the PDU structure appropriately, and these may be set using the "user" and "password" options in ZOOM-C applications (the same options that are used for Z39.50 authentication). --- 3.0.8 2007/06/25 Fixed bug #1208: SSL appears to be broken in ZOOM. Fixed bug #1206: Libxml2 include path weirdness. Added oid_name_to_dotstring. Allow elementSetName to be specified for ZOOM C record update. Allow waitAction to be specified for ZOOM C based for Extended Services. Fixed NULL ptr reference bug in yaz-ztest - caused by omitted record syntax OID. Bug introduced in YAZ 3 series. Updated WIN32 build to include Libxml2 2.6.28 / Libxslt 1.1.19. --- 3.0.6 2007/06/06 Fixed bug #1157: yaz-client does not read .yazclientrc from current directory. yaz-client now reads commands from file given by option -f if specified; then tries to read .yazclientrc in current directory. Failing that, it reads .yazclientrc from user's home directory. Added support for correlationInfo Note and ID for Record Update via ZOOM C. Added yaz-client command querycharset which specifies character set for query terms for Z39.50 RPN queries and Z39.50 Scan Requests (termListAndStartPoint). Charset ISO5428:1984 is an alias for ISO5428-1984. Implemented a way to perform scan in a result set using Z39.50. This is achieved by attaching the result set name in the characterInfo (type InternationalString) of OtherInformation in the Scan Request PDU. The result set is identified in the otherinformation by the new OID: USERINFO, Z3950_PREFIX.10.1000.81.4, "Scan-Set This allows for scan in result set and faceted search . Zebra did some of this in the APT term using attribute type 8 and value being result set. Using the OtherInformation approach for this is cleaner and easier to work with in proxies and the like. This facility can be used in yaz-client using new command setscan which takes a result set as first argument, start position (APT) as second. Changed decoding of SRU XML packed records to deal with servers that have recordData with XML data with multiple root nodes. Also make comparison for recordPacking case insensitive. Again, one server returns "XML" where others return "xml". For SRU responses allow Content-Type application/xml as well as text/xml. --- 3.0.4 2007/05/21 Fixed bug in character set conversion of BER strings. Bug introduced in 3.0.0. --- 3.0.2 2007/05/08 For OIDs use Odr_oid type everywhere, i.e. do not assume Odr_oid=int. For OID class, use oid_class consistently. Fixed external handling for SUTRS and Explain records (bug appeared in 3.0 series). Added partial support for ISO5428-1984, which is the "Greek alphabet coded character set for bibliographic information interchange". By Giannis Kosmas. Added documentation on new OID API. --- 3.0.0 2007/05/02 Changes to generic frontend server interface: added new member 'query_charset' for bend_initrequest structure. A backend init handler should set this member to its native character set for query terms. When defined, the frontend server logic will announce this character set to a client if the negotiationModel bit is set by the client. All server implementors are encouraged to specify this. If a backend server does not specify this a warning is issued using yaz_log(YLOG_WARN,..). Added CCL utility to remove terms (stop words) from resulting RPN tree. This is handled by functions with prefix ccl_stop_words_ . New ZOOM C option, "rpnCharset", which allows client-side conversion of terms in RPN queries. Clean-up the CCL API. Moved some internal structures from ccl.h to private header cclp.h. Changed ccl_parser_create so that a Bibset must be supplied. Removed tokenize API from ccl.h - including ccl_parser_find. This is replaced by ccl_parser_find_str which takes a string instead. Split YAZ library into two libs : libyaz.la and libyaz_server.la. libyaz.la is the core of YAZ except the generic frontend server and does not depend on POSIX threads anymore. libyaz_server.la is the generic frontend server facilities and uses POSIX thread functionality if available. The libyaz.la no longer depends on POSIX threads because the number of global structures is limited. NMEM no longer re-uses blocks between threads ; it simply free's memory immediately but allocates in "large" chunks as usual. We don't expect any performance penalties because of this. The yaz_log system is still using a global log_level so caution must be taken when modifying it with yaz_log_init_.. + yaz_log_mask_str. This, however, should not cause any trouble because these functions are called during initialization of application code anyway. `yaz-config --libs server` returns libs for server applications; `yaz-config --libs` returns libs for non-server applications. New OID database - with public definitions in oid_db.h. Removed old OID database including the head oid.h and definitions such as enum oid_value and struct oident. The new OID database uses the same string names as before but the 'protocol' is gone. There are now only two representations raw OID (int *) and string. Functions with prefix yaz_string_to_oid converts from string to OID; functions with prefix yaz_oid_to_string converts the other way. Change to emit_term() in CQL-to-PQF query translation: when a term has the /regexp relation modifier, do not process it for leading and trailing "^" and "*", which have quite different meanings in regular expressions. Attempted fix of bug #976: Segfault in yaz_iconv. The yaz_iconv function write handlers no longer carries a 'last' parameter. This will make yaz_iconv flush "less" characters. A flush is performed by call to yaz_iconv(cd, 0, 0, &outbut, &outbytesleft) . Definition of wrbuf_diags moved to querytowrbuf.h. Function wrbuf_put_zquery removed, because function yaz_query_to_wrbuf does the same. API changes to WRBUF. wrbuf_free removed; replaced by wrbuf_destroy. And wrbuf_puts no longer appends '\0'. Use wrbuf_cstr to get C-string out. Deprecated MARC utility functions removed. Changed prototype of yaz_marc_decode_buf: const char for result and size_t for rsize. Branch split: YAZ_2_1_55_branch --- 2.1.54 2007/03/16 Fix to ZOOM-C so that transparent reconnection is properly handled on connections that are in asynchronous mode. Fixed compilation on OpenBSD 4.0. Large strings in GRS-1 records are now properly displayed in yaz-client. Added character conversion support for "advancegreek"; based on patch from Giannis Kosmas. Fixed yaz_iconv to return YAZ_ICONV_EINVAL if an incomplete MARC-8 combo sequence is met. Before the error was not set so it would be unknown. Adjust yaz-marcdump MARC reader so that it skips until record separator is read --- 2.1.52 2007/03/07 ZOOM-C: Removed hardcoded limit of 1024 sockets in ZOOM_event_sys_poll(). Note that ZOOM_event_sys_select() still has the limit due to the fixed-size fd_set structure used as a bitmask for the FDs to be selected on. Using ACX_PTHREAD macro to check for POSIX threads. Fixed have-vsnprintf check. --- 2.1.50 2007/02/23 Fixes for configure on BSD. Bug #900. Added snprintf/vsnprintf wrappers for systems that don't have limits (heavens forbid). Fixed bug in ZOOM-C's event and task handling. If a ZOOM task was created before all previous tasks were completed and removed from the task queue, the new task could be removed by a mistake. Fixed bug #615: Document retrievalInfo facilities for Frontend Server. Implemented pass-through CQL-to-PQF conversions. Bug #861. Fixed bug #832: Problem with MARC/charset in yaz-client. Fixed bug #668: save command line history for yaz-client. Fixed bug #830: pkg-config support. --- 2.1.48 2007/01/23 Extended ZOOM result set options with two options that may be read by a client: resultSetStatus and presentStatus with values as specified for the ASN.1. See: http://www.loc.gov/z3950/agency/markup/04.html#Search-status Fixed bug #827: Using SSL fails on Debian etch. Fixed bug #826: Weird looking chars for set of MARC records. Implemented alternative Item Order package for ZOOM. If option "doc" is set, that is treated as an ItemOrder with itemRequest being an XML document external. The value of "doc" is the content. Extended the GFS search facility. New member of bend_search_rr 'estimated_hit_count' signals that hits is known to be an estmate (higher or lower than real hit count). New member 'partial_resultset' signals that the search was partial (hit count is lower or equal than real hit count). For Z39.50, the information is stored in resultSetStatus member of SearchResponse APDU. For SRU, the information is signalled via SRU diagnostic 59: "Result set created with valid partial results available". Switched from jade/pdfjdaetex to dblatex for Docbook documentation in PDF. --- 2.1.46 2007/01/13 Implemented bug #806: Deal with HTTP clients sending LF in HTTP headers. Added ZOOM_connection_peek_event. Implemented Generic select hook for ZOOM (bug #803). This is achieved with the following new functions: ZOOM_event_nonblock, ZOOM_connection_process, ZOOM_connection_get_{socket,mask,timeout}, ZOOM_connection_fire_event_{timeout,socket}. The existing blocking event handler, ZOOM_event, is a wrapper for the + blocking ZOOM_event_sys_{poll,select}. Implemented function ccl_xml_config which parses XML version of CCL configuration (bug #798). Fixed bug #797: yaz_marc_write_xml does not honor character conversion. Added timings utility (yaz/timing.h) --- 2.1.44 2007/01/03 Added yaz_marc_write_xml which creates MARCXML/MarcXchange record as Libxml2 tree. Fixed bug #779: Rotation of apdu.log fails. Fixed for character set conversions: Unicode to MARC-8 conversion for certain less preferred UTF-8 sequences. Honor G1 set in MARC-8 decoding. --- 2.1.42 2006/12/17 Fixed bug #775: char conversion does not handle Alternative UTF-8 sequences. Implemented function yaz_marc_read_line which parses MARC line format records. There is a wealth of formats out there. So far, this function reads line records produced by yaz_marc_write_line. yaz-marcdump's options -x, -X, -I, -e have been replaced with the more generic and easier to remember(!) options: -i format and -o format which specifies input format and output format respectively - where format is one of "marc", "marcxml", "line", "marcxchange". Added 'check only' option for MARC utilities. Option -n for yaz-marcdump does not print anything except warnings for records. For yaz-marcdump, added support for MARC split into files (-s) with a given chunk size (-C). Changed the SRU update structures and codecs to reflect the SRU pre 1.0 spec, at http://www.loc.gov/standards/sru/record-update/ This has changed the binary layout of the following structs: Z_SRW_extra_record, Z_SRW_updateRequest, Z_SRW_updateResponse and bend_update_rr . Patch by Ko van der Sloot. Added GFS utility function bend_assoc_is_alive which returns 1 if association is still alive (client is connected); 0 otherwise (client closed connection). This allows busy servers to stop working for impatient clients. Added ziffy: the promiscuous Z39.50 APDU sniffer. until now, ziffy has been a separate piece of software. This version of ziffy has been modified to fit with YAZ. ziffy is copyright Rocco Carbone and covered by GPL v2. Fixed bug #740: Handle SRU records referring to xmlns's outside recordData. Fixed bug #722: Allow Z39.50 Init Options to be specified / retrieved. Client code may now interrogate options such as "init_opt_sort" to find out whether the server claims to support various options. --- 2.1.40 2006/11/27 Added utilities yaz_{set,get}_esn to set/get element set name from record composition. Removed the build of libyazthread.la. The libyaz.so is the threaded version of YAZ and has been so since YAZ 2.1.10. Implemented ZOOM_record_error which returns error information for record (surrogate diagnostic). --- 2.1.38 2006/10/31 Updates for SRU Update by Ko van der Sloot: 1. Changed name from "operation" to "action" 2. Fixed that that "recordIdentifier" was called "recordId". Kept the old versions in the code, marked as 'backward compatible'. 3. Added diagnostics for SRU Update. Fixed bug #709: Records are fetched in wrong format when tasks are queued. Fixed bug #707: CQL->RPN ignores lines with leading spaces. Fixed bug #706: XML hex encoding UTF-8 chars out of range 0-255. For GFS, fixed problem with SRU diagnostic 'First record position out of range' being issued for 0 hits. zoomtst10 part of Windows Build. --- 2.1.36 2006/10/13 Implemented yaz_filepath_comp which splits a path into file path components (required by Zebra 2.0.3+). Change wording of YAZ license to the 'Revised BSD License'. YAZ has used a BSD inspired license until now so this should not have any real impact on anybody. See http://www.opensource.org/licenses/bsd-license.php Fixed bug #687: Missing log lines. Fixed bug #678: CQL to PQF translation does not preserve double-quote escaping. Fixed bug #689: SRU diagnostics to be added. Implemented new ZOOM function, ZOOM_connection_is_idle, which checks whether a connection is idle (no more work do do). --- 2.1.34 2006/10/04 Change type of optval from long to int for invocation of setsockopt with the SO_REUSEADDR option. Thanks to Ateeq A. Altaf, Talis. Added support for specifying the max log file size for the Generic Frontend Server. The size is given with option -r. --- 2.1.32 2006/09/21 Fix problem introduced in YAZ 2.1.28 WRT unix sockets in the ZOOM code. --- 2.1.30 2006/09/17 Fixes for getaddrinfo use, Bugs #655 + #660. These bugs were introduced in YAZ 2.1.28. Fixed bug in Generic Frontend Server that could cause a server to stop accepting new connections. Bug only seen on dual CPU Windows 2003 server. For the generic frontend server, the maximum record size is used as maximum size of incoming packages (SRU + Z39.50). The value until was previously only used in Z39.50 Init negotiation and, later, in a session controlled sizes of records returned. This is controlled using -k option. It can be specified, per server, with element maximumrecordsize in YAZ' GFS XML config. --- 2.1.28 2006/09/04 TCP/IP comstack uses getaddrinfo now to resolve names. It should be IPV6 friendly now. Fixed bug #644: Using Non Reentrant gethostbyname causes SIGSEGV. New option for yaz-marcdump -lpos=value which allows setting a portion of MARC header to a certain value. Fixes for MARC generation when encoded as MARC-8 (bug 642, 643). ZOOM-C reads option extraArgs. If set the value of extraArgs is appended to SRU URI (POST/GET). Value must be URL encoded, such as x-id-a=v1&x-id-b=v2 . --- 2.1.26 2006/08/15 Fixed problem with SRU mode type (soap, get, post) for yaz-client and ZOOM-C. Fixed problem another problem with ZOOM_EVENT_RECV_RECORD . Bug #626. --- 2.1.24 2006/08/08 Fixed MARC ISO2709 encoding routines to deal with character set conversion. Minor changes to GFS logging. Database included in search request log line. Fixes for ZOOM-C: event ZOOM_EVENT_RECV_RECORD was not generated for cached/multiple records. Shared libraries are built by default on Unix+configure. Changed cql2pqf transformation to use a different evaluation order. The new order is: always, relation, structure, position, truncation, index and relationModifier. Old order was: always, relation, relationModifier, structure, index, position, truncation. Note that the the latter ones override former ones for identical attributes.. The new scheme means that it is possible to override any existing attribute with a relationModifier. And also that it is possible to override everything for the index rule (except the ones listed in relationModifier). No order is perfect but this one, we believe, covers more real cases.. The "always" should have been called "default", since the attributes there can be overridden with all the rest. For Libxml2 and friends, YAZ defines YAZ_HAVE_{XML2,XSLT,EXSLT) in the compilation phase, but also for yaz-config --cflags output. This allows us to have public headers with Libxml2 stuff in them . It should also, eventually, make Libxml2 checks redundant in packages using YAZ, such as yazproxy. --- 2.1.22 2006/06/15 Changed SRU update structure bend_update_rr so that SRU diagnostics are stored in uri, message and details.. Previously diagnostics were stored in errcode, errstring. Patch by Ko van der Sloot. Breaks binary compatibility.. but he's probably the only one affected, so. Added support for CCL, compiled on the client side, in ZOOM-C. This is invoked using ZOOM_query_ccl2rpn() with the CCL configuration as input; the resulting query objects can be used for for searching with ZOOM_connection_search() and scanning with ZOOM_connection_scan1(). YAZ' configure searches for OpenSSL by default. SSL comstack uses SL_CTX_use_certificate_chain_file rather than SL_CTX_use_certificate_file. See http://lists.indexdata.dk/pipermail/yazlist/2006-June/001615.html for more info. Thanks to Ko van der Sloot. --- 2.1.20 2006/06/02 Bug #600: SRU GET, POST support for yaz-client. Introduced command 'sru' which selects method SOAP/GET/POST. Allow missingValueAction to be specified for the sortspec string - function yaz_sort_spec. By default, the missing value action is null. Use ! to specify "abort". Use = followed by stringvalue to specify default value. Ensured that Present-handler (if defined) is called in GFS before any call to fetch-hhndler. This now includes piggy-backed presents as well as SRW/U searchRetrieve requests. Documentation for YAZ is now based on the Docbook XML/XSLT using xsltproc + N Walsh's stylesheets. It means that the CVS version of YAZ is no longer depending on jade/openjade or docbook-to-man scripts. PDF is no longer part of the distribution - but can optionally be made using DSSSL/jadetex or FOP. Added retrieval handling support in Generic Frontend Server to support conversion between MARC/XML as well as XSLTtransforms. See etc/yazgfs.xml for an example. Added Authentication support to Generic Frontend Server in SRU mode. Authentication using HTTP Basic is supported, as is the use of 'x-username' and 'x-password' parameters in the request itself. Added support for a new character set MARC8s identical to MARC8 except that it converts combined characters to single Unicode characters in the Latin-1 range (when possible). --- 2.1.18 2006/04/24 ASN.1 compiler 0.4: generates brief Doxygen file header for generated .h/.c files. Utility yaz_iconv now supports conversion to MARC-8. New facilities for the MARC module. The reading - and writing of content are separate methods for the yaz_marc_t handle. The following read functions are available: yaz_marc_read_iso2709 (Reads MARC in ISO2709 format), yaz_marc_read_xml (reads MARC in MARCXML/MarcXchange format). Write functions have prefix yaz_marc_write_.. The existing utilities yaz_marc_decode_wrbuf and yaz_marc_decode_buf are still available. Removed support for OAI-MARC and simplexml (not the simplexml from PHP5). Added a new ZOOM event type ZOOM_EVENT_END which signals no more events to be returned for this connection. --- 2.1.16 2006/03/31 Allow multiple languages and charsets to be specified with yaz-client. Each item must be separated by comma (NO BLANKS). E.g. negcharset iso-8859-1,utf-8 Translation of proximity nodes from CQL into PQF now works. Moved to automake 1.8, 1.9. Added function yaz_log_set_handler which allows a log handler to be installed. This handler will be called for all log messages. Output to file is also produced; but that can be disabled by passing NULL fname to yaz_log_init_file. Fixed another problem with MARC-8 -> ISO-8859-1 conversions. Bug #537. For SRW (including GFS), accept application/soap+xml as content-type for SOAP msg. For GFS in SRU mode, an empty stylesheet in SRU URL (&stylesheet=&) produces NO stylesheet reference even if a default stylesheet is specified in GFS XML config. --- 2.1.14 2006/03/14 Updated Windows package to include yazd.dll + yazd.lib for the Development component. If the environment variable YAZ_LOG is set, then it is used as a string indicating the default level of logging to use if not overridden by calls to yaz_log_init() or yaz_log_init_level(). If it's not defined, then the manifest constant YLOG_DEFAULT_LEVEL is used as before. So, for example, to omit warnings from YAZ logging, export YAZ_LOG=-warn cql_transform() now map structure and other attributes before indexes, so that index-specific structures and other attributes can override defaults. So now a combination of mapping specifications such as: structure.* = 4=1 index.dc.date = 1=date-modified 4=5 does the right thing. cql_transform() now also respects the "always" mapping specification, which establishes an initial set of attributes to be used for all terms except where overridden by more specific attributes associated with the index, relation or modifier. Added SRU-GET and SRU-POST support for ZOOM C. Option "sru" specifies which mode to use; one of "post", "get" or "soap" (SRW, default). Fixes for yaz_iconv routines: changed trie-based character set conversions to use only non-negative values for bit fields due to Sun's C compiler not supporting negative values. Fixed bug in character set conversion yaz_iconv. Some three byte UTF-8 sequences where not read correctly. Fix by Rustam Usmanov. Updated win/makefile to use options, settings which makes things compile with VS C 2005. --- 2.1.12 2006/02/01 Fixed bug in yaz_oi_update which used incorrect value for categoryValue. In ZOOM socket code, use select instead of poll on MacOSX. ZOOM-C now support client-side compilation of CQL into RPN that is sent to the server, enabling CQL to be used against all Z39.50 servers. Use ZOOM_query_cql2rpn() to set the compiled CQL into a ZOOM_query object, and submit it using ZOOM_connection_search(). The CQL-to-RPN translation uses a configuration file, the name of which must be specified in the Connection's "cqlfile" option. ZOOM-C also support CQL scanning, via the new ZOOM_connection_scan1() function, which takes as its start-term parameter a ZOOM_query object (which may have had either CQL or RPN set into it). --- 2.1.10 2005/11/29 Added ZiNG Update Support. New codecs are defined in srw.h. Extended the GFS to support this as well. Backend handler, bend_srw_update, does the update work. Code contributed by Ko van der Sloot. Allow retrieval of Search Result-1 information in ZOOM by the use of options that are attached to a result set. ZOOM documentation updated accordingly. Fixed bug #416: First/second comb characters not handled in the MARC-8 to UTF-8 conversion. Patch by Raj Patel. Added option -m to GFS to control formatting of timestamps in log file. Added 'exit' as synonym for 'quit' in yaz-client Added support for specifying SRW resultSetId + resultSetIdleTime in a Generic Frontend Server's search handler. Refer to include/yaz/backend.h for the new members. Patch by Ko van der Sloot. Added support for SRU POST. It is supported for content-type application/x-www-form-urlencoded only. Patch by Ko van der Sloot. Do not build the separate Multi-threaded (MT) library libyazthread.la. Instead make the library libyaz.la multi-threaded. Threading as a whole can still be disabled by configure option --disable-threads. Previosly, with older GLIBCs there were problems with MT libs under Apache. This has now been fixed a long time ago. Fixed bugs in yaz_log that occurred on Sparc Solaris in Multi-threaded applications. CQL module modified to be case insensitive for relations/indexes/operations. Fixed bug in CQL transform code: incorrect value relationModifieder was used. Added 'show all' command for yaz-client which retrieves all results for last search. Added new yaz-client, xmles, which takes a (private) OID and a document to be sent as an extended service request. Describe new yaz-client commands wait_response and set_auto_wait. Increase TCP/IP listener backlog from 3 (which I am guessing was copied from the SunOS manual entry way back when) so SOMAXCONN, so that the socket will queue as many incoming connections as it's able to handle ongoing connections. In other words, it will never now refuse a connection that it would be able to handle merely because it's not got around to accepting() enough of the pending connections yet. This is the behaviour anyway under Linux, where the listen() argument is ignored; but not under BSD and on systems such as MS-Windows that use BSD-derived TCP/IP stacks. The behaviour of YAZ-based servers should now be uniform across operating systems in this respect. yaz-marcdump uses 64-bit file access on some systems. This is enabled on Linux and other Unix variants where _FILE_OFSET_BITS=64 is supported. This allows yaz-marcdump to read large MARC batches (>2 GB). Modified all YAZ source files - except the source which is auto-generated by tools - to use spaces rather than TABS. Emacs/VIM trailer added to all source files. Add ZOOM_connection_option_getl() and ZOOM_options_getl(), corresponding to the existing *_setl() function. These allow option values containing arbitrary valuues. Add ZOOM_resultset_sort1(), which should ALWAYS be used in place of ZOOM_resultset_sort() in new applications. Its behaviour is identical except that it returns an indicator of whether or not the sort criterion was accepted (0 for OK, -1 for invalid). --- 2.1.8 2005/06/07 Fixed bug in yaz_marc_decode_buf. By mistake the routine appended MARC output rather than returning "new" buffer. yaz-client warns about unknown init options. Fixed bug #371: "options concurrentOperations ignores concurrentOperations" --- 2.1.6 2005/05/24 Added support for SRW sort in Generic Frontend Server. Patch by Ko van der Sloot. Member srw_sortKeys in bend_search_rr holds sortKeys - or NULL if none is provided. Fixed bug #307: It was impossible to specify indefinite/no timeout for ZOOM_event. Special timeout value -1 now means indefinite timeout (i.e. no timeout). Added support for multiple languages and charsets to be specified in ZOOM. Each charset/language is separated by a blank. If negotiation is in effect in init-response, Option "negotiation-charset-in-effect-for-records" set to 1(true) or 0(false). Code based on patch by Vasiliy Osadchuk. Fixed bug #306: infinite recursion that occurred when calling yaz_log_level_init as the first call (before other log level or nmem_init calls) Fixed bug in scan handling in front end server: if preferred-Position-In- Response was non-present, a NULL pointer referece was performed. --- 2.1.4 2005/04/26 Changed include/yaz/diagbib1.h and added include/yaz/diagsrw.h with diagnostic messages+codes for Bib-1 and SRW. Preprocessor defines are now defined for all those error codes. So instead of putting 109 in your program you'd use YAZ_BIB1_DATABASE_UNAVAILABLE. The messages are generated from a .csv - file. See src/bib1.csv and srw/srw.csv. Modified the yaz-marcdump utility to skip garbage bytes between MARC records in a file. Fixed bug - uninitialized memory - due to bad code for fix of bug #272. Program yaz-client now exits and produces an error message if multiple Z39.50 servers are specified on the command line (none or one allowed only). Program yaz-marcdump skips garbage bytes between ISO2709 records rather than abort. --- 2.1.2 2005/03/16 Fixed bug #273: Update for recent MARC-8 -> UNICODE changes. Fixed bug #272: Preserve spacing for CCL terms. --- 2.1.0 2005/03/14 Added support for virtual hosts and multiple backend servers for the YAZ frontend server. The configution is XML based and support specificition of CQL to RPN mappings and explain information. See section "Virtual Hosts" in the YAZ manual. Extended OPAC display utility. OPAC display utility renders bibliographic (MARC) record as well. Added yaz_opac_decode_wrbuf to supplement yaz_marc_decode_wrbuf. Fixed a bug in MARC decoder that could caused it to crash for some invalid MARC records. More diagnostics and warnings where added in XML output (warnings, etc are stored in comments). --- 2.0.34 2005/02/08 Fixes for UNIX domain sockets. Bug #261. Fixes for MARC-8 to UTF-8 conversion. Bugs #258 and #260. Fixed bug #263: YAZ MARCXML dump shows extra spaces after control fields. Added yaz_marc_subfield_str which defines subfield lead string which is used in YAZ_MARC_LINE format. Default string is blank+$. Added yaz_marc_endline_str which defines end of fields string used in YAZ_MARC_LINE format. Default string is newline. Experimental support for MarcXChange. This format can be produced by yaz-marcdump and is implemented in yaz_marc_decode - functions. http://www.bs.dk/standards/MarcXchange.xsd Added yaz-client commands scansize that sets maximum number of entries to be returned by scan. --- 2.0.32 2005/01/11 Added support for SRW scan in yaz-client and Generic Frontend Server. * Added whereInList member to SRW Scan Term. * Changed Z_SRW_scanRequest to be able to carry both CCL and PQF. Fixed NMEM system to return aligned blocks on the smallest boundaries that are suitably aligned for all possible types on the particular architecture YAZ is being built for. --- 2.0.30 2005/01/04 Fixed numerious warnings that was issued with newer versions of GCC. Fixed NMEM system to return aligned blocks on 8 byte boundaries rather than 4 bytes, since 4 may not be enough on some systems such as GCC 3.4.3 on Solaris. Make YAZ Generic Frontend Server slightly faster. Enhance (and reduce) logging for Generic Frontend Server. Revert YAZ log system so that it flushes every write operation by default. (YAZ 2.0.26 and earlier verisons did that). Bug #240. Modified the YAZ logging system. The LOG level defines use YLOG_ prefix instead of LOG_, due to name clash with syslog(3). LOG_ are still present. New applications should define YAZ_USE_NEW_LOG=1 - this will effectively disable old definitions. --- 2.0.28 2004/11/09 Added yaz_log_time_format which specifies log format using strftime(3). Added yaz_log_module_level which returns mask for a module. Value is non-zero mask a if module is enabled; zero if disabled. * Fixed bug #148: CQL parser may leak. A few prototypes were changed in include/yaz/cql.h. Fixed bug #176: Dont throw diagnostics on empty SRU args. Fixed bug #175: surrogate diagnostics in SRW lacking NS. Fixed bug #172: RPM builds does not enable SSL. Doxyfile.in part of dist. Doxyfile generated by configure. Configure aborts if any of --with-xml2, --with-openssl, --enable-tcpd are given and the corresponding component does not exist. Extend CCL documentation in YAZ reference. Describe r=r. --- 2.0.26 2004/10/01 Fixed MARC->MARCXML conversion to properly deal with fields, subfields, indicators having non-ASCII characters. Fixed MARC->MARCXML conversion so that ASCII control characters except TAB,CR,LF are removed from resulting XML (XML 1.0 does not support these). Added YAZ GFS support for conversion from Z39.50 surrogate diagnostics to SRW surrogate diagnostics. Bug fix: YAZ GFS did not return schema in explainResponse. --- 2.0.25 2004/09/30 The YAZ GFS when converting SRW/SRU requests to Z39.50 structures now converts recordSchema to elementSetName as well as schema URI. Fixed bug in COMSTACK that prevented HTTP request packages from being decoded properly. --- 2.0.24 2004/09/29 Added CCL facility r=r "range" which is similar to r=o "ordered" but does not require white-space before and after the dash in a range, e.g. x=-1990 is equivalent to x <= 1990 iff r=r, but equivalent to x= -1980 iff r=o. Fixed a few AC_TRY_LINK configure tests that did not operate properly due to new GCC removing "redundant" code. Added yaz-client commands scanpos and scanstep that sets preferred position and step-size for scan. Macro YAZ_INIT in yaz.m4: option --with-yazconfig renamed to --with-yaz. Added CCL utility ccl_qual_buf which parses one or more CCL spec lines in a buffer. Added CCL utility ccl_qual_line which adds CCL qualifier line consisting of name and value - ignoring empty lines and comments. On Windows, the debug DLL/import lib is now named yazd.{dll,lib}. Added odr_get_element_path which returns current element path for an ODR handle. This utility is useful in error handling or user-defined ODR_PRINT stream. Added ODR_PRINT utility odr_set_stream which is is a more generic alternative to odr_setprint. odr_set_stream takes a stream handle, pointer to a write function and pointer to close function. The close function - if non-NULL - will be called during odr_destroy. Fixed bug in CCL parser where truncation char was not removed from right side when truncation=both was in effect. Fixed CQL parser to use unsigned chars for isxxx from ctype.h due to VS.NET. --- 2.0.23 2004/08/11 Fix buffer overrun in CQL parser when dealing with proximity (%). Fixes for MARC-8 in yaz_iconv character set utilies. The MARC-8 to UTF-8/UCS conversion is now only based on codetables.xml. yaz_marc_decode_buf sets leader pos 9 to "a" for MARCXML output. --- 2.0.22 2004/08/06 Add support for more "commit changes" in ZOOM (uses Extended Services). For yaz-client, command set_marcdump / -m dumps SUTRS/XML/.. records as well. Yet another small fix for configure of SSL. --- 2.0.21 2004/05/14 Fix SSL libs for configure when --with-openssl=DIR is given. --- 2.0.20 2004/05/10 Add autoconf m4 macro YAZ_DOC for YAZ documentation setup (docbook). SSL comstack now uses yaz.pem certificate file on server side by default. Certificate filename can be configured by calling comstack function cs_set_ssl_certificate_file before cs_bind is used. Fix bug regarding multiple calls to ZOOM_connection_connect. Implement cs_set_ssl_ctx which sets SSL_CTX for SSL comstack. Do not create SSL_CTX in cs_create (ssl_type). Create in tcpip_bind, tcpip_rcvconnect instead. This allows user to set custom SSL_CTX. ZOOM now allows inspection of X509 peer certificate for verification. The X509 buffer is retrived by reading ZOOM option "sslPeerCert". Removed libyazssl.la. When SSL is enabled, libyaz.la has SSL support and all programs have too (yaz-ztest, yaz-client, zoom..). May not be as "modular" but it simplifies things. Added cs_get_peer_certificate to that returns peer X509 PEM. Added cs_get_ssl that returns SSL handle (SSL *) for SSL comstack; returns NULL if SSL is unavailable. Documentation about MARC decoding tools. Fix --disable-tcpd to really disable tcpd. Patch by Robin H. Johnson. --- 2.0.19 2004/03/30 Rename CHANGELOG to NEWS to follow GNU style packing. Fix bug with missing initialization of member in init_diagnostics. This bug affects threaded version of GFS server. --- 2.0.18 2004/03/20 Use wrbuf_xmlputs_n instead of wrbuf_write_cdata to avoid clash with Zebra symbol. Ensure zlib.dll is packed with Windows install. --- 2.0.17 2004/03/17 Fix encoding of xsd:string to use text instead of CDATA. Fix endless loop in CQL parser with unbalanced ". Use a more compact way to store MARC-8 conversion tables. --- 2.0.16 2004/03/16 Debian only Oleg Kolobov Fixed a bug in yaz_iconv regarding conversion to UCS4 / UCS4LE. Update CQL parser to use new CQL 1.1 modifiers for booleans and relations. Add CQL test cases. --- 2.0.15 2004/03/01 Another fix for decoding of XML packed records. --- 2.0.14 2004/02/25 Fixes for Chunked encoding. White space not ignored after length spec. Update NS and use default NS for SRW diagnostic elements. --- 2.0.13 2004/02/23 Implement ZOOM_resultset_cache_reset which resets record cache. Implement ZOOM_resultset_sort which sorts a result set. Implement chunked HTTP transfer. For SSL, use -lssl -lcrypto on systems that don't have pkg-config. --- 2.0.12 2004/02/16 Added member 'schema' to bend_explain_rr structure so that backend can specify explain record identifier. Defaults to Zeerex 2.0. Fix encoding of OID's of form 1.0.X. Bug introduced in 2.0.11. --- 2.0.11 2004/02/16 * SRW/SRU 1.1 updates: updated diagnostic in srw.h to use uri instead of code. Added init command for yaz-client which sends "extra" init request. Fixed two bugs in OID codec - ber_oidc. Throw error when encoding/decoding bad truncated OID. Fix decoding of OID X.Y... when X=2 and Y>39. Fixed a bug in ASN.1 compiler that caused Type-1 Operator codec to fail. Make ZOOM error code for "invalid query". Fixed compilation for SSL which wasn't properly enabled for all platforms. --- 2.0.10 2004/02/05 For yaz.m4, allow second argument for YAZ_INIT to hold minimal version of YAZ required. * SRW/SRU 1.1 updates. Diagnostic code now a URI. Added option -p to make Generic Frontend Server to write PID file. Added option -D to put Generic Frontend Server in background on its own. Make ZOOM C recognize option "password". If unset, "pass" is used (for backwards compatibility). Fixed a bug in Generic Frontend Server that could make it crash if a client sets characterSetNegotation bit, but didn't pass negotiation stuff in InitRequest. New YAZ client command, zversion, that sets Z39.50 version (1,2,3..). Must be issued before open, in order to be in effect. --- 2.0.9-6 2004/01/12 Debian/Windows Make the SRU server more picky WRT unknown params, etc. Bug fix: ZOOM scan response didn't return displayTerm - when present. New YAZ client command, options, that sets Z39.50 options. New utility functions yaz_init_opt_{encode,decode} to encode/decode Z39.50 options from a string of tokens (one token for each option bit). Update SRW diagnostic code messages. --- 2.0.9-5 2004/01/07 Debian/Windows Handle user defined stylesheet for SRW/SRU. --- 2.0.9-4 2004/01/06 Debian/Windows Fix bug in decoding of Content-Length. --- 2.0.9-3 2004/01/06 Debian/Windows Fix a bug with decoding of XML packed records. --- 2.0.9-2 2004/01/05 Debian only Allow empty ODR (NMEM=0) for odr_oiddup and odr_getoidbystr. Fix bug in SRW/SRU diagnostics decoding. --- 2.0.9 2004/01/05 Fixed bug in Generic Frontend Server which could drop records exceeding preferred message size. Reported and fixed by Irina Dijour. Fixed calculation of package size for structured records in Generic Frontend Server. Reported and fixed by Irina Dijour. Fixed namespace for SRW/SRU diagnostics. Fixed SEGV in yaz-client that occured for HTTP connection errors. --- 2.0.8 2003/12/22 * SRW/SRU 1.1. Since the Namespace has changed for SRW/SRU, it means that this version is incompatible with version 1.0 and older YAZ SRW/SRU implementations. CQL changes to reflect recent changes to the specification: * Documentation talks about context sets instead of index sets. * Documentation talks about indexes instead of qualifiers. * The CQL-to-PQF transformer's configuration file now uses "index.set.name = " instead of the old form "qualifier.set.name = ". (Both forms are still understood but the latter is deprecated.) * CQL terms with no explicit index specified are now interpreted as cql.serverChoice instead of srw.serverChoice (which of course behaves exactly the same.) --- 2.0.7 2003/12/16 MARC conversion can now generate ISO2709 output in another character set. yaz-marcdump uses this facility if you invoke it with option -O. Added missing C decl macros for include/yaz/{soap.h,srw.h,cql.h}, so that functions from there can be used from C++. --- 2.0.6 2003/12/04 Frontend server now transfers memory from decoded packages to stream ODR for search. NMEM now clears freed blocks with 'Y' (hex 59) to force bad memory references to show up. ZOOM-C now supports standard ZOOM option names as described in v1.4 of the ZOOM Abstract API. The older names for the same options are still also supported for the benefit of old applications. ZOOM-C supports "implementationId" and "implementationVersion" options to go along with "implementationName". These allow the user code to specify identification strings to be sent to servers. Add OID for the new ExtLite attribute set. Add OIDs for NACSIS-CATP, FINMARC2000 and MARC21-fin record-syntaxes, as requested/supplid by Ere Maijala For generic frontend server, reverse the order of "toolkit-supplied / application-supplied" strings sent as implementationId, Name and Version. Also, remove the spaces around the slash. This brings the GFS in line with the behaviour of ZOOM-C on the client side. Add function ZOOM_scanset_display_term. yaz-client shows scan displayTerm if present. Utility yaz-iconv is now installed by default along with the man page yaz-iconv.1. Extend configure check for OpenSSL to use pkg-config where available (such as RedHat 9). Incorporate patch by Morten Bogeskov which allows a Unix file socket server to specify uid/gid/mask for socket using the format unix:[user=uid,][group=gid,][umask=mask,]file=path If file= is omitted the existing format is assumed, e.g. unix:path in which case the mask is 0666 (rw for everybody). Major restructure of YAZ source. All source in libyaz is in src directory. Programs in client (yaz-client), ztest (yaz-ztest), zoom (zoom programs), util (utility programs such as ASN.1 compiler, yaz-marcdump). Added man page for utility yaz-marcdump (used to be called marcdump). yaz-marcdump is installed by 'make install'. Fixed a memory leak in Generic Frontend Server that occurred when decoding of incoming package failed. Fixed a potential DOS attack vulnerability in COMSTACK/ODR. Change prototype of odr_perror: add const to message string. New function yaz_log_reopen which reopens log file (for log rotate, etc.) * Blocking parameter for COMSTACK cs_create is now a bit mask rather than a blocking flag. Bit 0 is set for blocking, reset for non-blocking. Bit 1 is set if cs_addrstr should avoid DNS lookup; reset for full DNS lookup. There should not be any compatibility problems with this assuming that blocking=1 or 0 is used. Fix bad reference in UNIX comstack in function cs_addrstr. Fix for compilation on AIX. The generic front-end server (server/seshigh.c) now supports returning Init diagnostics to the client in User-information-field, in accordance with Z35.90 Implementor Agreement 5 (Returning diagnostics in an InitResponse) --- 2.0.4 2003/09/04 Allow any CQL relation (not just all,any,exact,scr). Fixes for OCLC UI ASN.1 to make it work with SilverPlatter targets that features the same UI. Implemented command update0 in YAZ client which is equivalent to update but uses old of Ext Update ASN.1. Use OID 1.2.840.10003.15.1000.81.1 for privately defined charsets in charset negotiation. Added VAL_ID_CHARSET in oid.h. Previously no OID was used for this info. ZOOM uses smallSetUpperBound=1 instead of 0 for piggyback searches. It apparantely upsets EBSCO Publishing IR Z39.50 Server which returns 'malformed search term' otherwise. SortResponse member resultCount now set to NULL in sort handler of frontend server. OPAC support ZOOM. ZOOM_record_get returns OPAC info (as XML) if type is "opac". Add three new utility functions for translating OIDs between various formats -- symbolic name such as "Usmarc", minus-1-terminated int arrays and dotted strings such as "1.2.840.10003.9.5.1": int *oid_name_to_oid(oid_class oclass, const char *name, int *oid); char *oid_to_dotstring(const int *oid, char *oidbuf); char *oid_name_to_dotstring(oid_class oclass, const char *name, char *oidbuf); Reverted modifications for ES Update definition for z_IU0Update (OID 1.2.840.10003.9.5.1 and 1.2.840.10003.9.5). The definition is back to YAZ 2.0.2. String value attributes for CCL parser. Support for OCLC's locally registered "OCLC-UserInformation" PDU, which their FirstSearch server returns in Init responses, sometimes carrying useful diagnostic information when Init fails. This has the OID 1.2.840.10003.10.1000.17.1 and is defined in the file "z39.50/oclcui.asn", where its definition is somewhat different from what OCLC document on their web-site, as required to interoperate with their servers. Support for anonymous authentication in yaz-client. Use the command "auth -". * Fix the OID of the Index Data-local "admin" Extended Service from 1.2.840.10003.9.81.1 to 1.2.840.10003.9.1000.81.1. The omission of the 1000, which indicates a locally-defined OID, was a mistake. --- 2.0.3 2003/06/20 Fix CCL directive @case handling so that it affects string match for both CCL keywords and qualifiers. * ESFormat-Update updates. Packages with OID 1.2.840.10003.9.5.1 and 1.2.840.10003.9.5 are now handled by the same decoder z_IU0Update . Decoder has been updated with ASN.1 changes as listed in http://lcweb.loc.gov/z3950/agency/defns/updateES.html Note that the "latest" DB Update, OID 1.2.840.10003.9.5.1.1 , handler z_IUUpdate, remains unchanged. ZOOM_record_get may now return a record in a specific character set. For type use "form; charset=from[,to]" where form (render, xml, ..) , "from" is the character set of record as returned by target. "to" is the character set to be returned. If omitted, "to" is UTF-8. YAZ ASN.1 compiler renamed from yaz-comp to yaz-asncomp New ODR utility, odr_getelement, which returns name of element for which encoding/decoding failed. Fixed ODR so that it returns error code OREQUIRED rather than ONONE in cases where a required element was omitted. Bug fix: some MARC8 sequences were not converted. New ZOOM option "step" which specifies number of records to be retrieved in one chunk. Used in conjunction with "start" and "count". SRW support for yaz-client. Use scheme http: to use it, e.g. http://host:port/db yaz-client no longer does (un)intelligent character set conversions by default. Can be enabled with charset and marc_charset commands. xmalloc trace fix for 64-bit systems such as DEC alpha. Solaris 2.6 compile fix. New function, cql_strerror() translates SRW error codes, as returned by cql_transform_error(), into human-readable English strings. Used in yaz-client diagnostics when appropriate. New CQL2RPN query-type for the command-line yaz-client, parses CQL and converts it into a type-1 query which is sent to the server. This makes CQL available for use with all Z-servers, as opposed to the tiny minority that can handle CQL queries themselves. --- 2.0.2 2003/04/28 New Debian package layout similar to the Redhat Package layout. New ZOOM events ZOOM_EVENT_RECV_{RECORD,SEARCH} for receiving a record and search result respectively. --- 2.0.1 2003/04/25 Redhat package is now several packages: libyaz (runtime libraries), libyaz-devel (development and documentation, and yaz (utility programs). Package spec file by Morten Bogeskov. New member 'schema' in struct bend_fetch_rr which the name of requested schema (SRW/SRU) for record (or NULL if none was given). The fetch handler MAY set this to reflect the schema of the returned record. New member 'display_term' in struct scan_entry. GFS now sets member entries and allocates scan entries to be filled by user scan handler. In previous version, entries member was allocated by the scan handler. That still works, but the GFS will ignore member display_term - assuming it was NOT set by the handler. The fact that the GFS now allocates the entries both allows for new members and makes a scan handler easier to write. Fix CQL lex buffer overflow. SRW/SRU recordPacking. For SRW default recordPacking is string. For SRU default recordPacking is string. SRU protocol support for frontend server. Fix compile bug for systems that have nl_langinfo but CODESET undefined. Added missing PQF transform rules for <= and >= . Thanks to Peter Popovics. Added scan for the ZOOM shell (zoomsh). --- 2.0 2003/02/23 * String Identifers for Schemas (Amendment 5). http://lcweb.loc.gov/z3950/agency/amend/am5.html Old definition for schema Odr_oid *schema; /* OPT */ New: int which; union { Odr_oid *oid; Z_InternationalString *uri; #define Z_Schema_oid 1 #define Z_Schema_uri 2 } schema; /* OPT */ * resultCount parameter to Sort Response (Amendment 1). http://lcweb.loc.gov/z3950/agency/amend/am1.html Support for SRW 1.0 over HTTP. This is an optional feature and requires libxml2 to operate. Enable SOAP by specifying --with-xml2 for configure. Generic frontend server supports HTTP/SOAP/SRW and Z39.50/BER on the same port. SRW SearchRetrieveRequests are mapped to bend_init,bend_search,bend_fetch,bend_close. Z39.50 Query Type-104 added - to facilitate CQL within Z39.50. CQL support. Source is directory 'cql'. CQL is supported in ZOOM (both SRW and Z39.50) and the YAZ client (Z39.50 only). ZOOM connections are SRW based if schem http is used for hostname in connect, e.g. z = ZOOM_connection_new("http://myserver"); ZOOM_query may be of type CQL, e.g. ZOOM_query_cql(q, "dc.title=x"); CCL proximity operators !n, %n converts to PQF @prox 0 n 1 2 k 2 and @prox 0 n 0 1 k 2 respectively, meaning: exlusion=false, distance=n, order=true/false, relation=le, prox unit=word. If n is omitted, distance 1 is used. Fixed problem with C compiler include path in wrong order. For TCP/IP COMSTACK, set recv buffer to an appropriate "large" value on Solaris. Patch from Ko van der Sloot. New MARC decode API. All new functions operate on a yaz_marc_t handle. The most important new functions are: yaz_marc_create, yaz_marc_decode_{buf,wrbuf}, yaz_marc_destroy, .. to create handler, decode and destroy respectively. Decoder can produce formats MARC line, simple XML, OAI MARC and MARC XML (LoC). See include/yaz/marcdisp.h. YAZ Iconv utility now supports MARC8 decoding (marc8.c). Converts to UTF-8, UCS-32, wchar_t or Latin-1. * Prototypes for yaz_iconv_-functions moved to separate header include/yaz/yaz-iconv.h. Make a few private functions 'static' in unix.c. This prevents duplicate unix_close in PHP with YAZ and imap. PHP Bug 20977. For ZOOM connection, the options targetImplementation{Id,Name,Version} are set when Init Response is received. New function ZOOM_connection_error_x similar to ZOOM_connection_error but returns diagnostic set as well. New function yaz_strerror which is a portable wrapper for strerror/strerror_r/GetLastMessage. * ZOOM_record_get supports type "xml" in which case MARC XML (from LOC) is returned for MARC. If type is "oai", then OAI MARC is returned. Fix creation of lib/yaz-config so it works if srcdir != objdir. Patch from Kang-Jin Lee. --- 1.9.2 2002/11/26 yaz_marc_decode uses OAI MARC as XML format for ISO2709 records. Fix bad race conditions on SIGTERM and terminate gracefully in frontend server. Move retrieval (data1) module to Zebra since nobody seems to be using it. Add GRS-1 render for ZOOM using same format as yaz-client. --- 1.9.1 2002/10/05 Added man pages: yaz-client(1), yaz-ztest(8), yaz(7), zoomsh(1). Fix broken ESpec handling in data1 module. SGML reader parses comments and makes them part of the data1 tree. Added several type casts so that YAZ compiles as C++ code. ZOOM didn't handle PDU encoding failures properly. Added more Bib-1 diagnostics (approved extensions). GNU configure: better check for iconv. More portable use of accept, getpeername. Check for socklen_t. Use int/size_t if socklen_t is not defined. --- 1.9 2002/09/06 PQF parser rejects bad queries - including those with extra characters in them. PQF parser used to silently ignore that. Cleaner API for PQF added, which allows you to get detailed error information for bad queries (see yaz/pquery.h). Fixed bug in ZOOM_record_get for type "database". Implemented mini iconv library supporting conversions between UTF-8, UCS4, UCS4LE and ISO-8859-1. Implemented in util/siconv.c. * Removed XML reader (d1_expat.c). It's part of Zebra instead. --- 1.8.9 2002/08/20 Fixed ZOOM C record cache so that preferredRecordSyntax and elementSetName is used to check for already fetched records. --- 1.8.8 2002/08/02 Added three members in bend_initrequest structure to facilitate character set negotiation. Fixed a bug in frontend server that could cause indefinite loops under rare conditions. Revised character set utilities (charneg.h) so that encoding UCS-4, UCSA-4, UTF-16 and UTF-8 are encoded non-privately. For PQF, directive @term sets term type for Scan/Search. Here is general, string, numeric, null. The term type is inherited - just like @attr. New call odr_set_charset that sets character set conversion for international-strings on a ODR stream. Prototype is: int odr_set_charset(ODR o, const char *to, const char *from); The InternationalString is still represented as C string in YAZ so native strings of type UTF-8, ASCII, etc. will work (UTF-16 won't). On the protocol level, you can use any encoding. Support for UNIX sockets in ZOOM. Solaris recv sometimes returns errno == ENOENT. It is treated as EINPROGRESS. COMSTACK patch by Ko van der Sloot. New COMSTACK of type UNIX Socket. Use "unix:/path" as address for both client and server. Code by Morten Bogeskov. --- 1.8.7 2002/05/22 On Windows ZOOM functions are of type __stdcall rather than __cdecl, so that they can be used directly from Visual Basic. You must recompile your windows APP if you're using ZOOM. Character Set and Language Negotiation(3) for ZOOM API and YAZ client. Commands "lang" and "charset" sets language and character set respectively. Options "lang" and "charset" is interpreted by the ZOOM API. Note, these are not part of the official ZOOM spec) All is due to Oleg Kolobov. Attributes from multiple CCL fields may be OR'ed rather than merged using directive "@field or". Fields are still merged by default - equivalent to "@field merge". Fixed bug in ZOOM connect that occurred on OpenBSD (maybe others). Patch by Oleg Kolobov. Fixed bug in zget for parameter ExtendedServicesResponse. Fix OID for ILL. --- 1.8.6 2002/03/25 Added PQF feature: '@attr type=value' may be written as '@type=value'. Client displays USR.1:SearchResult-1 (hits per term). Additional Search Info for search in Generic Frontend Server. Fixed CCL parsing of "field=s". WIN32 installer - using the excellent NSIS software from nullsoft. Fixed CCL parsing of "field = - ". Added function yaz_marc_decode that decodes MARC for line mode display or XML (similar to that used by JZKit). Fixed BER decoding of OPTIONAL CHOICE. The bug didn't affect the Z39.50. But ISO/ILL was, however. Added patch by Rustam T. Usmanov that implements Z39.50 duplicate detection service (Z39.50-1995 Amendment 2) and Language Negotiation (3). See: http://lcweb.loc.gov/z3950/agency/amend/am2.html http://lcweb.loc.gov/z3950/agency/defns/charneg-3.html --- 1.8.5 2002/02/03 New YAZ client features: Command completion and new commands: push_command, set_apdufile, set_marcdump, set_cclfields, register_oid. Code provided by Jacob Poulsen. New call oid_trav, that visits all registered OIDs via callback. Function ZOOM_record_get now returns const char pointer rather than void pointer. It saves a lot of type casts. For YAZ client, command "auth" now allows you to set authentication in IdPass style. It is enabled when three tokens are given - order is user, group and password. Fix memory leaks in MARC record handling for ZOOM. New option for YAZ client, -k that sets maximum record size. Similar to -k option for generic frontend server and yaz-ztest. More fixes for scan. Non-zero stepSize handled. OID's fixes. Prefix query parser reports "fail" when bad attribute set is given. Fix in MARC decoder. Proximity logging. Fix for attribute set in scan handler for server. Patches by Shigeru Ishida. SSL/COMSTACK updates. cs_rcvconnect completes SSL handshake. ZOOM works with SSL. Configure option --with-openssl= now works when a directory is specified. Patch provided by Morten Bogeskov. New option for YAZ client, -u , that sets authentication. ZOOM fix: error information was sometimes "missing", since error was cleared/reset too when it shouldn't. ZOOM_record_get returns ISO2709 buffer when "raw" is given. --- 1.8.4 2002/01/04 Scan for ZOOM API. New object ZOOM_scanset. New functions ZOOM_connection_scan, ZOOM_scanset_size, ZOOM_scanset_term and ZOOM_scanset_destroy. New ZOOM function, ZOOM_connection_last_event, that returns type of last event (such as "receive data", "send data", "apdu received", etc. New ZOOM option, schema, that specifies schema for retrieval. New CCL feature. Qualifiers can be aliases for one or more other qualifiers (if more than one is given, OR is used). ZOOM uses named result sets if target supports it. Two new YAZ client commands: . (dot, which sources a script of YAZ client commands), and ! (to execute shell command.). Implemented by Jacob Poulsen. Working on Debian packages. --- 1.8.3 2001/11/19 YAZ client enables named result sets only if target supports it. *** ZOOM. Prefix for ZOOM definitions changed from Z3950_ to ZOOM_. * ZOOM. Removed Z3950_connection_host. Use Z3950_connection_option_get with key="host" to get same result. * ZOOM. Added Z3950_record_clone and removed Z3950_resultset_get. Function Z3950_resultset_record(s) returns references to records "owned" by resultset. To become owner use Z3950_record_clone. Function z_ext_record handles Extended Services. Thanks to Irina Dijour. --- 1.8.2 2001/11/12 CCL Parser fix: ignore token comma when dealing with and-lists. Documentation updates for COMSTACK. * ZOOM changes. Query object renamed from Z3950_search to Z3950_query. Changed prototype Z3950_records. For some functions, int parameters were changed to size_t. TCP/IP COMSTACK no longer uses getprotobyname to avoid memory leak on some Unices. New MARC decode/display function, marc_display_exl, which properly rejects non-ISO2709 records. YAZ client uses it. --- 1.8.1 2001/10/29 Fix bug: local attribute set wasn't set correctly in PQF strings. --- 1.8 2001/10/25 * Old Z39.50 codecs no longer supported. Added ZOOM C binding. See http://zoom.z3950.org/ Renamed states for COMSTACKs to avoid confusion with events. Implemented cs_look and proper cs_rcvconnect. Fixed COMSTACK error that occurred on HPUX. Fix by Giannis Kosmas. Configure detects POSIX threads on OpenBSD. When sort flag 'i' was specified in yaz-client the caseSensitivy flag was set to a wrong value. Thanks to Robert Sanderson for reporting this. When error is returned from present handler, non-surrogate diagnostic is returned in present response (and fetch handler is no longer called). * Minor adjustments to pquery parser (PQF). Token characters may be escaped by using backslash (C-style). PQF parser allows string attribute values to be specified. For @attr, non-numeric characters after the equal-sign are treated as strings (e.g. @attr 9=title). CCL trunction character may be defined (@truncation in file) * function zget_ExtendedServicesRequest sets waitAction to waitIfPossible (was wait). Added cs_set_blocking to set change blocking mode of a COMSTACK. Thanks to Matthew Carey. CCL operator names may be set in field definition files (CCL_bibset). See ccl/bib1 for an example. Fixes in ASN.1 compiler for C++ compatibility. * Renamed members "and" and "or" in struct Z_Operator to "op_and" and "op_or" to avoid conflict with C++. Fixed problem with GNU readline detection on Redhat 7.0. Added step-size for Scan backend handler. Fixed bug that made the frontend server crash when no attribute set was specified for scan. Front-end server automatically switches to original working directory when installed as an NT service. Previously -w had to be specified to make it work. Added extended attributes for retrieval module (data1), so that data1 records carry d1_readXML/SGML attributes. d1_read also supports null-data rules ( ) On UNIX when POSIX threads are available, a separate library libyazthread is created. Programmers should link with that library and the yaz library when using threads. The reason for the split was that some applications on Linux, such as Apache, doesn't work well when using shared objects that relies on threads. Added SSL support for the COMSTACK. You start yaz-client and yaz-ztest (or any frontend server) in SSL mode by specifying ssl: followed by address. Only tested on UNIX. Added feature for CCL module. Virtual structure s=al or s=ol generates and-list and or-list respectively instead of phrase search. Added some OID's. * Added prefix "yaz_" for the functions log_init.., log_file.. and log_mask_str. This was done to avoid name conflicts with other libraries (such as other PHP extensions). Added raw OID member for preferred record syntax (request_format_raw) and returned record syntax (output_format_raw) for backend fetch method. Config file yaz-config now accepts options so that it returns specific compile settings, etc. Thanks to Morten Bogeskov Shared library support for UNIX using GNU libtool. * Modified backend interface. Request/Response struct's replaced by one read/write C struct. For example bend_fetchrequest and bend_fetchresult have been replaced by single bend_fetch_rr struct. Every handler - even search has to be registered in bend_init handler. This means that the YAZ library no longer refers to external functions and it makes it possible to make the whole thing a single DLL/SO. Added Segment handler for backend server. Added Zmbol/Zebra administrative functions to YAZ client. Threaded frontend server on UNIX (when POSIX Threads are available). Starting the server with option -T enables multi-threading. --- 1.6 2000/03/03 Added configure option --enable-comp/disable-comp to control use of YAZ ASN.1 compiler. Use --disable-comp to use the old *coders located in sub directory asn. YAZ ASN.1 compiler renamed to yaz-comp in sub directory. It's installed in ${exec_prefix}/bin along with the other programs yaz-client and yaz-ztest. GNU automake used to maintain makefiles. Added several OID's. Changed retrieval module so that we can load records with no abstract syntax defined. Tagpaths in these records are fully composed of string tags. Implemented ISO ILL protocol. Refer to stuff in sub directory ill. --- 1.5 1999/12/10 On UNIX, the generated makefile now supports a proper 'make install'. The prefix can be set via GNU configure to set the install location (default is /usr/local). * YAZ programs client and ztest were renamed to yaz-client and yaz-ztest to avoid conflicts when users install YAZ in "standard" locations, such as /usr/bin,/usr/local/bin,etc. * YAZ Header files were moved from include to include/yaz. YAZ Header files are referred to as include rather than . The YAZ include path (-I ..) is therefore the same as before. Programmers should update their #include statements or use -Ipath/include/yaz instead. The main motivation for doing this change is that YAZ header files can be installed in "standard" locations /usr/include,/usr/local/include without introducing conflicts, since ALL YAZ header files are stored in subdirectory yaz (under /usr/include for example). Compilation of YAZ for WIN32 is now handled by an nmake-style makefile rather than project/workspace files. We switched because project files are incompatible between Visual C++ 5 and 6. Refer to windows.txt for details. Changed name of logging function, logf, to yaz_log, to prevent name clash with some math-log functions. The YAZ header log.h defines logf to yaz_log (#define) so there should be no incompatibilities by this modification. Added bend_start/bend_stop handlers for server. These handler are called on start/stop of server. For windows they are called whenever a service is started/stopped. * YAZ now auto-generates decoders/encoders for the Z39.50 protocol using a fairly small ASN.1 compiler written in Tcl. The compiler is located in util/yc.tcl. The auto-generated C code structures are, in a few cases, incompatible with the old decoders. There are differences in the following C structures Z_DiagRec, Z_External, Z_SortRequest, Z_SortResponse, Z_AttributesPlusTerm, Z_ProximityOperator, Z_DefaultDiagFormat. The preprocessor variable ASN_COMPILED is defined when the compiled ASN.1 is being used. Encoder/decoder routines as well as the Z39.50 protocol ASN.1 is located sub directory z39.50. If you wish to use the old encoders/decoders you can specify --disable-yc for configure. Assigned OID for old DB Update (VAL_DBUPDATE0). Updated YAZ compiled version so that it supports both new - and old version of DB Update * Added 'name' parameter to ODR encoder/decoder routines to facilitate pretty ODR print. Updated whole Z39.50 encoder/decoder to reflect the change. The name parameter can be set to 0 in which no name is specified for the construction. The macros odr_implicit and odr_explicit sets name parameter to zero for the construction involved. New macros odr_implicit_tag and odr_explicit_tag are similar to the others, except that a name parameter is added. For programmers' that don't use ODR they probably only need to change the call to z_APDU and z_External. Added access control facility by interfacing the TCP wrapper library. YAZ automatically attempts to find the TCP wrapper Library (-lwrap) and tcpd.h on Unix systems. For the server, option -d specifies the name of the daemon and enables the access control as specified in hosts.allow/hosts.deny. Refer to man pages tcpd(8) and hosts_access(5). Fixed memory leak in ccl_find_str and ccl_qual_rm. Thanks to Hans van den Dool . Added reference ID parameter to most functions in server API - refer to backend.h. Thanks to Hans van den Dool . Changed name of ccl library to libccl.a (was ccl.a). Fixed bug in decoder for Explain (Category TargetInfo). Added support for GNU readline in client. Thanks to Jacob Poulsen . GNU configure attempts to detect if readline is available. * CHANGED DEFINITION OF ES: UPDATE (INCLUDING THE OID) to reflect the new definition from the ZIG. NOTE THIS IF YOU HAVE AN UPDATE IMPLEMENTATION! This change was made to the development version before the ZIG decided to retract the amendment. If any users MUST be compatible with the original Update definition, PLEASE CONTACT US, and we will include a separate definition corresponding to the old Update ES. Note that because of the change to the ASN.1 of the TaskPackageRecordStructure we cannot define a single structure that will support both versions. * Added const modifier to buffer parameter for some ODR/BER encoding routines: ber_dectag, ber_declen, odp_more_chunks, completeBER, completeWAIS, odr_dumpBER. Fixed bug in client.c which caused a crash when a scanResponse didn't contain positionOfTerm. * Fixed inconsistency in the ScanResponse/ListEntries protocol. This * will cause an error in a client if a non-YAZ target sends both a * list of Scan entries and non-surrogate diagnostics. Retrieval module enhancements. Tag sets may be typed in the reference to it. From the .abs-file the "tagset" directive takes a third optional integer type for the tag set referenced. From a .tag-file the "include" directive takes a third optional type as well. The old "type" directive in the tag set itself is still recognized but acts as the default type for the tag set. Backend interface change. Individual Scan terms returned from bend_scan may also be tagged as Surrogate Diagnostics. Refer to struct scan_entry in include/backend.h. Retrieval module enhancements. Multiple tag sets and attribute sets may be specified in abstract syntax specs. Revised the error/warning for logging messages reported by the retrieval module when reading the various spec files. Object Identifier system (oid_..) changed. The API is backwards compatible but the oid-routines now allocates new OID's when needed. Raw OID's may be specified in oid_getvalbyname. YAZ now uses GNU configure to generate Makefile(s). * Minor changes in some of the member names of DeleteResultSetRequest and DeleteResultSetResponse. See include/proto.h. * Changed some C definitions regarding EXPLAIN record syntax (prt-exp.h) and added member 'languages' in TargetInfo (which was missing). Changed the way attribute sets are handled in the retrieval module. These are now cached, just like the abstract syntaxes (schemas). Changed YAZ so that it links with compiled ASN.1. Added Explain-schema definitions and mapping routines. The following Explain categories have been implemented: AttributeDetails, AttributeSetInfo, DatabaseInfo, CategoryList and TargetInfo. Fixed minor bug in Windows version of Server Library. --- 1.4pl2+ 1998/4/17 (Released with Zebra) Added Extended Services to server (backend.h). Thanks to Charles Woodfield. Added EXTERNAL: UNIverse Resource Report (non-standard). Implemened odr_enum and odr_set_of functions to handle ASN.1 types ENUMERATED and SET OF. * Added 'const' to some of the char pointer arguments for the functions, data1_read_node, data1_getelementbytagname, data1_insert_taggeddata, data1_getesetbyname, data1_getelementbyname, data1_get_absyn. Fixed bug in data1_insert_taggeddata - the last_child member of parent wasn't initialised. * Changed data1_read_record and data1_read_node so that the supplied "SGML"-buffer is read-only. In particular the resulting data1 - tree doesn't refer to any parts of the "SGML"-buffer. Fixed bug in server library (Windows version of statserv_remove). * Changed code so that it compiles as C++. The type definition of Odr_fun which is a member of Odr_arm was changed. The result is, that an explicit typecast is needed for the fun pointer when using Odr_arm - as in: {1, -1, -1, Z_IdAuthentication_idPass, (Odr_fun)z_IdPass}, Updated TagSet-G and -M definitions (tagsetm.tag and tagsetg.tag). Implemented the new structured date and time definition as approved by the ZIG. Added schemaId element to the specificTag in Espec-1 (also approved at the last ZIG). Thanks to RVDM. Added some Object identifiers (RVDM). Changed the Update Extended Service (RVDM). Added command "refid" to client which specifies referenceId for the following requests. Implemented extended service handling for server. See ztest.c for an example as well as backend.h. New handlers are registerd in the Init handler. * Changed interface for sort in server. Added new members to statserv_options_block. It allows a server to read options from another source than just the command line. Thanks to Charles Woodfield. * Changed definition of Z_Triple in file prt-grs.h - member boolean renamed to zboolean. Some C++ compilers complained about the name. Minor changes to gils.abs. Added index 's' (sort) on title and date/time-last-modified. --- 1.4pl2 1998/1/30 Fixed bug in server library regarding inetd mode (-i). This bug was introduced by release 1.4. --- 1.4pl1 1998/1/29 Added sort facility in client and backend server interface. Fixed problem with dependencies in Makefile(s). Fixed bugs for encoders/decoders of extended services and SearchInfoReport. Implemented sub-tree feature for schemas. Sub-trees are referenced in *.abs-files. See explain.abs for an example of the use of this feature. Modified bib1.att; local attributes for ANY didn't include ANY itself (only affects use of the retrieval module). Fixed bug in plain SGML reader in function data1_read_node: tags with prefix "var" was incorrectly interpreted as variants. Added feature "sub-schemas" to enable references to - and definitions of - group of elements. * Removed member parent from type data1_element (in data1.h). Implemented function odr_nullval() that returns the value of ODR_NULLVAL. * Removed member num_children from data1_node (in data1.h). Made NT service interface part of the server library. The function statserv_main uses the NT service when required and calls the statserv_start / statserv_close routines. Routine zget_SearchRequest and zget_PresentRequest fills resultSetName/Id member with "default" instead of "Default". Fixed memory leak in server. Request queue member wasn't freed. Fixed nmem_exit so that memory is freed. --- 1.4 1997/10/2 Revised the CCL parser utility to be thread safe. Added function, oid_ent_to_oid, to replace the function oid_getoidbyent, which is not thread safe. * Added nmem_init and nmem_exit to initialize and release NMEM resources. Function nmem_init should be called once in the initial thread before NMEM/ODR is used. statserv.c and client.c have been changed accordingly. The change was necessary to make NMEM thread safe. The NMEM memory pool is shared amongst threads in a process. Unix-based applications will still work fine without calling this. Added NT Services interface for the the Z39.50 (statserv) Server. Refer to the ztest.c source on the usage. Windows 95/NT port using MSVC5.0. Project files are included in the distribution. * Defined new 'global' handle for the retrieval (data1) system. The new handled, data1_handle, describes the state of the data1 system. This handle is passed as first argument to virtually all data1 related routines. The functions data1_create and data1_destroy creates and destroys a data1 handle respectively. Added ODR encode stream member to all backend request structures init, search, scan etc. This stream should be used to allocate all memory used for the response when thread safe operation is needed. Changed the comstack utility, cs_addstr, to be thread safe. The returned hostname string returned by the function is now part the COMSTACK instance. Added comstack utility, cs_straddr, which replaces the tcpip_strtoaddr function. The cs_straddr takes a COMSTACK handle as argument, so this function must be used after cs_create and before bind/connect. This function is thread safe. Moved test server to 'ztest' directory - generic server code still in 'server' directory. Made prefix query (pquery.c) utility thread safe. Added new function modifier YAZ_EXPORT to 'export' public DLL functions when using windows (see include/yconfig.h). Added definitions to the OID database (util/oid.c) (RVDM). Added new BIB-1 diagnostic messages to the handler diagbib1_str. Added call to ccl_rpn_delete in client program. Added ODR argument to ccl_rpn_query and ccl_scan_query to provide release of RPN structure. Added support for C++, headers uses extern "C" for public definitions. With input from RVDM. In handling of SEQUENCE OF: Counter set to zero when SEQUENCE OF is absent. Thanks to Ronald van der Meer (RVDM). Added initializers (zget_ routines) for a number of PDUs. Thanks to RVDM. Added support for private extensions to the OID database (oid_setprivateoids()). Thanks to RVDM. Added optional, physical ANY (key replication) Fixed null-reference problem in GRS-1 output filter. Proximity operator added to Prefix Query Format (PQF). In test client command "base" accepts multiple databases. Fixed bug in cs_close stack that caused trouble with WINSOCK. --- 1.3 1996/10/11 Fixed tagging bug in ResourceReportResponse PDU encoder/decode. Smallish bug-fixes in the new encoders/decoders (explain). Bug fixed in DeleteRequest. Fixed tagging bug of type 101 query in SearchRequest-Query PDU encoder/decoder. Fixed tagging bug in ResourceReportResponse PDU encoder/decode. Added SOIF syntax (using private OID for now) to retrieval module and client. Added Update extended service. Added SearchResult-1 additional info structure. Added optional CCL (ISO8777) interpreter as separate module. Available in linemode client. --- 1.2 1996/6/10 (1st anniversary release) Added Summary record syntax. Lightly tested. Added OPAC record syntax. Untested. Added ResourceReport service encoders/decoders. Untested. Fixed bug in z_Unit - wrong tagging on unitSystem. Fixed bug in the DiagRecs decoder. Added options for max PDU size and session timeout to frontend-server. Added documentation of query-language parsers and other supporting utilities. [frontend-server] Added Attribute set to the bend_scanrequest API. [frontend-server] NextResultSetPosition was sometimes set incorrectly when surrogate diagnostics were generated. [retrieval] Allow multiple local values for attribute. [retrieval] Allow multiple attributes per element in .abs files. index type. [retrieval] Added Summary tagset, abstract syntax, and d1-node/ASN filter. --- 1.1pl2 1996/4/10 Minor changes, mostly specific to Zebra's requirements (retrieval) --- 1.1 1996/2/20 Repaired bug in frontend server when running multiple listening endpoints in dynamic mode. z_External() now won't break if a known, ASN.1 value comes encapsulated in an octet-string. The value will pass through unmodified in an Odr_oct. Added a bit of code to the demo client to decode & display ASN.1-structured records represented in the octet-aligned branch of the EXTERNAL CHOICE. Thanks to CAS for prodding us to finally do this. Added z_ext_getentbyref() to the ASN module. Doc updated. * Completed the SCAN definition in the ASN module. This may break SCAN code based on older YAZ-versions at compile-time. The fix is easy - look in proto.h. * Added 'displayTerm' and OtherInformation to the TermInfo structure under the SCAN definition. Remember to initialize this, server-people. Comstack should now support the WAIS protocol in TCP/IP mode. Note that this does not extend to ODR and ASN. Comstack allows insertion of established socket (primarily for inetd-operation of servers). Doc updated. Front-end server can now start from the inetd in TCP mode. Doc updated. --- 1.0pl4 1996/1/24 Added Sort PDU. Fixed small problem in SUTRS-filter. A newline was sometimes inserted before the rank and record number. Adjustments to the frontend server. Fixed diagnostic BER dumper. It ignored the file argument. --- 1.0pl3 1996/1/2 Various changes to retrieval module. Changed the union discriminators of the protocol files from enums to ints paired with #defines. *Changed oident.class to oident.oclass to avoid a reserved word in C++ compilers. *Changed operator in the RPN structure to 'roperator', again to avoid a conflict with C++. Fixed problems in Explain decoders/encoders. --- 1.0pl2 1995/12/6 Memory bug in log module fixed. --- 1.0pl1 1995/12/5 Occasional malloc() of 0 bytes fixed in d1_espec.c. Bug in Explain DatabaseInfo module fixed. Some '\r' snuck into one or two of the ret'l config tables. A curse on Windows. --- 1.0 1995/11/28 The shift to v1.0 signals that we now consider the *core* functionality of YAZ reasonably stable (the core being more or less equivalent to Z39.50-1992). Some of the really nifty v3 stuff is still not heavily tested (Explain not at all - though that will happen soonish). Minor changes to code to support Windows port. Various minor changes after we're getting to use GRS-1 & co. more. Added Espec-1 format. Added VisibleString field body type to GRS-1. It is illegal acc. to my copy of the protocol and it cannot be selected when encoding (maps into 'string' when decoding). Needed to talk to some servers. Demo client can request simple element set names. Added Diagnostic Format encoders/decoders. Added simple Close handling to frontend server (no hooks for resource reporting yet), and demonstration client. Added cs_addrstr() command to COMSTACK to retrieve peer hostname/address. --- 1.0b3 1995/08/24 Fixed bug in the frontend-server. The numberOfRecordsReturned field was handled incorrectly when records were requested in the searchResponse. This will only affect you if you use the frontend-server. Added GRS-1 encoders/decoders to the service-level API. Lightly tested. Test-client will ask for and print GRS1. Ztest will return dummy records on request. Added Explain encoders/decoders to the service-level API. Untested. Added Extended Services: Item Order encoders and decoders to the Service- level API. Untested. We could use a recent copy of the pertinent bits of the ILL protocol to add those bits. Added diagnostic format 1 encoders/decoders to the service-level API. Untested. Moved pretty-printing of structure-wrappers ({..}) from odr_seq.c to odr_cons.c, which causes a more correct output. Fixed handling of searchRequest in frontend server. NextResultSetPosition was always set to 0 when no records were requested in the searchRequest. * Added better external-handling. This shouldn't harm old code that *encodes* externals. It can break code that looks for a 'single-ASN1-type' representation, since those types that are known are now decoded immediately. Look at the SUTRS sample code in seshigh.c and client.c. Documentation updated. Handling of structured records in bend_fetchresponse. Length -1 marks structured record, type is deduced from format field. --- 1.0b2 1995/06/27 Fairly quick maintenance release to add SUTRS support. Fixed handling of SUTRS records in the demonstration client. * Added format field to the bend_fetchrequest and bend_fetchresponce structures of the backend API (frontend server). When the record is returned, the value of the format field is mapped to an OID. The value VAL_SUTRS will also cause a slightly different ASN.1 packaging of the record. The special value VAL_NONE in the bend_request means that no specific format was requested by the client. Documentation updated accordingly. Test server (ztest) will return a fixed dummy SUTRS record if your client requests SUTRS. Documentation updated accordingly. You can now set external libraries and RANLIB support in the top-level Makefile. --- 1.0b 1995/06/19 First public release. yaz-4.2.30/etc/0000755000175000017500000000000011741237744010171 500000000000000yaz-4.2.30/etc/marc21_to_endnote.xsl0000644000175000017500000001515611733047144014146 00000000000000 % Electronic Resource Electronic Resource article Book 0 A A T B C I D K L P U V X @ @ yaz-4.2.30/etc/MARC21slim2RDFDC.xsl0000644000175000017500000002061511733047144013236 00000000000000 abfghk yes yes text cartographic notated music sound recording still image moving image three dimensional object software, multimedia mixed material ab abcdq abcdq abcdq abcdq abcdq abcdq abcd abcdu ot yaz-4.2.30/etc/Makefile.am0000644000175000017500000000056111733047144012141 00000000000000## This file is part of the YAZ toolkit. ## Copyright (C) 1995-2012 Index Data etcdatadir = $(pkgdatadir)/etc etcdata_DATA = \ pqf.properties \ cqlpass.properties \ yazgfs.xml \ maps.xml \ MARC21slim2DC.xsl \ MARC21slim2MODS.xsl \ MARC21slim2RDFDC.xsl \ MARC21slimUtils.xsl \ marc21_to_endnote.xsl \ opacxml.xsd EXTRA_DIST = $(etcdata_DATA) debian.init.d yaz-4.2.30/etc/yazgfs.xml0000644000175000017500000000263411654451754012145 00000000000000 tcp:@:9000 . zebra.cfg pqf.properties xsl xsl/default.xsl 2000000 myserver.org 9000 Default yaz-4.2.30/etc/MARC21slim2DC.xsl0000644000175000017500000001470011654451754012710 00000000000000 abfghk yes yes text cartographic notated music sound recording still image moving image three dimensional object software, multimedia mixed material ab abcdq abcdq abcdq abcdq abcdq abcdq abcd abcdu ot yaz-4.2.30/etc/opacxml.xsd0000644000175000017500000000675611654451754012314 00000000000000 yaz-4.2.30/etc/MARC21slimUtils.xsl0000644000175000017500000000470411733047144013433 00000000000000 yaz-4.2.30/etc/maps.xml0000644000175000017500000000157311654451754011603 00000000000000 yaz-4.2.30/etc/MARC21slim2MODS.xsl0000644000175000017500000017677411733047144013200 00000000000000 BK SE BK MM CF MP VM MU abfghk <xsl:value-of select="substring($title,@ind2+1)"/> <xsl:value-of select="$title"/> <xsl:call-template name="subfieldSelect"> <xsl:with-param name="codes">ab</xsl:with-param> </xsl:call-template> <xsl:call-template name="subfieldSelect"> <xsl:with-param name="codes">abh</xsl:with-param> </xsl:call-template> <xsl:call-template name="subfieldSelect"> <xsl:with-param name="codes">abfh</xsl:with-param> </xsl:call-template> <xsl:variable name="str"> <xsl:for-each select="marc:subfield"> <xsl:if test="(contains('adfhklmor',@code) and (not(../marc:subfield[@code='n' or @code='p']) or (following-sibling::marc:subfield[@code='n' or @code='p'])))"> <xsl:value-of select="text()"/><xsl:text> </xsl:text> </xsl:if> </xsl:for-each> </xsl:variable> <xsl:value-of select="substring($str,1,string-length($str)-1)"/> <xsl:call-template name="subfieldSelect"> <xsl:with-param name="codes">ah</xsl:with-param> </xsl:call-template> creator creator creator personal yes yes text cartographic notated music sound recording still image moving image three dimensional object software, multimedia mixed material globe remote sensing image map atlas database loose-leaf series newspaper periodical web site abstract or summary bibliography catalog dictionary encyclopedia handbook legal article index discography legislation theses survey of literature review programmed text filmography directory statistics technical report legal case and case notes law report or digest treaty conference publication numeric data database font game patent festschrift biography essay drama comic strip fiction humor, satire letter novel short story speech biography conference publication drama essay fiction folktale history humor, satire memoir poetry rehersal reporting sound speech art original kit art reproduction diorama filmstrip legal article picture graphic technical drawing motion picture chart flash card microscope slide model realia slide transparency videorecording toy abvxyz - monographic continuing ab rfc3066 iso639-2b reformatted digital
braille
electronic
microfiche
microfilm
abce
ab agrt ab adolescent adult general juvenile preschool specialized defg ab abx ab ab <xsl:call-template name="subfieldSelect"> <xsl:with-param name="codes">av</xsl:with-param> </xsl:call-template> <xsl:call-template name="part"/> <xsl:call-template name="subfieldSelect"> <xsl:with-param name="codes">av</xsl:with-param> </xsl:call-template> <xsl:call-template name="part"/> <xsl:call-template name="specialSubfieldSelect"> <xsl:with-param name="anyCodes">tfklmorsv</xsl:with-param> <xsl:with-param name="axis">t</xsl:with-param> <xsl:with-param name="afterCodes">g</xsl:with-param> </xsl:call-template> abcq t g <xsl:call-template name="specialSubfieldSelect"> <xsl:with-param name="anyCodes">tfklmorsv</xsl:with-param> <xsl:with-param name="axis">t</xsl:with-param> <xsl:with-param name="afterCodes">dg</xsl:with-param> </xsl:call-template> c t dgn <xsl:call-template name="specialSubfieldSelect"> <xsl:with-param name="anyCodes">tfklsv</xsl:with-param> <xsl:with-param name="axis">t</xsl:with-param> <xsl:with-param name="afterCodes">g</xsl:with-param> </xsl:call-template> aqdc t gn <xsl:call-template name="subfieldSelect"> <xsl:with-param name="codes">adfgklmorsv</xsl:with-param> </xsl:call-template> <xsl:value-of select="marc:subfield[@code='a']"/> <xsl:call-template name="specialSubfieldSelect"> <xsl:with-param name="anyCodes">tfklmorsv</xsl:with-param> <xsl:with-param name="axis">t</xsl:with-param> <xsl:with-param name="afterCodes">g</xsl:with-param> </xsl:call-template> abcq t g <xsl:call-template name="specialSubfieldSelect"> <xsl:with-param name="anyCodes">tfklmorsv</xsl:with-param> <xsl:with-param name="axis">t</xsl:with-param> <xsl:with-param name="afterCodes">dg</xsl:with-param> </xsl:call-template> c t dgn <xsl:call-template name="specialSubfieldSelect"> <xsl:with-param name="anyCodes">tfklsv</xsl:with-param> <xsl:with-param name="axis">t</xsl:with-param> <xsl:with-param name="afterCodes">g</xsl:with-param> </xsl:call-template> aqdc t gn <xsl:call-template name="subfieldSelect"> <xsl:with-param name="codes">adfgklmorsv</xsl:with-param> </xsl:call-template> issue number matrix number music plate music publisher videorecording identifier ab ab doi uri abj abcd35 abcde35
n n fghkdlmor p p fghkdlmor
cdn abcq acdeq constituent related <xsl:value-of select="."/> <xsl:value-of select="."/> lcsh lcshac mesh csh nal rvm abcq cdnp abcdeqnp <xsl:call-template name="subfieldSelect"> <xsl:with-param name="codes">adfhklor</xsl:with-param> </xsl:call-template> <xsl:call-template name="part"/> abcd
yaz-4.2.30/etc/debian.init.d0000755000175000017500000000222611654451754012451 00000000000000#! /bin/sh # Debian sample start/stop script for YAZ Generic Frontend Server # set -e DAEMON=/usr/local/bin/yaz-ztest NAME=yaz-ztest PIDFILE=/var/run/yaz-ztest.pid LOGFILE=/var/log/yaz-ztest.log RUNAS=nobody test -x $DAEMON || exit 0 case "$1" in start) echo -n "Starting YAZ server: " start-stop-daemon --start --pidfile $PIDFILE \ --exec $DAEMON -- \ -u $RUNAS -l $LOGFILE -D -p $PIDFILE @:210 echo "$NAME." ;; stop) echo -n "Stopping YAZ server: " start-stop-daemon --stop --pidfile $PIDFILE \ --oknodo --retry 30 --exec $DAEMON echo "$NAME." ;; restart) echo -n "Restarting YAZ server: " start-stop-daemon --stop --pidfile $PIDFILE \ --oknodo --retry 30 --exec $DAEMON start-stop-daemon --start --pidfile $PIDFILE d \ --exec $DAEMON -- \ -u $RUNAS -l $LOGFILE -D -p $PIDFILE @:210 echo "$NAME." ;; reload|force-reload) echo "Reloading $NAME configuration files" start-stop-daemon --stop --pidfile $PIDFILE \ --signal 1 --exec $DAEMON ;; *) echo "Usage: /etc/init.d/$NAME {start|stop|restart|reload}" exit 1 ;; esac exit 0 yaz-4.2.30/etc/Makefile.in0000644000175000017500000003144311741237726012163 00000000000000# Makefile.in generated by automake 1.11.3 from Makefile.am. # @configure_input@ # Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, # 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011 Free Software # Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ VPATH = @srcdir@ pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ subdir = etc DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/m4/ac_check_icu.m4 \ $(top_srcdir)/m4/acx_pthread.m4 $(top_srcdir)/m4/libtool.m4 \ $(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \ $(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \ $(top_srcdir)/m4/yaz.m4 $(top_srcdir)/m4/yaz_libxml2.m4 \ $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/include/config.h CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = SOURCES = DIST_SOURCES = am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; am__vpath_adj = case $$p in \ $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \ *) f=$$p;; \ esac; am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`; am__install_max = 40 am__nobase_strip_setup = \ srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'` am__nobase_strip = \ for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||" am__nobase_list = $(am__nobase_strip_setup); \ for p in $$list; do echo "$$p $$p"; done | \ sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \ $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \ if (++n[$$2] == $(am__install_max)) \ { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \ END { for (dir in files) print dir, files[dir] }' am__base_list = \ sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \ sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g' am__uninstall_files_from_dir = { \ test -z "$$files" \ || { test ! -d "$$dir" && test ! -f "$$dir" && test ! -r "$$dir"; } \ || { echo " ( cd '$$dir' && rm -f" $$files ")"; \ $(am__cd) "$$dir" && rm -f $$files; }; \ } am__installdirs = "$(DESTDIR)$(etcdatadir)" DATA = $(etcdata_DATA) DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ AMTAR = @AMTAR@ AR = @AR@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CYGPATH_W = @CYGPATH_W@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DLLTOOL = @DLLTOOL@ DSSSL_DIR = @DSSSL_DIR@ DSYMUTIL = @DSYMUTIL@ DTD_DIR = @DTD_DIR@ DUMPBIN = @DUMPBIN@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ FGREP = @FGREP@ GREP = @GREP@ HTML_COMPILE = @HTML_COMPILE@ ICU_CFLAGS = @ICU_CFLAGS@ ICU_CONFIG = @ICU_CONFIG@ ICU_CPPFLAGS = @ICU_CPPFLAGS@ ICU_CXXFLAGS = @ICU_CXXFLAGS@ ICU_LIBS = @ICU_LIBS@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ LD = @LD@ LDFLAGS = @LDFLAGS@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ LIPO = @LIPO@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ MAKEINFO = @MAKEINFO@ MANIFEST_TOOL = @MANIFEST_TOOL@ MAN_COMPILE = @MAN_COMPILE@ MKDIR_P = @MKDIR_P@ NM = @NM@ NMEDIT = @NMEDIT@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ OTOOL = @OTOOL@ OTOOL64 = @OTOOL64@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ PDF_COMPILE = @PDF_COMPILE@ PTHREAD_CC = @PTHREAD_CC@ PTHREAD_CFLAGS = @PTHREAD_CFLAGS@ PTHREAD_LIBS = @PTHREAD_LIBS@ RANLIB = @RANLIB@ READLINE_LIBS = @READLINE_LIBS@ SED = @SED@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ SSL_CFLAGS = @SSL_CFLAGS@ SSL_LIBS = @SSL_LIBS@ STRIP = @STRIP@ TCLSH = @TCLSH@ TCPD_LIBS = @TCPD_LIBS@ TKL_COMPILE = @TKL_COMPILE@ VERSION = @VERSION@ VERSION_HEX = @VERSION_HEX@ VERSION_SHA1 = @VERSION_SHA1@ WIN_FILEVERSION = @WIN_FILEVERSION@ XML2_CFLAGS = @XML2_CFLAGS@ XSLTPROC_COMPILE = @XSLTPROC_COMPILE@ XSL_DIR = @XSL_DIR@ YACC = @YACC@ YAZ_CONFIG_CFLAGS = @YAZ_CONFIG_CFLAGS@ YAZ_CONF_CFLAGS = @YAZ_CONF_CFLAGS@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_ct_AR = @ac_ct_AR@ ac_ct_CC = @ac_ct_CC@ ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ acx_pthread_config = @acx_pthread_config@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ pkgconfigpath = @pkgconfigpath@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ etcdatadir = $(pkgdatadir)/etc etcdata_DATA = \ pqf.properties \ cqlpass.properties \ yazgfs.xml \ maps.xml \ MARC21slim2DC.xsl \ MARC21slim2MODS.xsl \ MARC21slim2RDFDC.xsl \ MARC21slimUtils.xsl \ marc21_to_endnote.xsl \ opacxml.xsd EXTRA_DIST = $(etcdata_DATA) debian.init.d all: all-am .SUFFIXES: $(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu etc/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --gnu etc/Makefile .PRECIOUS: Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): mostlyclean-libtool: -rm -f *.lo clean-libtool: -rm -rf .libs _libs install-etcdataDATA: $(etcdata_DATA) @$(NORMAL_INSTALL) test -z "$(etcdatadir)" || $(MKDIR_P) "$(DESTDIR)$(etcdatadir)" @list='$(etcdata_DATA)'; test -n "$(etcdatadir)" || list=; \ for p in $$list; do \ if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ echo "$$d$$p"; \ done | $(am__base_list) | \ while read files; do \ echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(etcdatadir)'"; \ $(INSTALL_DATA) $$files "$(DESTDIR)$(etcdatadir)" || exit $$?; \ done uninstall-etcdataDATA: @$(NORMAL_UNINSTALL) @list='$(etcdata_DATA)'; test -n "$(etcdatadir)" || list=; \ files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \ dir='$(DESTDIR)$(etcdatadir)'; $(am__uninstall_files_from_dir) tags: TAGS TAGS: ctags: CTAGS CTAGS: distdir: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done check-am: all-am check: check-am all-am: Makefile $(DATA) installdirs: for dir in "$(DESTDIR)$(etcdatadir)"; do \ test -z "$$dir" || $(MKDIR_P) "$$dir"; \ done install: install-am install-exec: install-exec-am install-data: install-data-am uninstall: uninstall-am install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-am install-strip: if test -z '$(STRIP)'; then \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ install; \ else \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ fi mostlyclean-generic: clean-generic: distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." clean: clean-am clean-am: clean-generic clean-libtool mostlyclean-am distclean: distclean-am -rm -f Makefile distclean-am: clean-am distclean-generic dvi: dvi-am dvi-am: html: html-am html-am: info: info-am info-am: install-data-am: install-etcdataDATA install-dvi: install-dvi-am install-dvi-am: install-exec-am: install-html: install-html-am install-html-am: install-info: install-info-am install-info-am: install-man: install-pdf: install-pdf-am install-pdf-am: install-ps: install-ps-am install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-am -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-am mostlyclean-am: mostlyclean-generic mostlyclean-libtool pdf: pdf-am pdf-am: ps: ps-am ps-am: uninstall-am: uninstall-etcdataDATA .MAKE: install-am install-strip .PHONY: all all-am check check-am clean clean-generic clean-libtool \ distclean distclean-generic distclean-libtool distdir dvi \ dvi-am html html-am info info-am install install-am \ install-data install-data-am install-dvi install-dvi-am \ install-etcdataDATA install-exec install-exec-am install-html \ install-html-am install-info install-info-am install-man \ install-pdf install-pdf-am install-ps install-ps-am \ install-strip installcheck installcheck-am installdirs \ maintainer-clean maintainer-clean-generic mostlyclean \ mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \ uninstall uninstall-am uninstall-etcdataDATA # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: yaz-4.2.30/etc/cqlpass.properties0000644000175000017500000000550511654451754013704 00000000000000# Properties for pass-through index name to Bib-1 use attribute # Requires YAZ 2.1.49 or later. # Identifiers for prefixes used in this file. (index.*) set.cql = info:srw/cql-context-set/1/cql-v1.1 set.pass = http://indexdata.dk/yaz/cqlpass # The default set when an index doesn't specify one: CQL Passthrough set = http://indexdata.dk/yaz/cqlpass # The default index when none is specified by the query index.cql.serverChoice = 1=1016 index.pass.* = 1=* # Relation attributes are selected according to the CQL relation by # looking up the "relation." property: # relation.< = 2=1 relation.le = 2=2 relation.eq = 2=3 relation.exact = 2=3 relation.ge = 2=4 relation.> = 2=5 relation.<> = 2=6 # These two are what Zebra uses -- may not work on other servers relation.all = 4=6 relation.any = 4=105 # BIB-1 doesn't have a server choice relation, so we just make the # choice here, and use equality (which is clearly correct). relation.scr = 2=3 # Relation modifiers. # relationModifier.relevant = 2=102 relationModifier.fuzzy = 5=103 ### truncation=regExpr-2 (5=103) in Zebra is "fuzzy matching" relationModifier.stem = 2=101 relationModifier.phonetic = 2=100 # Non-standard extensions to provoke Zebra's inline sorting relationModifier.sort = 7=1 relationModifier.sort-desc = 7=2 relationModifier.numeric = 4=109 # Position attributes may be specified for anchored terms (those # beginning with "^", which is stripped) and unanchored (those not # beginning with "^"). This may change when we get a BIB-1 truncation # attribute that says "do what CQL does". # position.first = 3=1 6=1 # "first in field" position.any = 3=3 6=1 # "any position in field" position.last = 3=4 6=1 # not a standard BIB-1 attribute position.firstAndLast = 3=3 6=3 # search term is anchored to be complete field # Structure attributes may be specified for individual relations; a # default structure attribute my be specified by the pseudo-relation # "*", to be used whenever a relation not listed here occurs. # structure.exact = 4=108 # string structure.all = 4=2 structure.any = 4=2 structure.* = 4=1 # phrase # Truncation attributes used to implement CQL wildcard patterns. The # simpler forms, left, right- and both-truncation will be used for the # simplest patterns, so that we produce PQF queries that conform more # closely to the Bath Profile. However, when a more complex pattern # such as "foo*bar" is used, we fall back on Z39.58-style masking. # truncation.right = 5=1 truncation.left = 5=2 truncation.both = 5=3 truncation.none = 5=100 truncation.regexp = 5=102 truncation.z3958 = 5=104 # Finally, any additional attributes that should always be included # with each term can be specified in the "always" property. # always = 6=1 # 6=1: completeness = incomplete subfield yaz-4.2.30/etc/pqf.properties0000644000175000017500000001166411733065141013014 00000000000000# Properties file to drive org.z3950.zing.cql.CQLNode's toPQF() # back-end and the YAZ CQL-to-PQF converter. This specifies the # interpretation of various CQL indexes, relations, etc. in terms # of Type-1 query attributes. # # This configuration file generates queries using BIB-1 attributes. # See http://www.loc.gov/z3950/agency/zing/cql/dc-indexes.html # for the Maintenance Agency's work-in-progress mapping of Dublin Core # indexes to Attribute Architecture (util, XD and BIB-2) # attributes. # Identifiers for prefixes used in this file. (index.*) set.cql = info:srw/cql-context-set/1/cql-v1.2 set.rec = info:srw/cql-context-set/2/rec-1.1 set.dc = info:srw/cql-context-set/1/dc-v1.1 set.bath = http://zing.z3950.org/cql/bath/2.0/ # The default set when an index doesn't specify one: Dublin Core set = info:srw/cql-context-set/1/dc-v1.1 # The default index when none is specified by the query index.cql.serverChoice = 1=1016 # srw.serverChoice is deprecated in favour of cql.serverChoice # BIB-1 "any" index.cql.allRecords = 1=_ALLRECORDS 2=103 index.rec.id = 1=12 index.dc.title = 1=4 index.dc.subject = 1=21 index.dc.creator = 1=1003 index.dc.author = 1=1003 ### Unofficial synonym for "creator" index.dc.editor = 1=1020 index.dc.publisher = 1=1018 index.dc.description = 1=62 # "abstract" index.dc.date = 1=30 index.dc.resourceType = 1=1031 # guesswork: "Material-type" index.dc.format = 1=1034 # guesswork: "Content-type" index.dc.resourceIdentifier = 1=12 # "Local number" index.dc.source = 1=1019 # "Record-source" index.dc.language = 1=54 # "Code--language" index.dc.relation = 1=? ### No idea how to represent this index.dc.coverage = 1=? ### No idea how to represent this index.dc.rights = 1=? ### No idea how to represent this # Relation attributes are selected according to the CQL relation by # looking up the "relation." property: # relation.< = 2=1 relation.le = 2=2 relation.eq = 2=3 relation.exact = 2=3 relation.ge = 2=4 relation.> = 2=5 relation.<> = 2=6 # These two are what Zebra uses -- may not work on other servers relation.all = 4=6 relation.any = 4=105 # BIB-1 doesn't have a server choice relation, so we just make the # choice here, and use equality (which is clearly correct). relation.scr = 2=3 # Relation modifiers. # relationModifier.relevant = 2=102 relationModifier.fuzzy = 5=103 ### truncation=regExpr-2 (5=103) in Zebra is "fuzzy matching" relationModifier.stem = 2=101 relationModifier.phonetic = 2=100 # Non-standard extensions to provoke Zebra's inline sorting relationModifier.sort = 7=1 relationModifier.sort-desc = 7=2 relationModifier.numeric = 4=109 # Position attributes may be specified for anchored terms (those # beginning with "^", which is stripped) and unanchored (those not # beginning with "^"). This may change when we get a BIB-1 truncation # attribute that says "do what CQL does". # position.first = 3=1 6=1 # "first in field" position.any = 3=3 6=1 # "any position in field" position.last = 3=4 6=1 # not a standard BIB-1 attribute position.firstAndLast = 3=3 6=3 # search term is anchored to be complete field # Structure attributes may be specified for individual relations; a # default structure attribute my be specified by the pseudo-relation # "*", to be used whenever a relation not listed here occurs. # structure.exact = 4=108 # string structure.all = 4=2 structure.any = 4=2 structure.* = 4=1 # phrase # Truncation attributes used to implement CQL wildcard patterns. The # simpler forms, left, right- and both-truncation will be used for the # simplest patterns, so that we produce PQF queries that conform more # closely to the Bath Profile. However, when a more complex pattern # such as "foo*bar" is used, we fall back on Z39.58-style masking. # truncation.right = 5=1 truncation.left = 5=2 truncation.both = 5=3 truncation.none = 5=100 truncation.regexp = 5=102 truncation.z3958 = 5=104 # Finally, any additional attributes that should always be included # with each term can be specified in the "always" property. # always = 6=1 # 6=1: completeness = incomplete subfield # Bath Profile support, added Thu Dec 18 13:06:20 GMT 2003 # See the Bath Profile for SRW at # http://zing.z3950.org/cql/bath.html # including the Bath Context Set defined within that document. # # In this file, we only map index-names to BIB-1 use attributes, doing # so in accordance with the specifications of the Z39.50 Bath Profile, # and leaving the relations, wildcards, etc. to fend for themselves. index.bath.keyTitle = 1=33 index.bath.possessingInstitution = 1=1044 index.bath.name = 1=1002 index.bath.personalName = 1=1 index.bath.corporateName = 1=2 index.bath.conferenceName = 1=3 index.bath.uniformTitle = 1=6 index.bath.isbn = 1=7 index.bath.issn = 1=8 index.bath.geographicName = 1=58 index.bath.notes = 1=63 index.bath.topicalSubject = 1=1079 index.bath.genreForm = 1=1075 yaz-4.2.30/zoom/0000755000175000017500000000000011741237740010376 500000000000000yaz-4.2.30/zoom/zoomtst1.c0000644000175000017500000000231711733047144012263 00000000000000/* This file is part of the YAZ toolkit. * Copyright (C) 1995-2012 Index Data * See the file LICENSE for details. */ #include #include #include #include int main(int argc, char **argv) { ZOOM_connection z; ZOOM_resultset r; int error; const char *errmsg, *addinfo; if (argc != 3) { fprintf (stderr, "usage:\n%s target query\n", *argv); fprintf (stderr, " eg. bagel.indexdata.dk/gils computer\n"); exit (1); } z = ZOOM_connection_new (argv[1], 0); if ((error = ZOOM_connection_error(z, &errmsg, &addinfo))) { fprintf (stderr, "Error: %s (%d) %s\n", errmsg, error, addinfo); exit (2); } r = ZOOM_connection_search_pqf (z, argv[2]); if ((error = ZOOM_connection_error(z, &errmsg, &addinfo))) fprintf (stderr, "Error: %s (%d) %s\n", errmsg, error, addinfo); else printf ("Result count: %ld\n", (long) ZOOM_resultset_size(r)); ZOOM_resultset_destroy (r); ZOOM_connection_destroy (z); exit (0); } /* * Local variables: * c-basic-offset: 4 * c-file-style: "Stroustrup" * indent-tabs-mode: nil * End: * vim: shiftwidth=4 tabstop=8 expandtab */ yaz-4.2.30/zoom/Makefile.am0000644000175000017500000000147111733047144012353 00000000000000## This file is part of the YAZ toolkit. ## Copyright (C) 1995-2012 Index Data AM_CPPFLAGS = -I$(top_srcdir)/include $(XML2_CFLAGS) bin_PROGRAMS = zoomsh noinst_PROGRAMS = zoomtst1 zoomtst2 zoomtst3 zoomtst4 zoomtst5 zoomtst6 zoomtst7 zoomtst8 zoomtst9 zoomtst10 zoomtst11 zoom-benchmark zoom-ka zoom-bug-641 LDADD = ../src/libyaz.la $(READLINE_LIBS) zoomtst1_SOURCES = zoomtst1.c zoomtst2_SOURCES = zoomtst2.c zoomtst3_SOURCES = zoomtst3.c zoomtst4_SOURCES = zoomtst4.c zoomtst5_SOURCES = zoomtst5.c zoomtst6_SOURCES = zoomtst6.c zoomtst7_SOURCES = zoomtst7.c zoomtst8_SOURCES = zoomtst8.c zoomtst9_SOURCES = zoomtst9.c zoomtst10_SOURCES = zoomtst10.c zoomtst11_SOURCES = zoomtst11.c zoomsh_SOURCES = zoomsh.c zoom_benchmark_SOURCES = zoom-benchmark.c zoom_ka_SOURCES = zoom-ka.c zoom_bug_641_SOURCES = zoom-bug-641.c yaz-4.2.30/zoom/zoom-bug-641.c0000644000175000017500000000443411733047144012534 00000000000000/* This file is part of the YAZ toolkit. * Copyright (C) 1995-2012 Index Data * See the file LICENSE for details. */ #include #include #include #include #include #include #include #ifdef WIN32 #error Unix only #endif int main(int argc, char **argv) { ZOOM_connection z; int i, error; const char *errmsg, *addinfo; if (argc < 3) { fprintf(stderr, "Usage:\n%s [ ...]\n", argv[0]); fprintf(stderr, " eg. bagel.indexdata.dk/gils foo.xml bar.xml\n"); return 1; } z = ZOOM_connection_create(0); for (i = 2; i < argc; i++) { char *buf, *fn = argv[i]; struct stat statbuf; size_t size, offset = 0; int fd, n; ZOOM_connection_connect(z, argv[1], 0); if ((error = ZOOM_connection_error(z, &errmsg, &addinfo))) { fprintf(stderr, "Error: %s (%d) %s\n", errmsg, error, addinfo); return 2; } if (stat(fn, &statbuf) < 0 || (fd = open(fn, O_RDONLY)) < 0) { perror(fn); return 3; } size = statbuf.st_size; printf("size=%lu\n", (unsigned long) size); buf = (char *) xmalloc(size+1); while ((n = read(fd, &buf[offset], size)) < size) { if (n < 0) { perror("read"); return 4; } size -= n; offset += n; } close(fd); buf[size] = 0; { ZOOM_package pkg = ZOOM_connection_package(z, 0); ZOOM_package_option_set(pkg, "action", "specialUpdate"); ZOOM_package_option_set(pkg, "record", buf); ZOOM_package_send(pkg, "update"); if ((error = ZOOM_connection_error(z, &errmsg, &addinfo))) { printf("file '%s': error %d (%s) %s\n", fn, error, errmsg, addinfo); } else { printf("file '%s': ok\n", fn); } } xfree(buf); if (i < argc-1) sleep(2); } ZOOM_connection_destroy(z); return 0; } /* * Local variables: * c-basic-offset: 4 * c-file-style: "Stroustrup" * indent-tabs-mode: nil * End: * vim: shiftwidth=4 tabstop=8 expandtab */ yaz-4.2.30/zoom/zoomtst4.c0000644000175000017500000000473211733047144012271 00000000000000/* This file is part of the YAZ toolkit. * Copyright (C) 1995-2012 Index Data * See the file LICENSE for details. */ #include #include #include #include const char *my_callback (void *handle, const char *name) { if (!strcmp (name, "async")) return "1"; return 0; } int main(int argc, char **argv) { int i; int no = argc-3; ZOOM_connection z[500]; /* allow at most 500 connections */ ZOOM_resultset r[500]; /* and result sets .. */ ZOOM_query q; ZOOM_options o = ZOOM_options_create (); if (argc < 4) { fprintf (stderr, "usage:\n%s proxy target1 .. targetN query\n", *argv); exit (2); } if (no > 500) no = 500; /* function my_callback called when reading options .. */ ZOOM_options_set_callback (o, my_callback, 0); /* get 20 (at most) records from offset 5 */ ZOOM_options_set (o, "start", "5"); ZOOM_options_set (o, "count", "20"); ZOOM_options_set (o, "schema", "gils-schema"); ZOOM_options_set (o, "elementSetName", "F"); /* set proxy */ ZOOM_options_set (o, "proxy", argv[1]); /* create query */ q = ZOOM_query_create (); if (ZOOM_query_prefix (q, argv[argc-1])) { printf ("bad PQF: %s\n", argv[argc-1]); exit (1); } /* connect - and search all */ for (i = 0; i #include #include int main(int argc, char **argv) { ZOOM_connection z; ZOOM_resultset r; int error; const char *errmsg, *addinfo, *diagset; if (argc < 3) { fprintf (stderr, "usage:\n%s target query\n", *argv); fprintf (stderr, "Verify: asynchronous single-target client\n"); exit (1); } /* create connection (don't connect yet) */ z = ZOOM_connection_create(0); /* option: set sru/get operation (only applicable if http: is used) */ ZOOM_connection_option_set (z, "sru", "post"); /* option: set async operation */ ZOOM_connection_option_set (z, "async", "1"); /* connect to target and initialize */ ZOOM_connection_connect (z, argv[1], 0); /* search using prefix query format */ r = ZOOM_connection_search_pqf (z, argv[2]); /* block here: only one connection */ while (ZOOM_event (1, &z)) ; /* see if any error occurred */ if ((error = ZOOM_connection_error_x(z, &errmsg, &addinfo, &diagset))) { fprintf (stderr, "Error: %s: %s (%d) %s\n", diagset, errmsg, error, addinfo); exit (2); } else /* OK print hit count */ printf ("Result count: %ld\n", (long) ZOOM_resultset_size(r)); ZOOM_resultset_destroy (r); ZOOM_connection_destroy (z); exit (0); } /* * Local variables: * c-basic-offset: 4 * c-file-style: "Stroustrup" * indent-tabs-mode: nil * End: * vim: shiftwidth=4 tabstop=8 expandtab */ yaz-4.2.30/zoom/zoomtst3.c0000644000175000017500000000664711733047144012277 00000000000000/* This file is part of the YAZ toolkit. * Copyright (C) 1995-2012 Index Data * See the file LICENSE for details. */ #include #include #include #include #include #include int main(int argc, char **argv) { int i; int same_target = 0; int no = argc-2; ZOOM_connection z[500]; /* allow at most 500 connections */ ZOOM_resultset r[500]; /* and result sets .. */ ZOOM_options o = ZOOM_options_create (); if (argc < 3) { fprintf (stderr, "usage:\n%s target1 target2 ... targetN query\n" "%s number target query\n", *argv, *argv); exit (1); } if (argc == 4 && yaz_isdigit(argv[1][0]) && !strchr(argv[1],'.')) { no = atoi(argv[1]); same_target = 1; } if (no > 500) no = 500; /* async mode */ ZOOM_options_set (o, "async", "1"); /* get first 10 records of result set (using piggyback) */ ZOOM_options_set (o, "count", "10"); ZOOM_options_set (o, "step", "5"); /* preferred record syntax */ ZOOM_options_set (o, "preferredRecordSyntax", "usmarc"); ZOOM_options_set (o, "elementSetName", "F"); /* connect to all */ for (i = 0; i #include #include void probe_package(ZOOM_connection z) { int i; for (i = 1; i<10; i++) { ZOOM_package pkg = ZOOM_connection_package(z, 0); ZOOM_package_option_set(pkg, "action", "recordInsert"); ZOOM_package_option_set(pkg, "record", "1234"); ZOOM_package_send(pkg, "update"); } } void probe_search(ZOOM_connection z, int start, int error) { char pqf_str[100]; ZOOM_resultset set; /* provoke error with yaz-ztest */ if (error) ZOOM_connection_option_set(z, "databaseName", "x"); sprintf(pqf_str, "@attr 1=%d water", start); printf("sending search %s\n", pqf_str); set = ZOOM_connection_search_pqf (z, pqf_str); ZOOM_resultset_destroy(set); /* restore database */ if (error) ZOOM_connection_option_set(z, "databaseName", "Default"); } int main(int argc, char **argv) { ZOOM_connection z; int error; int use = 0; const char *errmsg, *addinfo, *diagset; if (argc < 2) { fprintf (stderr, "usage:\n%s target\n", *argv); fprintf (stderr, "Verify: asynchronous single-target client\n"); exit (1); } /* create connection (don't connect yet) */ z = ZOOM_connection_create(0); /* option: set sru/get operation (only applicable if http: is used) */ ZOOM_connection_option_set (z, "sru", "post"); /* option: set async operation */ ZOOM_connection_option_set (z, "async", "1"); /* connect to target and initialize */ ZOOM_connection_connect (z, argv[1], 0); probe_search(z, use, 1); /* block here: only one connection */ while (ZOOM_event (1, &z)) { int ev = ZOOM_connection_last_event(z); int idle = ZOOM_connection_is_idle(z); /* see if any error occurred */ if ((error = ZOOM_connection_error_x(z, &errmsg, &addinfo, &diagset))) { fprintf (stderr, "Error: %s: %s (%d) %s\n", diagset, errmsg, error, addinfo); } if (ev == ZOOM_EVENT_RECV_SEARCH) { if (error == 0) printf ("Search OK\n"); printf("idle=%d\n", idle); } if (idle) { ZOOM_connection_connect(z, 0, 0); /* allow reconnect */ if (++use <= 10) { probe_search(z, use, use&1); } printf("Press enter\n"); getchar(); } } ZOOM_connection_destroy (z); exit (0); } /* * Local variables: * c-basic-offset: 4 * c-file-style: "Stroustrup" * indent-tabs-mode: nil * End: * vim: shiftwidth=4 tabstop=8 expandtab */ yaz-4.2.30/zoom/zoom-benchmark.c0000644000175000017500000002757611733047144013415 00000000000000/* This file is part of the YAZ toolkit. * Copyright (C) 1995-2012 Index Data * See the file LICENSE for details. */ #if HAVE_CONFIG_H #include #endif #include #include #include #include #include #include #include /* naming events */ static char* zoom_events[ZOOM_EVENT_MAX+1]; /* re-sorting event numbers to progress numbers */ static int zoom_progress[ZOOM_EVENT_MAX+1]; /* commando line parameters */ static struct parameters_t { char host[1024]; char query[1024]; int progress[4096]; int concurrent; int repeat; int timeout; char proxy[1024]; int piggypack; int gnuplot; } parameters; struct event_line_t { int connection; long time_sec; long time_usec; int progress; int event; char zoom_event[128]; int error; char errmsg[128]; }; void print_event_line(struct event_line_t *pel) { printf ("%d\t%ld.%06ld\t%d\t%d\t%s\t%d\t%s\n", pel->connection, pel->time_sec, pel->time_usec, pel->progress, pel->event, pel->zoom_event, pel->error, pel->errmsg); } void update_events(int *elc, struct event_line_t *els, int repeat, int conn, long sec, long usec, int prog, int event, const char * eventmsg, int error, const char * errmsg){ int ielc = repeat*parameters.concurrent + conn; int iels = repeat*parameters.concurrent*10 + conn*10 + elc[ielc]; els[iels].connection = conn; els[iels].time_sec = sec; els[iels].time_usec = usec; els[iels].progress = prog; els[iels].event = event; if (eventmsg) strcpy(els[iels].zoom_event, eventmsg); else strcpy(els[iels].zoom_event, "---"); els[iels].error = error; strcpy(els[iels].errmsg, errmsg); /* print_event_line(&els[iels]); */ elc[ielc] += 1; } void print_events(int *elc, struct event_line_t *els, int connections){ int i; int j; int k; int ielc; int iels; for (k=0; k < parameters.repeat; k++){ for (i=0; i < connections; i++){ ielc = k * parameters.concurrent + i; for (j=0; j < elc[ielc]; j++){ iels = k * parameters.concurrent * 10 + i * 10 + j; print_event_line(&els[iels]); } printf("\n"); } printf("\n"); } } void init_statics(void) { int i; char nullstring[1] = ""; /* naming events */ zoom_events[ZOOM_EVENT_NONE] = "ZOOM_EVENT_NONE"; zoom_events[ZOOM_EVENT_CONNECT] = "ZOOM_EVENT_CONNECT"; zoom_events[ZOOM_EVENT_SEND_DATA] = "ZOOM_EVENT_SEND_DATA"; zoom_events[ZOOM_EVENT_RECV_DATA] = "ZOOM_EVENT_RECV_DATA"; zoom_events[ZOOM_EVENT_TIMEOUT] = "ZOOM_EVENT_TIMEOUT"; zoom_events[ZOOM_EVENT_UNKNOWN] = "ZOOM_EVENT_UNKNOWN"; zoom_events[ZOOM_EVENT_SEND_APDU] = "ZOOM_EVENT_SEND_APDU"; zoom_events[ZOOM_EVENT_RECV_APDU] = "ZOOM_EVENT_RECV_APDU"; zoom_events[ZOOM_EVENT_RECV_RECORD] = "ZOOM_EVENT_RECV_RECORD"; zoom_events[ZOOM_EVENT_RECV_SEARCH] = "ZOOM_EVENT_RECV_SEARCH"; zoom_events[ZOOM_EVENT_END] = "ZOOM_EVENT_END"; /* re-sorting event numbers to progress numbers */ zoom_progress[ZOOM_EVENT_NONE] = 0; zoom_progress[ZOOM_EVENT_CONNECT] = 1; zoom_progress[ZOOM_EVENT_SEND_DATA] = 3; zoom_progress[ZOOM_EVENT_RECV_DATA] = 4; zoom_progress[ZOOM_EVENT_TIMEOUT] = 9; zoom_progress[ZOOM_EVENT_UNKNOWN] = 10; zoom_progress[ZOOM_EVENT_SEND_APDU] = 2; zoom_progress[ZOOM_EVENT_RECV_APDU] = 5; zoom_progress[ZOOM_EVENT_RECV_RECORD] = 7; zoom_progress[ZOOM_EVENT_RECV_SEARCH] = 6; zoom_progress[ZOOM_EVENT_END] = 8; /* parameters */ parameters.concurrent = 1; parameters.timeout = 0; parameters.repeat = 1; strcpy(parameters.proxy, nullstring); parameters.gnuplot = 0; parameters.piggypack = 0; /* progress initializing */ for (i = 0; i < 4096; i++){ parameters.progress[i] = 0; } } struct time_type { struct timeval now; struct timeval then; long sec; long usec; }; void time_init(struct time_type *ptime) { gettimeofday(&(ptime->now), 0); gettimeofday(&(ptime->then), 0); ptime->sec = 0; ptime->usec = 0; } void time_stamp(struct time_type *ptime) { gettimeofday(&(ptime->now), 0); ptime->sec = ptime->now.tv_sec - ptime->then.tv_sec; ptime->usec = ptime->now.tv_usec - ptime->then.tv_usec; if (ptime->usec < 0){ ptime->sec--; ptime->usec += 1000000; } } long time_sec(struct time_type *ptime) { return ptime->sec; } long time_usec(struct time_type *ptime) { return ptime->usec; } void print_option_error(void) { fprintf(stderr, "zoom-benchmark: Call error\n"); fprintf(stderr, "zoom-benchmark -h host:port -q pqf-query " "[-c no_concurrent (max 4096)] " "[-n no_repeat] " "[-b (piggypack)] " "[-g (gnuplot outfile)] " "[-p proxy] \n"); /* "[-t timeout] \n"); */ exit(1); } void read_params(int argc, char **argv, struct parameters_t *p_parameters){ char *arg; int ret; while ((ret = options("h:q:c:t:p:bgn:", argv, argc, &arg)) != -2) { switch (ret) { case 'h': strcpy(p_parameters->host, arg); break; case 'q': strcpy(p_parameters->query, arg); break; case 'p': strcpy(p_parameters->proxy, arg); break; case 'c': p_parameters->concurrent = atoi(arg); break; #if 0 case 't': p_parameters->timeout = atoi(arg); break; #endif case 'b': p_parameters->piggypack = 1; break; case 'g': p_parameters->gnuplot = 1; break; case 'n': p_parameters->repeat = atoi(arg); break; case 0: print_option_error(); break; default: print_option_error(); } } if(0){ printf("zoom-benchmark\n"); printf(" host: %s \n", p_parameters->host); printf(" query: %s \n", p_parameters->query); printf(" concurrent: %d \n", p_parameters->concurrent); printf(" repeat: %d \n", p_parameters->repeat); #if 0 printf(" timeout: %d \n", p_parameters->timeout); #endif printf(" proxy: %s \n", p_parameters->proxy); printf(" piggypack: %d \n\n", p_parameters->piggypack); printf(" gnuplot: %d \n\n", p_parameters->gnuplot); } if (! strlen(p_parameters->host)) print_option_error(); if (! strlen(p_parameters->query)) print_option_error(); if (! (p_parameters->concurrent > 0)) print_option_error(); if (! (p_parameters->repeat > 0)) print_option_error(); if (! (p_parameters->timeout >= 0)) print_option_error(); if (! ( p_parameters->concurrent <= 4096)) print_option_error(); } void print_table_header(void) { if (parameters.gnuplot) printf("#"); printf ("target\tsecond.usec\tprogress\tevent\teventname\t"); printf("error\terrorname\n"); } int main(int argc, char **argv) { struct time_type time; ZOOM_connection *z; ZOOM_resultset *r; int *elc; struct event_line_t *els; ZOOM_options o; int i; int k; init_statics(); read_params(argc, argv, ¶meters); z = (ZOOM_connection *) xmalloc(sizeof(*z) * parameters.concurrent); r = (ZOOM_resultset *) xmalloc(sizeof(*r) * parameters.concurrent); elc = (int *) xmalloc(sizeof(*elc) * parameters.concurrent * parameters.repeat); els = (struct event_line_t *) xmalloc( sizeof(*els) * parameters.concurrent * parameters.repeat * 10); o = ZOOM_options_create(); /* async mode */ ZOOM_options_set (o, "async", "1"); /* get first record of result set (using piggypack) */ if (parameters.piggypack) ZOOM_options_set (o, "count", "1"); /* set proxy */ if (strlen(parameters.proxy)) ZOOM_options_set (o, "proxy", parameters.proxy); /* preferred record syntax */ if (0){ ZOOM_options_set (o, "preferredRecordSyntax", "usmarc"); ZOOM_options_set (o, "elementSetName", "F"); } time_init(&time); /* repeat loop */ for (k = 0; k < parameters.repeat; k++){ /* progress zeroing */ for (i = 0; i < 4096; i++){ parameters.progress[i] = k * 5 -1; } /* connect to all concurrent connections*/ for ( i = 0; i < parameters.concurrent; i++){ /* set event count to zero */ elc[k * parameters.concurrent + i] = 0; /* create connection - pass options (they are the same for all) */ z[i] = ZOOM_connection_create(o); /* connect and init */ ZOOM_connection_connect(z[i], parameters.host, 0); } /* search all */ for (i = 0; i < parameters.concurrent; i++) r[i] = ZOOM_connection_search_pqf (z[i], parameters.query); /* network I/O. pass number of connections and array of connections */ while ((i = ZOOM_event (parameters.concurrent, z))){ int event = ZOOM_connection_last_event(z[i-1]); const char *errmsg; const char *addinfo; int error = 0; //int progress = zoom_progress[event]; if (event == ZOOM_EVENT_SEND_DATA || event == ZOOM_EVENT_RECV_DATA) continue; time_stamp(&time); /* updating events and event list */ error = ZOOM_connection_error(z[i-1] , &errmsg, &addinfo); if (error) parameters.progress[i] = zoom_progress[ZOOM_EVENT_UNKNOWN]; //parameters.progress[i] = zoom_progress[ZOOM_EVENT_NONE]; else if (event == ZOOM_EVENT_CONNECT) parameters.progress[i] = zoom_progress[event]; else //parameters.progress[i] = zoom_progress[event]; parameters.progress[i] += 1; update_events(elc, els, k, i-1, time_sec(&time), time_usec(&time), parameters.progress[i], event, zoom_events[event], error, errmsg); } /* destroy connections */ for (i = 0; i #include #include #include #include #include static void usage(void) { fprintf(stderr, "usage:\n" "zoomtst9 target [insert|delete|replace|update] id1 rec1 " "id2 rec2 ..\n"); fprintf(stderr, "\nThis program illustrates the usage of" " extended services Update from ZOOM.\n"); fprintf(stderr, "\nid " "is optional opaque record Id and is omitted if empty.\n"); fprintf(stderr, "\nrec " "is optional record data and is omitted if empty.\n"); exit (1); } int main(int argc, char **argv) { ZOOM_connection z; ZOOM_options o = ZOOM_options_create (); int error; const char *errmsg, *addinfo; if (argc < 3) usage(); z = ZOOM_connection_create (o); /* connect and init */ ZOOM_connection_connect (z, argv[1], 0); if ((error = ZOOM_connection_error(z, &errmsg, &addinfo))) { fprintf(stderr, "%s error: %s (%d) %s\n", ZOOM_connection_option_get(z, "host"), errmsg, error, addinfo); } else { ZOOM_package pkg = ZOOM_connection_package(z, 0); const char *cmd = argv[2]; int i; if (!strcmp(cmd, "insert")) ZOOM_package_option_set(pkg, "action", "recordInsert"); else if (!strcmp(cmd, "update")) ZOOM_package_option_set(pkg, "action", "specialUpdate"); else if (!strcmp(cmd, "replace")) ZOOM_package_option_set(pkg, "action", "recordReplace"); else if (!strcmp(cmd, "delete")) ZOOM_package_option_set(pkg, "action", "recordDelete"); else { fprintf(stderr, "Bad action %s\n", cmd); usage(); } i = 3; while (i < argc-1) { ZOOM_package_option_set(pkg, "recordIdOpaque", argv[i][0] ? argv[i] : 0); i++; if (!strcmp(argv[i], "-")) { /* For -, read record buffer from stdin */ WRBUF w = wrbuf_alloc(); int ch; while ((ch = getchar()) != EOF) wrbuf_putc(w, ch); wrbuf_putc(w, '\0'); ZOOM_package_option_set(pkg, "record", wrbuf_buf(w)); } else { ZOOM_package_option_set(pkg, "record", argv[i][0] ? argv[i] : 0); } i++; ZOOM_package_send(pkg, "update"); /* Update EXT service */ if ((error = ZOOM_connection_error(z, &errmsg, &addinfo))) { fprintf(stderr, "%s error: %s (%d) %s\n", ZOOM_connection_option_get(z, "host"), errmsg, error, addinfo); } } } ZOOM_connection_destroy (z); ZOOM_options_destroy(o); exit (0); } /* * Local variables: * c-basic-offset: 4 * c-file-style: "Stroustrup" * indent-tabs-mode: nil * End: * vim: shiftwidth=4 tabstop=8 expandtab */ yaz-4.2.30/zoom/zoomtst7.c0000644000175000017500000001231111733047144012264 00000000000000/* This file is part of the YAZ toolkit. * Copyright (C) 1995-2012 Index Data * See the file LICENSE for details. */ #include #include #include #include #include #include #include int main(int argc, char **argv) { int block; int i, j; ZOOM_connection z; ZOOM_resultset r[10]; /* and result sets .. */ ZOOM_options o; o = ZOOM_options_create (); z = ZOOM_connection_new ("localhost", 9999); if (ZOOM_connection_error (z, 0, 0)) { printf ("error - couldn't connect?\n"); exit (1); } ZOOM_connection_destroy (z); for (block = 0; block < 3; block++) { switch (block) { case 0: printf ("blocking - not calling ZOOM_events\n"); break; case 1: printf ("blocking - calling ZOOM_events\n"); break; case 2: printf ("non-blocking - calling ZOOM_events\n"); break; } if (block > 1) ZOOM_options_set (o, "async", "1"); for (i = 0; i<10; i++) { char host[40]; printf ("session %2d", i); sprintf (host, "localhost:9999/%d", i); z = ZOOM_connection_create (o); ZOOM_connection_connect (z, host, 0); for (j = 0; j < 10; j++) { ZOOM_record recs[2]; char query[40]; ZOOM_query s = ZOOM_query_create (); sprintf (query, "i%dr%d", i, j); if (ZOOM_query_prefix (s, query)) { printf ("bad PQF: %s\n", query); exit (2); } ZOOM_options_set (o, "start", "0"); ZOOM_options_set (o, "count", "0"); r[j] = ZOOM_connection_search (z, s); /* non-piggy */ ZOOM_resultset_records (r[j], recs, 0, 2); /* first two */ ZOOM_resultset_records (r[j], recs, 1, 2); /* third */ ZOOM_resultset_records (r[j], recs, 0, 0); /* ignored */ if (ZOOM_resultset_size (r[j]) > 2) { if (!recs[0]) { fprintf (stderr, "\nrecord missing\n"); exit (1); } } ZOOM_query_destroy (s); printf ("."); if (block > 0) while (ZOOM_event (1, &z)) ; } for (j = 0; j 0) while (ZOOM_event (1, &z)) ; } ZOOM_connection_destroy (z); for (j = 0; j < 10; j++) { ZOOM_resultset_records (r[j], 0, 0, 1); } for (j = 0; j < 10; j++) ZOOM_resultset_destroy (r[j]); ZOOM_query_destroy (q); printf ("10 searches, 10 ignored presents done\n"); } for (i = 0; i<1; i++) { char host[40]; ZOOM_scanset scan = 0; printf ("session %2d", i); sprintf (host, "localhost:9999/%d", i); z = ZOOM_connection_create (o); ZOOM_connection_connect (z, host, 0); scan = ZOOM_connection_scan(z, "@attr 1=4 a"); if (block > 0) while (ZOOM_event (1, &z)) ; printf (" scan size = %ld\n", (long) ZOOM_scanset_size(scan)); for (j = 0; j < (int) ZOOM_scanset_size (scan); j++) { size_t len; size_t occur; const char *term; term = ZOOM_scanset_term (scan, j, &occur, &len); if (term) printf ("%d %.*s %d\n", j, (int) len, term, (int) occur); } ZOOM_scanset_destroy (scan); ZOOM_connection_destroy (z); } } ZOOM_options_destroy (o); exit (0); } /* * Local variables: * c-basic-offset: 4 * c-file-style: "Stroustrup" * indent-tabs-mode: nil * End: * vim: shiftwidth=4 tabstop=8 expandtab */ yaz-4.2.30/zoom/zoomtst8.c0000644000175000017500000000466311733047144012300 00000000000000/* This file is part of the YAZ toolkit. * Copyright (C) 1995-2012 Index Data * See the file LICENSE for details. */ #include #include #include #include #include int main(int argc, char **argv) { int i; int no = argc-2; ZOOM_connection z[500]; /* allow at most 500 connections */ ZOOM_scanset s[500]; /* and scan sets .. */ ZOOM_options o = ZOOM_options_create (); if (argc < 3) { fprintf (stderr, "usage:\n%s target1 target2 ... targetN scan\n", *argv); exit (1); } if (no > 500) no = 500; /* async mode */ ZOOM_options_set (o, "async", "1"); /* connect to all */ for (i = 0; i #include #include #include int main(int argc, char **argv) { ZOOM_connection z; ZOOM_resultset r; ZOOM_query q = ZOOM_query_create(); int error; const char *errmsg, *addinfo; int ccl_error_code, ccl_error_pos; const char *ccl_error_string; if (argc != 3) { fprintf (stderr, "usage:\n%s target cclquery\n", *argv); fprintf (stderr, " eg. bagel.indexdata.dk/gils \"ti=utah\"\n"); exit (1); } if (ZOOM_query_ccl2rpn(q, argv[2], "term t=l,r s=al\n" "ti u=4 s=pw\n", &ccl_error_code, &ccl_error_string, &ccl_error_pos)) { printf("CCL Error %d: %s\n", ccl_error_code, ccl_error_string); if (ccl_error_pos >= 0) printf("%s\n%*s^\n", argv[2], ccl_error_pos, ""); ZOOM_query_destroy(q); } else { z = ZOOM_connection_new (argv[1], 0); if ((error = ZOOM_connection_error(z, &errmsg, &addinfo))) { fprintf (stderr, "Error: %s (%d) %s\n", errmsg, error, addinfo); exit (2); } r = ZOOM_connection_search (z, q); ZOOM_query_destroy(q); if ((error = ZOOM_connection_error(z, &errmsg, &addinfo))) fprintf (stderr, "Error: %s (%d) %s\n", errmsg, error, addinfo); else printf ("Result count: %ld\n", (long) ZOOM_resultset_size(r)); ZOOM_resultset_destroy (r); ZOOM_connection_destroy (z); } exit (0); } /* * Local variables: * c-basic-offset: 4 * c-file-style: "Stroustrup" * indent-tabs-mode: nil * End: * vim: shiftwidth=4 tabstop=8 expandtab */ yaz-4.2.30/zoom/Makefile.in0000644000175000017500000006051211741237726012373 00000000000000# Makefile.in generated by automake 1.11.3 from Makefile.am. # @configure_input@ # Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, # 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011 Free Software # Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ VPATH = @srcdir@ pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ bin_PROGRAMS = zoomsh$(EXEEXT) noinst_PROGRAMS = zoomtst1$(EXEEXT) zoomtst2$(EXEEXT) \ zoomtst3$(EXEEXT) zoomtst4$(EXEEXT) zoomtst5$(EXEEXT) \ zoomtst6$(EXEEXT) zoomtst7$(EXEEXT) zoomtst8$(EXEEXT) \ zoomtst9$(EXEEXT) zoomtst10$(EXEEXT) zoomtst11$(EXEEXT) \ zoom-benchmark$(EXEEXT) zoom-ka$(EXEEXT) zoom-bug-641$(EXEEXT) subdir = zoom DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/m4/ac_check_icu.m4 \ $(top_srcdir)/m4/acx_pthread.m4 $(top_srcdir)/m4/libtool.m4 \ $(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \ $(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \ $(top_srcdir)/m4/yaz.m4 $(top_srcdir)/m4/yaz_libxml2.m4 \ $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/include/config.h CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = am__installdirs = "$(DESTDIR)$(bindir)" PROGRAMS = $(bin_PROGRAMS) $(noinst_PROGRAMS) am_zoom_benchmark_OBJECTS = zoom-benchmark.$(OBJEXT) zoom_benchmark_OBJECTS = $(am_zoom_benchmark_OBJECTS) zoom_benchmark_LDADD = $(LDADD) am__DEPENDENCIES_1 = zoom_benchmark_DEPENDENCIES = ../src/libyaz.la $(am__DEPENDENCIES_1) am_zoom_bug_641_OBJECTS = zoom-bug-641.$(OBJEXT) zoom_bug_641_OBJECTS = $(am_zoom_bug_641_OBJECTS) zoom_bug_641_LDADD = $(LDADD) zoom_bug_641_DEPENDENCIES = ../src/libyaz.la $(am__DEPENDENCIES_1) am_zoom_ka_OBJECTS = zoom-ka.$(OBJEXT) zoom_ka_OBJECTS = $(am_zoom_ka_OBJECTS) zoom_ka_LDADD = $(LDADD) zoom_ka_DEPENDENCIES = ../src/libyaz.la $(am__DEPENDENCIES_1) am_zoomsh_OBJECTS = zoomsh.$(OBJEXT) zoomsh_OBJECTS = $(am_zoomsh_OBJECTS) zoomsh_LDADD = $(LDADD) zoomsh_DEPENDENCIES = ../src/libyaz.la $(am__DEPENDENCIES_1) am_zoomtst1_OBJECTS = zoomtst1.$(OBJEXT) zoomtst1_OBJECTS = $(am_zoomtst1_OBJECTS) zoomtst1_LDADD = $(LDADD) zoomtst1_DEPENDENCIES = ../src/libyaz.la $(am__DEPENDENCIES_1) am_zoomtst10_OBJECTS = zoomtst10.$(OBJEXT) zoomtst10_OBJECTS = $(am_zoomtst10_OBJECTS) zoomtst10_LDADD = $(LDADD) zoomtst10_DEPENDENCIES = ../src/libyaz.la $(am__DEPENDENCIES_1) am_zoomtst11_OBJECTS = zoomtst11.$(OBJEXT) zoomtst11_OBJECTS = $(am_zoomtst11_OBJECTS) zoomtst11_LDADD = $(LDADD) zoomtst11_DEPENDENCIES = ../src/libyaz.la $(am__DEPENDENCIES_1) am_zoomtst2_OBJECTS = zoomtst2.$(OBJEXT) zoomtst2_OBJECTS = $(am_zoomtst2_OBJECTS) zoomtst2_LDADD = $(LDADD) zoomtst2_DEPENDENCIES = ../src/libyaz.la $(am__DEPENDENCIES_1) am_zoomtst3_OBJECTS = zoomtst3.$(OBJEXT) zoomtst3_OBJECTS = $(am_zoomtst3_OBJECTS) zoomtst3_LDADD = $(LDADD) zoomtst3_DEPENDENCIES = ../src/libyaz.la $(am__DEPENDENCIES_1) am_zoomtst4_OBJECTS = zoomtst4.$(OBJEXT) zoomtst4_OBJECTS = $(am_zoomtst4_OBJECTS) zoomtst4_LDADD = $(LDADD) zoomtst4_DEPENDENCIES = ../src/libyaz.la $(am__DEPENDENCIES_1) am_zoomtst5_OBJECTS = zoomtst5.$(OBJEXT) zoomtst5_OBJECTS = $(am_zoomtst5_OBJECTS) zoomtst5_LDADD = $(LDADD) zoomtst5_DEPENDENCIES = ../src/libyaz.la $(am__DEPENDENCIES_1) am_zoomtst6_OBJECTS = zoomtst6.$(OBJEXT) zoomtst6_OBJECTS = $(am_zoomtst6_OBJECTS) zoomtst6_LDADD = $(LDADD) zoomtst6_DEPENDENCIES = ../src/libyaz.la $(am__DEPENDENCIES_1) am_zoomtst7_OBJECTS = zoomtst7.$(OBJEXT) zoomtst7_OBJECTS = $(am_zoomtst7_OBJECTS) zoomtst7_LDADD = $(LDADD) zoomtst7_DEPENDENCIES = ../src/libyaz.la $(am__DEPENDENCIES_1) am_zoomtst8_OBJECTS = zoomtst8.$(OBJEXT) zoomtst8_OBJECTS = $(am_zoomtst8_OBJECTS) zoomtst8_LDADD = $(LDADD) zoomtst8_DEPENDENCIES = ../src/libyaz.la $(am__DEPENDENCIES_1) am_zoomtst9_OBJECTS = zoomtst9.$(OBJEXT) zoomtst9_OBJECTS = $(am_zoomtst9_OBJECTS) zoomtst9_LDADD = $(LDADD) zoomtst9_DEPENDENCIES = ../src/libyaz.la $(am__DEPENDENCIES_1) DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir)/include depcomp = $(SHELL) $(top_srcdir)/config/depcomp am__depfiles_maybe = depfiles am__mv = mv -f COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \ $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) LTCOMPILE = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \ --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \ $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) CCLD = $(CC) LINK = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \ --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) \ $(LDFLAGS) -o $@ SOURCES = $(zoom_benchmark_SOURCES) $(zoom_bug_641_SOURCES) \ $(zoom_ka_SOURCES) $(zoomsh_SOURCES) $(zoomtst1_SOURCES) \ $(zoomtst10_SOURCES) $(zoomtst11_SOURCES) $(zoomtst2_SOURCES) \ $(zoomtst3_SOURCES) $(zoomtst4_SOURCES) $(zoomtst5_SOURCES) \ $(zoomtst6_SOURCES) $(zoomtst7_SOURCES) $(zoomtst8_SOURCES) \ $(zoomtst9_SOURCES) DIST_SOURCES = $(zoom_benchmark_SOURCES) $(zoom_bug_641_SOURCES) \ $(zoom_ka_SOURCES) $(zoomsh_SOURCES) $(zoomtst1_SOURCES) \ $(zoomtst10_SOURCES) $(zoomtst11_SOURCES) $(zoomtst2_SOURCES) \ $(zoomtst3_SOURCES) $(zoomtst4_SOURCES) $(zoomtst5_SOURCES) \ $(zoomtst6_SOURCES) $(zoomtst7_SOURCES) $(zoomtst8_SOURCES) \ $(zoomtst9_SOURCES) ETAGS = etags CTAGS = ctags DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ AMTAR = @AMTAR@ AR = @AR@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CYGPATH_W = @CYGPATH_W@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DLLTOOL = @DLLTOOL@ DSSSL_DIR = @DSSSL_DIR@ DSYMUTIL = @DSYMUTIL@ DTD_DIR = @DTD_DIR@ DUMPBIN = @DUMPBIN@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ FGREP = @FGREP@ GREP = @GREP@ HTML_COMPILE = @HTML_COMPILE@ ICU_CFLAGS = @ICU_CFLAGS@ ICU_CONFIG = @ICU_CONFIG@ ICU_CPPFLAGS = @ICU_CPPFLAGS@ ICU_CXXFLAGS = @ICU_CXXFLAGS@ ICU_LIBS = @ICU_LIBS@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ LD = @LD@ LDFLAGS = @LDFLAGS@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ LIPO = @LIPO@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ MAKEINFO = @MAKEINFO@ MANIFEST_TOOL = @MANIFEST_TOOL@ MAN_COMPILE = @MAN_COMPILE@ MKDIR_P = @MKDIR_P@ NM = @NM@ NMEDIT = @NMEDIT@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ OTOOL = @OTOOL@ OTOOL64 = @OTOOL64@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ PDF_COMPILE = @PDF_COMPILE@ PTHREAD_CC = @PTHREAD_CC@ PTHREAD_CFLAGS = @PTHREAD_CFLAGS@ PTHREAD_LIBS = @PTHREAD_LIBS@ RANLIB = @RANLIB@ READLINE_LIBS = @READLINE_LIBS@ SED = @SED@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ SSL_CFLAGS = @SSL_CFLAGS@ SSL_LIBS = @SSL_LIBS@ STRIP = @STRIP@ TCLSH = @TCLSH@ TCPD_LIBS = @TCPD_LIBS@ TKL_COMPILE = @TKL_COMPILE@ VERSION = @VERSION@ VERSION_HEX = @VERSION_HEX@ VERSION_SHA1 = @VERSION_SHA1@ WIN_FILEVERSION = @WIN_FILEVERSION@ XML2_CFLAGS = @XML2_CFLAGS@ XSLTPROC_COMPILE = @XSLTPROC_COMPILE@ XSL_DIR = @XSL_DIR@ YACC = @YACC@ YAZ_CONFIG_CFLAGS = @YAZ_CONFIG_CFLAGS@ YAZ_CONF_CFLAGS = @YAZ_CONF_CFLAGS@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_ct_AR = @ac_ct_AR@ ac_ct_CC = @ac_ct_CC@ ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ acx_pthread_config = @acx_pthread_config@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ pkgconfigpath = @pkgconfigpath@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ AM_CPPFLAGS = -I$(top_srcdir)/include $(XML2_CFLAGS) LDADD = ../src/libyaz.la $(READLINE_LIBS) zoomtst1_SOURCES = zoomtst1.c zoomtst2_SOURCES = zoomtst2.c zoomtst3_SOURCES = zoomtst3.c zoomtst4_SOURCES = zoomtst4.c zoomtst5_SOURCES = zoomtst5.c zoomtst6_SOURCES = zoomtst6.c zoomtst7_SOURCES = zoomtst7.c zoomtst8_SOURCES = zoomtst8.c zoomtst9_SOURCES = zoomtst9.c zoomtst10_SOURCES = zoomtst10.c zoomtst11_SOURCES = zoomtst11.c zoomsh_SOURCES = zoomsh.c zoom_benchmark_SOURCES = zoom-benchmark.c zoom_ka_SOURCES = zoom-ka.c zoom_bug_641_SOURCES = zoom-bug-641.c all: all-am .SUFFIXES: .SUFFIXES: .c .lo .o .obj $(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu zoom/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --gnu zoom/Makefile .PRECIOUS: Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): install-binPROGRAMS: $(bin_PROGRAMS) @$(NORMAL_INSTALL) test -z "$(bindir)" || $(MKDIR_P) "$(DESTDIR)$(bindir)" @list='$(bin_PROGRAMS)'; test -n "$(bindir)" || list=; \ for p in $$list; do echo "$$p $$p"; done | \ sed 's/$(EXEEXT)$$//' | \ while read p p1; do if test -f $$p || test -f $$p1; \ then echo "$$p"; echo "$$p"; else :; fi; \ done | \ sed -e 'p;s,.*/,,;n;h' -e 's|.*|.|' \ -e 'p;x;s,.*/,,;s/$(EXEEXT)$$//;$(transform);s/$$/$(EXEEXT)/' | \ sed 'N;N;N;s,\n, ,g' | \ $(AWK) 'BEGIN { files["."] = ""; dirs["."] = 1 } \ { d=$$3; if (dirs[d] != 1) { print "d", d; dirs[d] = 1 } \ if ($$2 == $$4) files[d] = files[d] " " $$1; \ else { print "f", $$3 "/" $$4, $$1; } } \ END { for (d in files) print "f", d, files[d] }' | \ while read type dir files; do \ if test "$$dir" = .; then dir=; else dir=/$$dir; fi; \ test -z "$$files" || { \ echo " $(INSTALL_PROGRAM_ENV) $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL_PROGRAM) $$files '$(DESTDIR)$(bindir)$$dir'"; \ $(INSTALL_PROGRAM_ENV) $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL_PROGRAM) $$files "$(DESTDIR)$(bindir)$$dir" || exit $$?; \ } \ ; done uninstall-binPROGRAMS: @$(NORMAL_UNINSTALL) @list='$(bin_PROGRAMS)'; test -n "$(bindir)" || list=; \ files=`for p in $$list; do echo "$$p"; done | \ sed -e 'h;s,^.*/,,;s/$(EXEEXT)$$//;$(transform)' \ -e 's/$$/$(EXEEXT)/' `; \ test -n "$$list" || exit 0; \ echo " ( cd '$(DESTDIR)$(bindir)' && rm -f" $$files ")"; \ cd "$(DESTDIR)$(bindir)" && rm -f $$files clean-binPROGRAMS: @list='$(bin_PROGRAMS)'; test -n "$$list" || exit 0; \ echo " rm -f" $$list; \ rm -f $$list || exit $$?; \ test -n "$(EXEEXT)" || exit 0; \ list=`for p in $$list; do echo "$$p"; done | sed 's/$(EXEEXT)$$//'`; \ echo " rm -f" $$list; \ rm -f $$list clean-noinstPROGRAMS: @list='$(noinst_PROGRAMS)'; test -n "$$list" || exit 0; \ echo " rm -f" $$list; \ rm -f $$list || exit $$?; \ test -n "$(EXEEXT)" || exit 0; \ list=`for p in $$list; do echo "$$p"; done | sed 's/$(EXEEXT)$$//'`; \ echo " rm -f" $$list; \ rm -f $$list zoom-benchmark$(EXEEXT): $(zoom_benchmark_OBJECTS) $(zoom_benchmark_DEPENDENCIES) $(EXTRA_zoom_benchmark_DEPENDENCIES) @rm -f zoom-benchmark$(EXEEXT) $(LINK) $(zoom_benchmark_OBJECTS) $(zoom_benchmark_LDADD) $(LIBS) zoom-bug-641$(EXEEXT): $(zoom_bug_641_OBJECTS) $(zoom_bug_641_DEPENDENCIES) $(EXTRA_zoom_bug_641_DEPENDENCIES) @rm -f zoom-bug-641$(EXEEXT) $(LINK) $(zoom_bug_641_OBJECTS) $(zoom_bug_641_LDADD) $(LIBS) zoom-ka$(EXEEXT): $(zoom_ka_OBJECTS) $(zoom_ka_DEPENDENCIES) $(EXTRA_zoom_ka_DEPENDENCIES) @rm -f zoom-ka$(EXEEXT) $(LINK) $(zoom_ka_OBJECTS) $(zoom_ka_LDADD) $(LIBS) zoomsh$(EXEEXT): $(zoomsh_OBJECTS) $(zoomsh_DEPENDENCIES) $(EXTRA_zoomsh_DEPENDENCIES) @rm -f zoomsh$(EXEEXT) $(LINK) $(zoomsh_OBJECTS) $(zoomsh_LDADD) $(LIBS) zoomtst1$(EXEEXT): $(zoomtst1_OBJECTS) $(zoomtst1_DEPENDENCIES) $(EXTRA_zoomtst1_DEPENDENCIES) @rm -f zoomtst1$(EXEEXT) $(LINK) $(zoomtst1_OBJECTS) $(zoomtst1_LDADD) $(LIBS) zoomtst10$(EXEEXT): $(zoomtst10_OBJECTS) $(zoomtst10_DEPENDENCIES) $(EXTRA_zoomtst10_DEPENDENCIES) @rm -f zoomtst10$(EXEEXT) $(LINK) $(zoomtst10_OBJECTS) $(zoomtst10_LDADD) $(LIBS) zoomtst11$(EXEEXT): $(zoomtst11_OBJECTS) $(zoomtst11_DEPENDENCIES) $(EXTRA_zoomtst11_DEPENDENCIES) @rm -f zoomtst11$(EXEEXT) $(LINK) $(zoomtst11_OBJECTS) $(zoomtst11_LDADD) $(LIBS) zoomtst2$(EXEEXT): $(zoomtst2_OBJECTS) $(zoomtst2_DEPENDENCIES) $(EXTRA_zoomtst2_DEPENDENCIES) @rm -f zoomtst2$(EXEEXT) $(LINK) $(zoomtst2_OBJECTS) $(zoomtst2_LDADD) $(LIBS) zoomtst3$(EXEEXT): $(zoomtst3_OBJECTS) $(zoomtst3_DEPENDENCIES) $(EXTRA_zoomtst3_DEPENDENCIES) @rm -f zoomtst3$(EXEEXT) $(LINK) $(zoomtst3_OBJECTS) $(zoomtst3_LDADD) $(LIBS) zoomtst4$(EXEEXT): $(zoomtst4_OBJECTS) $(zoomtst4_DEPENDENCIES) $(EXTRA_zoomtst4_DEPENDENCIES) @rm -f zoomtst4$(EXEEXT) $(LINK) $(zoomtst4_OBJECTS) $(zoomtst4_LDADD) $(LIBS) zoomtst5$(EXEEXT): $(zoomtst5_OBJECTS) $(zoomtst5_DEPENDENCIES) $(EXTRA_zoomtst5_DEPENDENCIES) @rm -f zoomtst5$(EXEEXT) $(LINK) $(zoomtst5_OBJECTS) $(zoomtst5_LDADD) $(LIBS) zoomtst6$(EXEEXT): $(zoomtst6_OBJECTS) $(zoomtst6_DEPENDENCIES) $(EXTRA_zoomtst6_DEPENDENCIES) @rm -f zoomtst6$(EXEEXT) $(LINK) $(zoomtst6_OBJECTS) $(zoomtst6_LDADD) $(LIBS) zoomtst7$(EXEEXT): $(zoomtst7_OBJECTS) $(zoomtst7_DEPENDENCIES) $(EXTRA_zoomtst7_DEPENDENCIES) @rm -f zoomtst7$(EXEEXT) $(LINK) $(zoomtst7_OBJECTS) $(zoomtst7_LDADD) $(LIBS) zoomtst8$(EXEEXT): $(zoomtst8_OBJECTS) $(zoomtst8_DEPENDENCIES) $(EXTRA_zoomtst8_DEPENDENCIES) @rm -f zoomtst8$(EXEEXT) $(LINK) $(zoomtst8_OBJECTS) $(zoomtst8_LDADD) $(LIBS) zoomtst9$(EXEEXT): $(zoomtst9_OBJECTS) $(zoomtst9_DEPENDENCIES) $(EXTRA_zoomtst9_DEPENDENCIES) @rm -f zoomtst9$(EXEEXT) $(LINK) $(zoomtst9_OBJECTS) $(zoomtst9_LDADD) $(LIBS) mostlyclean-compile: -rm -f *.$(OBJEXT) distclean-compile: -rm -f *.tab.c @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/zoom-benchmark.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/zoom-bug-641.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/zoom-ka.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/zoomsh.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/zoomtst1.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/zoomtst10.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/zoomtst11.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/zoomtst2.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/zoomtst3.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/zoomtst4.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/zoomtst5.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/zoomtst6.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/zoomtst7.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/zoomtst8.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/zoomtst9.Po@am__quote@ .c.o: @am__fastdepCC_TRUE@ $(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< @am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(COMPILE) -c $< .c.obj: @am__fastdepCC_TRUE@ $(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'` @am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(COMPILE) -c `$(CYGPATH_W) '$<'` .c.lo: @am__fastdepCC_TRUE@ $(LTCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< @am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(LTCOMPILE) -c -o $@ $< mostlyclean-libtool: -rm -f *.lo clean-libtool: -rm -rf .libs _libs ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES) list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in files) print i; }; }'`; \ mkid -fID $$unique tags: TAGS TAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) set x; \ here=`pwd`; \ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in files) print i; }; }'`; \ shift; \ if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ test -n "$$unique" || unique=$$empty_fix; \ if test $$# -gt 0; then \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ "$$@" $$unique; \ else \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ $$unique; \ fi; \ fi ctags: CTAGS CTAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in files) print i; }; }'`; \ test -z "$(CTAGS_ARGS)$$unique" \ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ $$unique GTAGS: here=`$(am__cd) $(top_builddir) && pwd` \ && $(am__cd) $(top_srcdir) \ && gtags -i $(GTAGS_ARGS) "$$here" distclean-tags: -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags distdir: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done check-am: all-am check: check-am all-am: Makefile $(PROGRAMS) installdirs: for dir in "$(DESTDIR)$(bindir)"; do \ test -z "$$dir" || $(MKDIR_P) "$$dir"; \ done install: install-am install-exec: install-exec-am install-data: install-data-am uninstall: uninstall-am install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-am install-strip: if test -z '$(STRIP)'; then \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ install; \ else \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ fi mostlyclean-generic: clean-generic: distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." clean: clean-am clean-am: clean-binPROGRAMS clean-generic clean-libtool \ clean-noinstPROGRAMS mostlyclean-am distclean: distclean-am -rm -rf ./$(DEPDIR) -rm -f Makefile distclean-am: clean-am distclean-compile distclean-generic \ distclean-tags dvi: dvi-am dvi-am: html: html-am html-am: info: info-am info-am: install-data-am: install-dvi: install-dvi-am install-dvi-am: install-exec-am: install-binPROGRAMS install-html: install-html-am install-html-am: install-info: install-info-am install-info-am: install-man: install-pdf: install-pdf-am install-pdf-am: install-ps: install-ps-am install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-am -rm -rf ./$(DEPDIR) -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-am mostlyclean-am: mostlyclean-compile mostlyclean-generic \ mostlyclean-libtool pdf: pdf-am pdf-am: ps: ps-am ps-am: uninstall-am: uninstall-binPROGRAMS .MAKE: install-am install-strip .PHONY: CTAGS GTAGS all all-am check check-am clean clean-binPROGRAMS \ clean-generic clean-libtool clean-noinstPROGRAMS ctags \ distclean distclean-compile distclean-generic \ distclean-libtool distclean-tags distdir dvi dvi-am html \ html-am info info-am install install-am install-binPROGRAMS \ install-data install-data-am install-dvi install-dvi-am \ install-exec install-exec-am install-html install-html-am \ install-info install-info-am install-man install-pdf \ install-pdf-am install-ps install-ps-am install-strip \ installcheck installcheck-am installdirs maintainer-clean \ maintainer-clean-generic mostlyclean mostlyclean-compile \ mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \ tags uninstall uninstall-am uninstall-binPROGRAMS # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: yaz-4.2.30/zoom/zoomtst5.c0000644000175000017500000000772611733047144012300 00000000000000/* This file is part of the YAZ toolkit. * Copyright (C) 1995-2012 Index Data * See the file LICENSE for details. */ #include #include #include #include #include const char *my_callback(void *handle, const char *name) { if (!strcmp(name, "async")) return "1"; return 0; } int main(int argc, char **argv) { int i; int no = argc - 4; ZOOM_connection z[500]; /* allow at most 500 connections */ ZOOM_resultset r[500]; /* and result sets .. */ ZOOM_query q; ZOOM_options o; o = ZOOM_options_create(); if (argc < 5) { fprintf(stderr, "usage:\n%s target1 .. targetN query strategy sort\n", *argv); exit(2); } if (no > 500) no = 500; /* function my_callback called when reading options .. */ ZOOM_options_set_callback(o, my_callback, 0); /* get 20 (at most) records from beginning */ ZOOM_options_set(o, "count", "20"); ZOOM_options_set(o, "implementationName", "sortapp"); ZOOM_options_set(o, "preferredRecordSyntax", "usmarc"); ZOOM_options_set(o, "elementSetName", "B"); /* create query */ q = ZOOM_query_create(); if (strncmp("cql:", argv[argc-3], 4) == 0) { if (ZOOM_query_cql(q, argv[argc-3] + 4)) { printf("bad CQL: %s\n", argv[argc-3] + 4); exit(1); } } else if (ZOOM_query_prefix(q, argv[argc-3])) { printf("bad PQF: %s\n", argv[argc-3]); exit(1); } if (ZOOM_query_sortby2(q, argv[argc-2], argv[argc-1])) { printf("bad sort spec: %s\n", argv[argc-1]); exit(1); } /* connect - and search all */ for (i = 0; i < no; i++) { z[i] = ZOOM_connection_create(o); ZOOM_connection_connect(z[i], argv[i+1], 0); r[i] = ZOOM_connection_search(z[i], q); } /* network I/O */ while (ZOOM_event(no, z)) ; /* handle errors */ for (i = 0; i < no; i++) { int error; const char *errmsg, *addinfo; if ((error = ZOOM_connection_error(z[i], &errmsg, &addinfo))) fprintf(stderr, "%s error: %s (%d) %s\n", ZOOM_connection_option_get(z[i], "host"), errmsg, error, addinfo); else { /* OK, no major errors. Look at the result count */ int pos; printf("%s: %ld hits\n", ZOOM_connection_option_get(z[i], "host"), (long) ZOOM_resultset_size(r[i])); /* go through first 20 records at target */ for (pos = 0; pos < 20; pos++) { ZOOM_record rec; const char *db, *syntax, *str; int record_len, syntax_len; rec = ZOOM_resultset_record(r[i], pos); /* get database for record and record itself at pos */ db = ZOOM_record_get(rec, "database", 0); str = ZOOM_record_get(rec, "xml", &record_len); syntax = ZOOM_record_get(rec, "syntax", &syntax_len); /* if rec is non-null, we got a record for display */ if (str) { printf("%d %s %s\n", pos+1, syntax, (db ? db : "unknown")); if (rec) { if (fwrite(str, 1, record_len, stdout) != (size_t) record_len) printf("write to stdout failed\n"); } printf("\n"); } } } } /* destroy stuff and exit */ ZOOM_query_destroy(q); for (i = 0; i < no; i++) { ZOOM_resultset_destroy(r[i]); ZOOM_connection_destroy(z[i]); } ZOOM_options_destroy(o); exit(0); } /* * Local variables: * c-basic-offset: 4 * c-file-style: "Stroustrup" * indent-tabs-mode: nil * End: * vim: shiftwidth=4 tabstop=8 expandtab */ yaz-4.2.30/zoom/zoomtst6.c0000644000175000017500000000727511733047144012300 00000000000000/* This file is part of the YAZ toolkit. * Copyright (C) 1995-2012 Index Data * See the file LICENSE for details. */ #include #include #include #include static void display_records (const char *tname, ZOOM_resultset r) { /* OK, no major errors. Look at the result count */ int pos; printf ("%s: %ld hits\n", tname, (long) ZOOM_resultset_size(r)); /* go through all records at target */ for (pos = 0; pos < 4; pos++) { ZOOM_record rec = ZOOM_resultset_record (r, pos); if (rec) { /* get database for record and record itself at pos */ const char *db = ZOOM_record_get (rec, "database", 0); int len; const char *render = ZOOM_record_get (rec, "render", &len); /* if rec is non-null, we got a record for display */ if (rec) { printf ("%d %s\n", pos+1, (db ? db : "unknown")); if (render) { if (fwrite (render, 1, len, stdout) != (size_t) len) printf("write to stdout failed\n"); } printf ("\n"); } } } } int main(int argc, char **argv) { int i; int no = argc-3; ZOOM_connection z[500]; /* allow at most 500 connections */ ZOOM_resultset r1[500]; /* and result sets .. */ ZOOM_resultset r2[500]; /* and result sets .. */ ZOOM_query q; ZOOM_options o; o = ZOOM_options_create (); if (argc < 4) { fprintf (stderr, "usage:\n%s target1 .. targetN query1 query2\n", *argv); exit (1); } if (no > 500) no = 500; ZOOM_options_set (o, "async", "1"); /* get 3 (at most) records from beginning */ ZOOM_options_set (o, "count", "3"); ZOOM_options_set (o, "preferredRecordSyntax", "sutrs"); ZOOM_options_set (o, "elementSetName", "B"); /* create query */ q = ZOOM_query_create (); if (ZOOM_query_prefix (q, argv[argc-2])) { printf ("bad PQF: %s\n", argv[argc-2]); exit (2); } /* connect - and search all */ for (i = 0; i #include #include #include #include #include #include #include int main(int argc, char **argv) { ZOOM_connection z; ZOOM_options o = ZOOM_options_create (); const char *errmsg, *addinfo; if (argc != 4) { fprintf (stderr, "usage:\nzoom-ka sleepinterval target query\n"); exit(1); } /* async mode */ ZOOM_options_set (o, "async", "1"); z = ZOOM_connection_create(o); while(1) { int i, error; ZOOM_resultset rset; ZOOM_connection_connect (z, argv[2], 0); rset = ZOOM_connection_search_pqf(z, argv[3]); while ((i = ZOOM_event(1, &z))) { printf ("no = %d event = %d\n", i-1, ZOOM_connection_last_event(z)); } if ((error = ZOOM_connection_error(z, &errmsg, &addinfo))) { fprintf(stderr, "%s error: %s (%d) %s\n", ZOOM_connection_option_get(z, "host"), errmsg, error, addinfo); } ZOOM_resultset_destroy(rset); sleep(atoi(argv[1])); } ZOOM_connection_destroy (z); ZOOM_options_destroy(o); } /* * Local variables: * c-basic-offset: 4 * c-file-style: "Stroustrup" * indent-tabs-mode: nil * End: * vim: shiftwidth=4 tabstop=8 expandtab */ yaz-4.2.30/zoom/zoomsh.c0000644000175000017500000005747511733047144012021 00000000000000/* This file is part of the YAZ toolkit. * Copyright (C) 1995-2012 Index Data * See the file LICENSE for details. */ /** \file zoomsh.c \brief ZOOM C command line tool (shell) */ #if HAVE_CONFIG_H #include #endif #include #include #include #include #include #include #if HAVE_READLINE_READLINE_H #include #endif #if HAVE_READLINE_HISTORY_H #include #endif #include #include #define MAX_CON 100 static void process_events(ZOOM_connection *c) { int i; yaz_log(YLOG_DEBUG, "process_events"); while ((i = ZOOM_event(MAX_CON, c)) != 0) { int peek = ZOOM_connection_peek_event(c[i-1]); int event = ZOOM_connection_last_event(c[i-1]); yaz_log(YLOG_DEBUG, "no = %d peek = %d event = %d %s", i-1, peek, event, ZOOM_get_event_str(event)); } } static int next_token_chars(const char **cpp, const char **t_start, const char *tok_chars) { int len = 0; const char *cp = *cpp; while (*cp == ' ') cp++; if (*cp == '"') { cp++; *t_start = cp; while (*cp && *cp != '"') { cp++; len++; } if (*cp) cp++; } else { *t_start = cp; while (*cp && !strchr(tok_chars, *cp)) { cp++; len++; } if (len == 0) len = -1; } *cpp = cp; return len; /* return -1 if no token was read .. */ } static int next_token(const char **cpp, const char **t_start) { return next_token_chars(cpp, t_start, "\r\n "); } static WRBUF next_token_new_wrbuf(const char **cpp) { WRBUF w = 0; const char *start; int len = next_token(cpp, &start); if (len < 0) return 0; w = wrbuf_alloc(); if (len > 0) wrbuf_write(w, start, len); return w; } static int is_command(const char *cmd_str, const char *this_str, int this_len) { int cmd_len = strlen(cmd_str); if (cmd_len != this_len) return 0; if (memcmp(cmd_str, this_str, cmd_len)) return 0; return 1; } static int cmd_set(ZOOM_connection *c, ZOOM_resultset *r, ZOOM_options options, const char **args) { WRBUF key; const char *val_buf; int val_len; if (!(key = next_token_new_wrbuf(args))) { printf("missing argument for set\n"); return 1; } val_len = next_token_chars(args, &val_buf, ""); if (val_len != -1) ZOOM_options_setl(options, wrbuf_cstr(key), val_buf, val_len); else ZOOM_options_set(options, wrbuf_cstr(key), 0); wrbuf_destroy(key); return 0; } static int cmd_get(ZOOM_connection *c, ZOOM_resultset *r, ZOOM_options options, const char **args) { WRBUF key; if (!(key = next_token_new_wrbuf(args))) { printf("missing argument for get\n"); return 1; } else { const char *val = ZOOM_options_get(options, wrbuf_cstr(key)); printf("%s = %s\n", wrbuf_cstr(key), val ? val : ""); wrbuf_destroy(key); } return 0; } static int cmd_rget(ZOOM_connection *c, ZOOM_resultset *r, ZOOM_options options, const char **args) { WRBUF key; if (!(key = next_token_new_wrbuf(args))) { printf("missing argument for get\n"); return 1; } else { int i; for (i = 0; i"); } wrbuf_destroy(key); } return 0; } static int cmd_close(ZOOM_connection *c, ZOOM_resultset *r, ZOOM_options options, const char **args) { WRBUF host; int i; host = next_token_new_wrbuf(args); for (i = 0; i\n"); printf("search \n"); printf("show [ [ [\n"); printf("quit\n"); printf("close \n"); printf("ext \n"); printf("set